111 Commits

Author SHA1 Message Date
vchikalkin
b7554b89c8 .gitignore: add *.cmd 2025-08-19 12:09:57 +03:00
vchikalkin
b44d92cef3 Update Docker images in docker-compose and GitHub Actions workflow to use dynamic tags
- Changed Docker image references in docker-compose.yml to utilize environment variables for versioning.
- Updated GitHub Actions workflow to generate and use dynamic image tags based on the commit SHA for both web and bot images.
- Ensured that the .env file is populated with the new image tags during the deployment process.
2025-08-15 21:15:10 +03:00
Vlad Chikalkin
7d94521c8b
Issues/76 (#77)
* fix(jwt): update import path for isTokenExpired function to remove file extension

* packages/graphql: add slot tests

* fix(slots): update error handling for customer and slot retrieval, enhance time validation in slot updates

* fix(slots): update error messages for missing datetime fields and improve validation logic in slot updates

* fix(slots): update error messages and validation logic for slot creation and updates, including handling of datetime fields and master status

* refactor(slots): rename checkUpdateIsTimeChanging to checkUpdateDatetime for clarity in slot update validation

* test(slots): add comprehensive tests for getAvailableTimeSlots method, including edge cases and error handling

* fix(api): standardize error messages for customer and slot retrieval, and improve validation logic in slots service

* refactor(slots): rename validation methods for clarity and consistency in slot service

* OrdersService: add checkBeforeCreate

* add orders.test.js

* test(orders): add validation test for missing datetime_end in order creation

* feat(orders): implement updateOrder functionality with comprehensive validation tests

- Added updateOrder method in OrdersService with checks for permissions, order state, and datetime validation.
- Implemented tests for various scenarios including successful updates, permission errors, and validation failures.
- Enhanced error handling for overlapping time and invalid state changes.
- Updated GraphQL operations to support sorting in GetOrders query.

* fix(orders): update datetime validation logic and test cases for order creation and completion

- Modified order creation tests to set datetime_start to one hour in the past for past orders.
- Updated the OrdersService to use isNowOrAfter for validating order completion against the start time.
- Enhanced datetime utility function to accept a unit parameter for more flexible comparisons.

* fix(calendar): initialize selected date in ScheduleCalendar component if not set

- Added useEffect to set the selected date to the current date if it is not already defined.
- Imported useEffect alongside useState for managing component lifecycle.

* fix(order-form): initialize selected date in DateSelect component if not set

- Added useEffect to set the selected date to the current date if it is not already defined.
- Renamed setDate to setSelectedDate for clarity in state management.

* refactor(orders): streamline order creation logic and enhance test setup

- Removed redundant variable assignments in the createOrder method for cleaner code.
- Updated test setup in orders.test.js to use global mocks for user and service retrieval, improving test clarity and maintainability.
- Added checks for required fields in order creation to ensure data integrity.
2025-08-11 16:25:14 +03:00
vchikalkin
ba88305bbf feat(orders, slots, schedule): enhance order and slot button functionality with date validation and conditional rendering 2025-08-02 20:40:09 +03:00
vchikalkin
ee6ccbef84 feat(slots): add error handling for slot deletion when orders are present 2025-08-02 19:28:38 +03:00
vchikalkin
6c4e6113f6 refactor(api): replace CustomerProfile with UserProfile and streamline user retrieval across services 2025-08-02 18:53:23 +03:00
vchikalkin
25fb9269fc refactor(calendar): comment out past date disabling logic for calendar component; refactor day slots list to improve slot display and add conditional rendering for add form 2025-08-02 18:07:00 +03:00
Vlad Chikalkin
ed197143d6
Feature/tma back button (#70)
* feat(layout): integrate TelegramProvider and BackButton into main layout for enhanced navigation

* refactor(layout): remove BackButton from main layout and update navigation imports

* use ui back button for non tma mode
2025-08-02 15:42:06 +03:00
vchikalkin
278da049a5 refactor(service-card): add text truncation to service name for improved layout 2025-08-02 11:11:29 +03:00
vchikalkin
9061c6eda3 feat(slots): add time validation to prevent past slot selection 2025-08-02 11:07:18 +03:00
Vlad Chikalkin
10981e2afb
Issues/66 (#67)
* feat(profile): add 'Услуги' link button to LinksCard for service management

* feat(services): add create and update service functionalities with corresponding API actions and hooks
2025-08-01 19:54:10 +03:00
Vlad Chikalkin
fde9305632
Fix/bugs features pt 3 (#64)
* chore(docker): add healthcheck to service in docker-compose.yml and update deploy workflow to include docker compose down

* refactor(orders): add useOrdersInfiniteQuery for improved pagination and add load more button in orders list components

* refactor(graphql): remove NotifyService and related notification logic from orders and API, clean up unused dependencies

* refactor(api): streamline customer, order, service, and slot actions by wrapping server functions with client action utility to rethrow error messages to client
2025-07-23 13:15:08 +03:00
vchikalkin
ae0e7cc1a7 refactor(orders-list): replace HorizontalCalendar with Calendar component and update date selection logic for improved clarity and functionality 2025-07-19 16:52:52 +03:00
Vlad Chikalkin
ccfc65ca9b
Fix/bugs features pt 2 (#58)
* refactor(profile): comment out change role feature

* refactor(orders): update OrderServices and ServiceSelect components to utilize ServiceCard, and enhance service fields with duration in GraphQL types

* refactor(schedule): implement forbidden order states to disable editing slots with active orders

* fix(deploy): update SSH configuration to use dynamic port from secrets for improved flexibility

* refactor(api/orders): simplify order creation logic by removing unnecessary validations and improving error handling

* refactor(contact-row): replace role display logic with useIsMaster hook for improved clarity

* refactor(profile/orders-list): update header text from "Общие записи" to "Недавние записи" for better clarity
gql: GetOrders add sort slot.date:desc

* refactor(profile/orders-list): enhance OrderCard component by adding avatarSource prop based on user role

* feat(order-form): implement date selection with event highlighting and monthly view for available time slots

* refactor(i18n/config): update timeZone from 'Europe/Amsterdam' to 'Europe/Moscow'

* refactor(order-form/datetime-select): enhance date selection logic to include slot availability check

* refactor(datetime-format): integrate dayjs timezone support with default Moscow timezone for date and time formatting

* fix(contact-row): replace useIsMaster hook with isCustomerMaster utility for role display logic

* refactor(service-card): replace formatTime with getMinutes for duration display

* refactor(order-datetime): update date and time handling to use datetime_start and datetime_end for improved consistency

* refactor(profile): streamline profile and slot pages by integrating session user retrieval and updating booking logic with BookButton component

* fix(navigation): append query parameter to bottom-nav links and enhance back navigation logic in success page
2025-07-18 17:11:43 +03:00
Vlad Chikalkin
1075e47904
Update message.ts 2025-07-04 10:08:05 +03:00
vchikalkin
6a8804abb1 refactor(api/notify): format orderCreated method parameters for improved readability 2025-07-03 22:52:16 +03:00
vchikalkin
53af172e34 feat(api/notify): enhance order creation notifications with dynamic emoji and confirmation text based on creator role 2025-07-03 22:51:03 +03:00
vchikalkin
cc91c5cb30 feat(api/notify): update notification messages with dynamic emojis based on order state 2025-07-03 22:44:28 +03:00
vchikalkin
686fe60b80 feat(api/orders): add validation to prevent masters from recording other masters as clients 2025-07-03 22:31:41 +03:00
vchikalkin
1e4e4aa336 fix(bot): improve text clarity in messages and commands list 2025-07-03 22:03:09 +03:00
vchikalkin
1c295a4b41 refactor(bot): add comments 2025-07-03 21:36:44 +03:00
vchikalkin
d9b054df14 feat(bot): add phone number validation and error handling for contact messages
set active: true after full registration
2025-07-03 21:30:17 +03:00
vchikalkin
ac897a77f8 chore(docker-compose): remove build context and dockerfile references for web and bot services 2025-07-03 20:55:50 +03:00
vchikalkin
9efa022cd6 fix build 2025-07-03 20:54:08 +03:00
vchikalkin
33a20b9f2e refactor(bot): replace CustomersService with RegistrationService for customer management 2025-07-03 19:44:36 +03:00
vchikalkin
d41194f177 fix(bot): streamline customer creation logic by checking for existing customer before creating a new one 2025-07-03 19:02:25 +03:00
vchikalkin
28e88e02aa fix(bot): remove extra newline in commands list for improved formatting 2025-07-03 18:19:44 +03:00
vchikalkin
8feb0d3c05 feat(bot): add profile editing prompt to commands list 2025-07-03 18:03:33 +03:00
vchikalkin
339fff1879 fix(api/orders): refine permission checks for order access based on client and master roles 2025-07-03 17:23:36 +03:00
vchikalkin
c8bf3d9358 deploy: add BOT_URL 2025-07-03 16:51:46 +03:00
Vlad Chikalkin
7bcae12d54
Fix/bugs after first release (#26)
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
* web/packages: upgrade next

* fix(api/orders): update master validation logic to handle optional masters

* fix(api/notify, api/orders): enhance notification messages and update order state handling for masters

* fix react typings

* refactor(order-buttons, action-panel): streamline button handlers and add return functionality

* fix(contacts, orders): replace empty state messages with DataNotFound component for better user feedback

* feat(bot): add share bot command and update environment configuration for BOT_URL

* fix: pnpm-lock.yaml

* feat(bot): implement add contact wizard scene and enhance contact handling logic

* feat(profile): add BookContactButton component to enhance booking functionality

* fix(order-buttons): update cancel and confirm button logic based on order state

* feat(service-select): share services list for all
enhance service card display with duration formatting and improve layout
2025-07-03 16:36:10 +03:00
vchikalkin
1772ea4ff8 docker-compose: comment ports
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-07-02 21:53:33 +03:00
vchikalkin
62af72d45f docker-compose.yml: add networks
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-07-02 21:25:48 +03:00
vchikalkin
ae63e4cb3b workflow: update deploy
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-07-02 21:20:00 +03:00
vchikalkin
b5da687dae apps/web: improve Dockerfile
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-07-02 21:05:59 +03:00
vchikalkin
79c404749c apps/bot: fix Dockerfile
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-07-02 20:50:30 +03:00
vchikalkin
7a3dd4688b fix apps/bot build
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-07-02 19:55:15 +03:00
vchikalkin
ecc7b44d6d fix build web with docker compose
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-07-02 17:46:33 +03:00
vchikalkin
ad4abdcb28 Update GitHub Actions workflow to use actions/checkout@v3 for consistency across deployment jobs
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-06-27 23:18:14 +03:00
vchikalkin
4a13044d3e Refactor GitHub Actions workflow for Docker deployment
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
- Replace Docker Buildx setup with direct Docker installation.
- Update Docker Hub login method to use command line.
- Separate build and push steps for web and bot images for clarity and maintainability.
2025-06-27 23:16:26 +03:00
vchikalkin
aa8521fec7 add docker-compose and CI/CD workflow for web and bot services
Some checks failed
Build & Deploy Web & Bot / Build and Push to Docker Hub (push) Has been cancelled
Build & Deploy Web & Bot / Deploy to VPS (push) Has been cancelled
2025-06-27 23:12:06 +03:00
vchikalkin
4369110076 order-card: add order_number to ui 2025-06-27 14:51:00 +03:00
vchikalkin
204e3b7581 order-buttons: add onComplete button 2025-06-27 14:19:58 +03:00
Vlad Chikalkin
c5799a7f00
Feature/orders (#25)
* add contacts scroller

* add service select

* add calendar & time picker

* context/order: add masterId

* Revert "context/order: add masterId"

This reverts commit d5d07d7b2f5b6673a621a30b00ad087c60675a3f.

* components/order-form: add back button

* disable submit button if no customer selected

* disable submit button if no service selected

* service component: comment span

* save selected date to context

* fix calendar padding

* hooks/slot: rename index -> master

* slot list: render immediately

* fix step components rendering

* add check icon for masters

* Revert "add check icon for masters"

This reverts commit cc81a9a504918ebbffcca8d035c7c4984f109957.

* prepare for split contacts grid into masters/clients grid

* create MastersGrid & master-select step

* optimize useCustomerContacts

* add ClientsGrid & 'client-select' step

* add self to masters list & border avatar

* context/order: split into files

* hooks/profile: allow pass empty args to useProfileQuery/useProfileMutation

* context/order: skip client-select in client steps

* packages: upgrade next@15.3.0

* .vscode: add launch.json

* back-button: fix steps using

* contacts: skip client step for client

* fix react types

* ServiceSelect: fix padding

* Revert "contacts: skip client step for client"

This reverts commit db9af07dab9df9428561a1952f5a2c91c5b9d88d.

* fix steps for client & master

* split datetime-select into files

* improve useSlots hook

* migrate from order context to zustand store

* pass order store via context

* fix submit button not working

* skip master select for master & client select for client

* select time feature & get final order values

* apps/web: rename actions/service -> actions/services

* create order works!

* split next-button into two buttons

* add result pages (success, error)

* packages/graphql: add eslint

* merge branch 'refactor-api' (#23)

* refactor customer api

* refactor slots api

* hooks/customers: use invalidateQueries

* refactor services api

* optimize hooks queryKey

* refactor orders api

* typo refactor hooks

* fix telegramId type (number)

* fix bot with new api

* rename customers masters & clients query

* fix useClientsQuery & useMastersQuery query

* new line after 'use client' & 'use server' directives

* move getAvailableTimeSlots to server

* getAvailableTimeSlots: add filter by orders

* take into service duration when computing times

* fix GetSlotsOrders order

* take into existing orders when computing times

* fix build

* app/orders: fill page with content

* stores/order: split into slices

* components/orders: remove nested components dirs

* move order store -> orders\order-store

* replace ScheduleTimeContext with ScheduleStore

* fix slots queries

* context: rename contexts properly

* finally organized stores & context

* move order-card & time-range to @/components/shared

* Refactor/components folder structure (#24)

* refactor components/navigation

* refactor components/orders

* refactor components/profile

* refactor components/schedule

* remove components/common/spinner

* add launch.json

* add horizontal calendar

* remove context/date.tsx

* optimize orders list fetching

* add numberOfDaysBefore param

* fix orders list in slot page

* graphql/api: remove throw new Error

* horizontal-calendar: switch months by arrow buttons

* SlotCard: use SlotComponentProps type

* stores/schedule: export useScheduleStore

* SlotPage: add page header title

* contacts: mark inactive contacts

* prefetchQuery customer profile pages

* fix create slot

* packages: radash -> radashi

* fix queries, using formatDate & formatTime on client

* graphql: remove rename operations files

* fix create order query

* fix show actual slot status after slot update

* order page

* slot page: replace buttons with floating panel

* fix blur & colors

* fix floating panel overflows content

* hide ClientsOrdersList for non masters

* hooks/services: rename input -> variables

* move OrderCard types close to component

* exact types for Slot components & page

* app/profile: show shared orders

* order-services: fix types

* order page: add buttons

* order-card: add colors

* add order status alert

* fix badges & alerts

* take into account cancelled and completed orders in the slot list

* action panel: hide if no handlers

* highlight days with slots in schedule calendar

* highlight days in horizontal calendar

* remove getSlotsOrders fn

* show masters avatar in orders list

* fix auth redirects

* fix orders list for client

* create useIsMaster hook to prevent duplication

* order: revert cancel button for master

* FloatingActionPanel: block buttons while pending request

* hooks: invalidate orders & slots after mutate & delete

* order: revert approve button for master

* api/orders: protect update order

* order-card: show date

* order-card: add showDate variables in props

* order: add repeat button

* disable dashboard button

* apps/bot: beautify messages

* order: notify to telegram messages

* orderUpdate: add status info
2025-06-27 13:44:17 +03:00
vchikalkin
b418790ae4 packages: upgrade 'eslint-config-awesome'@2.2.2, 'eslint'@9.17.0 2025-02-27 13:24:00 +03:00
vchikalkin
042b3f4308 apps/web: upgrade package 'next'@15.2.0 2025-02-27 12:33:44 +03:00
vchikalkin
498f580dd9 organize components exports 2025-02-26 17:57:27 +03:00
vchikalkin
cc30d0163c fix login via telegram 2025-02-20 19:18:56 +03:00
Vlad Chikalkin
06be87f0ec
Feature/records (#22)
* components/profile: rename components files

* components/profile: organize files & folders

* split DataCard to 2 components

* [2] components/profile: organize files & folders

* data-card: fix phone field disabled

* fix card header color

* add schedule button for master

* fix navigation & profile background

* add basic schedule page

* fix bottom navbar overflows content

* header: remove bottom margin

* replace vanilla calendar with shadcn/ui one

* add slot functional

* fix forbidden error

* add slot operations

* show slots

* filter by selected day

* add hook useSlots
fix update slots list after add slot
fix initial fetch slots

* use slots hooks

* split edit-slot-form into files

* rename /time-slots -> /components

* refactor components & folders structure

* add feature: delete slot

* hooks/slot: update query keys

* add hooks/profile

* add hook useProfileMutation

* use useProfileMutation hook for update role

* rename useProfile -> useProfileQuery

* fix useProfileQuery queryKey

* add hook useContactsQuery

* remove unused ternary operator

* header: add backdrop blur

* create slot cards

* fix elements y center

* fix getSlots filters

* ui/ux improvements

* fix date time types & names

* move profile components from sub folder

* add basic slot page

* fix add slot form padding x

* add slot buttons

* extend slot card information

* fix import type

* use Container in pages

* change orange -> yellow for dark

* use Loading spinner in slots list

* refactor \components\schedule dir structure

* add orders list

* change query & mutation keys

* change url /profile/schedule/slot/ -> /slots/

* order: show services

* remove prefetchQuery

* bring the results of queries and hooks into a single form

* react query: globally show error toast

* add font inter

* fix header: center text

* orders: add sorting

* order card: add avatar

* rename records -> orders

* reduced text size

* fix slot buttons

* fix datetime card ui

* fix header: center text (finally)

* layout/container: last:mb-4

* fix type

* slot-datetime: use ReadonlyTimeRange

* rename files & components

* remove unnecessary context using

* feature: edit slot time

* fix: selected day reset after go back to /schedule

* rename AddTimeRange -> EditableTimeRangeForm & refactor

* fix some elements on page before data loaded

* fix text size

* slot-card: remove gap

* slot-date: remove margin

* fix slots & orders layout

* toast: show error text in ui
2025-02-20 18:11:28 +03:00
vchikalkin
c8a602db05 apps/web: bottom navbar only for first-level pages 2025-01-29 11:53:48 +03:00