- Adjusted the formatting of terms and definitions in the privacy policy to ensure consistent presentation and clarity.
- Removed unnecessary hyphenation in the definition of "Разработчик" and "Политика" for improved readability.
- Added a new layout component for the public offer document.
- Created the public offer page in MDX format, detailing terms and conditions for service usage.
- Removed the old offer page in TSX format.
- Updated links for offer and support to a new shared component for better maintainability.
- Integrated Tailwind CSS typography plugin for improved text styling.
- Added 12-hour TTL for GetCustomer and GetSubscriptionSettings queries to improve caching strategy.
- Ensured other queries remain unchanged with their TTL set to false.
- Integrated libphonenumber-js to handle phone number parsing and validation in the addContact and registration features.
- Removed deprecated phone validation and normalization functions from utils.
- Updated contact handling logic to ensure valid phone numbers are processed correctly.
- Consolidated booking logic into a single handleBook function based on customer role.
- Removed unused Drawer and Button components to streamline the ProfileButtons component.
- Added loading state handling for improved user experience.
- Added a check to prevent rendering the ReadonlyServicesList component for users with the 'Client' role, ensuring a tailored experience based on user permissions.
- Added a condition to return null for the SubscriptionInfoBar component if the customer role is 'Client', ensuring that clients do not see the subscription information.
- Added CustomersService to retrieve customer information based on telegramId.
- Enhanced invoice provider data to include customer phone and item details for improved payment processing.
- Updated the subscription function to utilize the new customer data in the invoice generation.
- Replaced the use of CustomersService.getCustomer with RegistrationService.checkCustomerExists for improved consistency in customer existence checks.
- Introduced a new instance of CustomersService for adding invited users, maintaining functionality while enhancing code clarity.
- Updated the addContact and registration features to replace getCustomer calls with checkCustomerExists, improving consistency in customer existence checks.
- Modified GraphQL operations to remove deprecated getCustomer queries and introduced a new checkCustomerExists query for better clarity and efficiency.
- Adjusted queryTTL configuration in cache-proxy to reflect the removal of unused endpoints.
- Introduced path filtering using `dorny/paths-filter` to conditionally build and push Docker images for web, bot, and cache-proxy projects based on changes.
- Added outputs to track which projects were built and modified the build and push steps to execute conditionally.
- Created separate environment files for each project tag and implemented logic to merge these files into a main `.env` file during deployment.
- Improved the deployment process by conditionally copying environment files to the VPS based on whether the corresponding project was built.
- Added new entries for `GetCustomers`, `GetInvited`, `GetInvitedBy`, `GetOrders`, `GetServices`, `GetSlots`, and `GetSubscriptionHistory` with default values set to false.
- Removed the `Login` entry from the previous configuration, ensuring clarity in the query time-to-live settings.
- Modified the logic in the PageHeader component to hide the BackButton when in production or when the TMA status is 'simple', improving user experience by reducing unnecessary navigation options.
* apps/web: add generic privacy & offer pages
* Update environment variables and enhance offer and privacy pages
- Added `OFFER_URL` and `SUPPORT_TELEGRAM_URL` to environment variable configuration for better flexibility.
- Updated the offer page to dynamically link to the offer URL and improved contact information presentation with a direct link to the support Telegram.
- Revised the privacy policy page to reflect the service name and updated contact details, ensuring clarity and consistency in communication.
* move offer & privacy -> (documents) sub directory
* Update offer and privacy pages to include user consent for third-party data sharing
- Added a clause in the offer page requiring users to ensure consent from third parties when adding their contact information.
- Updated the privacy policy to clarify that users can share third-party data, emphasizing the need for consent for data processing within the service.
* Add privacy agreement and update environment variables
- Introduced `PRIVACY_URL` to the environment configuration for dynamic linking.
- Updated localization files to include a user consent agreement for sharing phone numbers, linking to the offer and privacy URLs.
- Enhanced welcome and contact addition messages to incorporate the new consent clause, improving user clarity on data handling.
* Refactor phone agreement localization and enhance user consent messaging
- Updated the Russian localization file to streamline the phone sharing agreement, improving clarity on user consent for data processing.
- Modified the contact addition and welcome messages to incorporate the new agreement format, ensuring users are informed about their consent to share personal data.
* Enhance Russian localization and update message formatting
- Added a new payment agreement clause in the Russian localization file, clarifying user consent for payments.
- Updated message formatting in the contact addition and subscription processes to support HTML parsing, improving message presentation and user experience.
- Incorporated the new payment agreement into the subscription flow, ensuring users are informed about their consent to the terms.
* Refactor Russian localization for contact agreements and enhance user consent messaging
- Updated the Russian localization file to separate and clarify the phone sharing and contact sharing agreements, improving user understanding of consent requirements.
- Modified the contact addition and welcome messages to utilize the new agreement format, ensuring users are informed about their consent to share personal data in a more structured manner.
* Enhance Russian localization and add document handling features
- Updated the Russian localization file to include new entries for privacy policy and public offer documents, improving user access to important information.
- Added 'documents' command to the bot's command list, allowing users to easily access document-related features.
- Integrated document handling in the main menu and handlers, enhancing user experience and navigation within the bot.
- Converted several async components to synchronous functions, including `Layout`, `AddOrdersPage`, `ProfilePage`, `SlotPage`, and `ServicePage`, enhancing rendering efficiency.
- Removed unnecessary prefetching logic and hydration boundaries, simplifying component structure and improving maintainability.
- Updated the `TelegramProvider` to return null during the initial mount instead of a loading message, streamlining the loading state handling.
- Enhanced loading state management in order-related components by adding loading spinners and data not found alerts, improving user experience during data fetching.
- Introduced a new input for capturing the surname of the user during contact addition.
- Updated the contact parsing logic to include surname alongside name and phone number.
- Modified the customer creation and update processes to accommodate surname, ensuring full name is used in confirmation messages.
- Adjusted localization files to reflect the new surname input prompt and updated confirmation messages.
- Refactored components to utilize a unified method for retrieving full customer names, improving consistency across the application.
- Introduced a new `QuickAppointment` component for scheduling appointments directly from the profile page.
- Integrated the `QuickAppointment` component into the profile layout, allowing users to book appointments with a selected master or client.
- Implemented a Radix UI Drawer for the appointment booking interface, enhancing user experience with a modal-like interaction.
- Updated `pnpm-lock.yaml` and `package.json` to include new dependencies for the Radix UI components and the `vaul` library.
- Updated the `createApolloClient` function to directly handle authorization headers and GraphQL URI configuration, improving modularity and reducing complexity.
- Removed the `createLink` function, streamlining the client setup process and enhancing maintainability.
- Renamed type `Parameters` to `Parameters_` for clarity in the client function signature.
* Refactor GraphQL client usage in services to improve consistency
- Replaced direct calls to `getClientWithToken` with a new method `getGraphQLClient` across multiple services, ensuring a unified approach to obtaining the GraphQL client.
- Updated the `BaseService` to manage the GraphQL client instance, enhancing performance by reusing the client when available.
* Refactor UpdateProfile component to use useClientOnce for initial profile update
- Replaced useEffect with useClientOnce to handle the first login profile update more efficiently.
- Removed local state management for hasUpdated, simplifying the component logic.
- Updated localStorage handling to ensure the profile update occurs only on the first login.
* Refactor Apollo Client setup to improve modularity and maintainability
- Introduced a new `createLink` function to encapsulate the link creation logic for Apollo Client.
- Updated `createApolloClient` to utilize the new `createLink` function, enhancing code organization.
- Simplified the handling of authorization headers by moving it to the link configuration.
* Add cache-proxy application with initial setup and configuration
- Created a new cache-proxy application using NestJS, including essential files such as Dockerfile, .gitignore, and .eslintrc.js.
- Implemented core application structure with AppModule, ProxyModule, and ProxyController for handling GraphQL requests.
- Configured caching with Redis and established environment variable management using Zod for validation.
- Added utility functions for query handling and time management, enhancing the application's functionality.
- Included README.md for project documentation and setup instructions.
* Add cache-proxy service to Docker configurations and update deployment workflow</message>
<message>
- Introduced a new cache-proxy service in both `docker-compose.dev.yml` and `docker-compose.yml`, with dependencies on Redis and integration into the web and bot services.
- Updated GitHub Actions workflow to include build and push steps for the cache-proxy image, ensuring it is deployed alongside web and bot services.
- Modified environment variable management to accommodate the cache-proxy, enhancing the overall deployment process.
- Adjusted GraphQL cached URL to point to the cache-proxy service for improved request handling.
* Add health check endpoint and controller to cache-proxy service
- Implemented a new HealthController in the cache-proxy application to provide a health check endpoint at `/api/health`, returning a simple status response.
- Updated the AppModule to include the HealthController, ensuring it is registered within the application.
- Configured a health check in the Docker Compose file for the cache-proxy service, allowing for automated health monitoring.
* Update proxy controller and environment variable for cache-proxy service
- Changed the route prefix of the ProxyController from `/proxy` to `/api` to align with the new API structure.
- Updated the default value of the `URL_GRAPHQL_CACHED` environment variable to reflect the new route, ensuring proper integration with the GraphQL service.
* Update cache proxy configuration for query time-to-live settings
- Increased the time-to-live for `GetCustomer`, `GetOrder`, `GetService`, and `GetSlot` queries to 24 hours, enhancing cache efficiency and performance.
- Maintained the existing setting for `GetSubscriptions`, which remains at 12 hours.
* Enhance subscription management and configuration settings
- Added new query time-to-live settings for `GetSlotsOrders`, `GetSubscriptionPrices`, and `GetSubscriptions` to improve caching strategy.
- Implemented `hasTrialSubscription` method in `SubscriptionsService` to check for trial subscriptions based on user history, enhancing subscription management capabilities.
- Updated GraphQL operations to reflect the change from `getSubscriptionSettings` to `GetSubscriptionSettings`, ensuring consistency in naming conventions.
* fix build
* Refactor subscription settings naming
- Updated the naming of `getSubscriptionSettings` to `GetSubscriptionSettings` in the cache-proxy configuration for consistency with other settings.
- Updated the registration feature to use KEYBOARD_REMOVE before sending the support message, enhancing user interaction flow.
- Ensured consistent reply structure by replacing direct message returns with await calls for better asynchronous handling.
- Modified the registration feature to replace KEYBOARD_REMOVE with mainMenu in reply messages.
- Updated the welcome feature to use mainMenu instead of combining messages for a cleaner response structure.
- Replaced CustomersService with RegistrationService in the welcome feature to streamline customer data retrieval.
- Updated the command handler to ensure proper integration with the new service.
- Updated the `createOrUpdateSubscription` method in the SubscriptionsService to accept an optional `paymentId` parameter for better tracking of payment transactions.
- Modified the bot's subscription feature to pass the `provider_payment_charge_id` when creating or updating subscriptions, improving payment processing accuracy.
- Removed the unused PageHeader component from ProPage for a cleaner layout.
- Updated the isRootLevelPage function to enhance path exclusion logic, ensuring it correctly identifies root level pages.
- Eliminated the `usedTrialSubscription` variable from the subscription function.
- Updated the subscription period condition to directly reference `GQL.Enum_Subscriptionprice_Period.Trial` for clarity.
- Changed terminology from "клиент" to "пользователь" for consistency in user interactions.
- Updated messages to clarify user instructions for adding contacts and handling phone numbers.
- Added validation to prevent users from adding their own phone number as a contact.
- Improved conversation prompts for better user experience during contact addition.
- Added new buttons and messages in Russian localization for improved user interaction.
- Integrated '@grammyjs/menu' version 1.3.1 to enhance menu functionality.
- Refactored bot command handlers to streamline conversation flows and improve code organization.
- Updated the main menu structure to include new options for adding contacts and subscription information.
- Integrated subscription pricing information by fetching active subscription prices and displaying them on the ProPage.
- Adjusted layout margins for improved visual consistency in the header and benefits sections.
- Enhanced user experience by conditionally rendering the pricing section based on available subscription prices.
- Introduced a new URL construction for the bot link, incorporating a 'start' parameter set to 'pro' for improved trial subscription management.
- Updated the link in the ProPage to utilize the newly constructed bot URL, ensuring users are directed correctly for Pro access through the bot.