- Ensure Pulse store always prefers tracking_id from backend response when saving Telegram customer data.
- Route storeOrder calls through shared ftch helper instead of manual fetch.
- Remove legacy catalog controller extension/tgshop/handle and obsolete telecart_cache migration and setting mapping for Yandex Metrika.
- Update migrations framework to rely on Carbon, sort migration files deterministically and store executed_at as a Carbon timestamp without DEFAULT CURRENT_TIMESTAMP.
- Introduce DateUtils helper to convert timestamps between UTC and system time zone and use it in ETLHandler responses.
- Make TeleCartPulse PayloadSigner and TeleCartPulseService accept nullable secrets/API keys but fail fast when secret is missing.
- Normalize ETL customer payload shape and convert all date fields to UTC JSON timestamps.
- Default created order customer_id to 0 when no OpenCart customer id is available.
Основные изменения:
Backend:
- Добавлена миграция для поля privacy_consented_at в таблицу telecart_customers
- Создан PrivacyPolicyHandler с методами:
* checkIsUserPrivacyConsented - проверка наличия согласия пользователя
* userPrivacyConsent - сохранение согласия пользователя
- Обновлен TelegramService для извлечения userId из initData
- Обновлен TelegramServiceProvider для внедрения зависимостей
- Добавлены новые маршруты в routes.php
- Обновлен SettingsHandler для возврата privacy_policy_link
- Обновлен TelegramCustomersHandler для включения privacy_consented_at в ответы
- Обновлены тесты TelegramServiceTest
Frontend (SPA):
- Создан компонент PrivacyPolicy.vue для отображения запроса согласия
- Добавлена проверка согласия при инициализации приложения (main.js)
- Обновлен App.vue для отображения компонента PrivacyPolicy
- Добавлены функции checkIsUserPrivacyConsented и userPrivacyConsent в ftch.js
- Обновлен SettingsStore для хранения privacy_policy_link и is_privacy_consented
Frontend (Admin):
- Добавлено поле privacy_policy_link в настройки (settings.js)
- Добавлена настройка ссылки на политику конфиденциальности в GeneralView.vue
- Обновлен CustomersView.vue:
* Добавлена колонка privacy_consented_at с отображением даты согласия
* Добавлена поддержка help-текста для колонок с иконкой вопроса и tooltip
* Добавлены help-тексты для колонок last_seen_at, privacy_consented_at, created_at
* Улучшено форматирование кода
Implement comprehensive Telegram customers storage and management functionality:
Backend:
- Add database migration for telecart_customers table with indexes
- Create TelegramCustomer model with CRUD operations
- Implement TelegramCustomerService for business logic
- Add TelegramCustomerHandler for API endpoint (saveOrUpdate)
- Add TelegramCustomersHandler for admin API (getCustomers with pagination, filtering, sorting)
- Add SendMessageHandler for sending messages to customers via Telegram
- Create custom exceptions: TelegramCustomerNotFoundException, TelegramCustomerWriteNotAllowedException
- Refactor TelegramInitDataDecoder to separate decoding logic
- Add TelegramHeader enum for header constants
- Update SignatureValidator to use TelegramInitDataDecoder
- Register new routes in bastion/routes.php and src/routes.php
Frontend (Admin):
- Add CustomersView.vue component with PrimeVue DataTable
- Implement advanced filtering (text, date, boolean filters)
- Add column visibility toggle functionality
- Add global search with debounce
- Implement message sending dialog with validation
- Add Russian locale for PrimeVue components
- Add navigation link in App.vue
- Register route in router
Frontend (SPA):
- Add saveTelegramCustomer utility function
- Integrate automatic customer data saving on app initialization
- Extract user data from Telegram.WebApp.initDataUnsafe
The system automatically saves/updates customer data when users access the Telegram Mini App,
and provides admin interface for viewing, filtering, and messaging customers.
BREAKING CHANGE: None