WIP
Some checks failed
Telegram Mini App Shop Builder / Compute version metadata (push) Has been cancelled
Telegram Mini App Shop Builder / Run Frontend tests (push) Has been cancelled
Telegram Mini App Shop Builder / Run Backend tests (push) Has been cancelled
Telegram Mini App Shop Builder / Run PHP_CodeSniffer (push) Has been cancelled
Telegram Mini App Shop Builder / Build module. (push) Has been cancelled
Telegram Mini App Shop Builder / release (push) Has been cancelled

This commit is contained in:
2026-03-11 21:52:01 +03:00
parent 47bffc90b2
commit 87eb66f06b
106 changed files with 572 additions and 581 deletions

View File

@@ -61,4 +61,4 @@
- Для frontend/admin используй компоненты VuePrime 4. - Для frontend/admin используй компоненты VuePrime 4.
- Для frontend/spa используй Daisy UI. - Для frontend/spa используй Daisy UI.
- Чтобы получить название стандартной таблицы OpenCart, используй хелпер `db_table`, либо добавляй константу DB_PREFIX перед названием таблицы. Так ты получишь название таблицы с префиксом. - Чтобы получить название стандартной таблицы OpenCart, используй хелпер `db_table`, либо добавляй константу DB_PREFIX перед названием таблицы. Так ты получишь название таблицы с префиксом.
- Все таблицы моего модуля TeleCart начинаются с префикса `telecart_`. Примеры миграций лежат в `module/oc_telegram_shop/upload/oc_telegram_shop/database/migrations` - Все таблицы моего модуля MegaPay начинаются с префикса `megapay_`. Примеры миграций лежат в `module/oc_telegram_shop/upload/oc_telegram_shop/database/migrations`

View File

@@ -6,11 +6,11 @@
"useDependencyInjection": true "useDependencyInjection": true
}, },
"paths": { "paths": {
"telecart_module": "module/oc_telegram_shop/upload/oc_telegram_shop", "megapay_module": "module/oc_telegram_shop/upload/oc_telegram_shop",
"frontendAdmin": "frontend/admin", "frontendAdmin": "frontend/admin",
"telegramShopSpa": "frontend/spa", "telegramShopSpa": "frontend/spa",
"migrations": "module/oc_telegram_shop/upload/oc_telegram_shop/database/migrations", "migrations": "module/oc_telegram_shop/upload/oc_telegram_shop/database/migrations",
"telecartHandlers": "module/oc_telegram_shop/upload/oc_telegram_shop/src/Handlers", "megapayHandlers": "module/oc_telegram_shop/upload/oc_telegram_shop/src/Handlers",
"adminHandlers": "module/oc_telegram_shop/upload/oc_telegram_shop/bastion/Handlers", "adminHandlers": "module/oc_telegram_shop/upload/oc_telegram_shop/bastion/Handlers",
"models": "module/oc_telegram_shop/upload/oc_telegram_shop/src/Models", "models": "module/oc_telegram_shop/upload/oc_telegram_shop/src/Models",
"framework": "module/oc_telegram_shop/upload/oc_telegram_shop/framework" "framework": "module/oc_telegram_shop/upload/oc_telegram_shop/framework"
@@ -21,7 +21,7 @@
"variables": "camelCase", "variables": "camelCase",
"constants": "UPPER_SNAKE_CASE", "constants": "UPPER_SNAKE_CASE",
"files": "PascalCase for classes, kebab-case for others", "files": "PascalCase for classes, kebab-case for others",
"tables": "snake_case with telecart_ prefix" "tables": "snake_case with megapay_ prefix"
}, },
"php": { "php": {
"version": "7.4+", "version": "7.4+",
@@ -37,7 +37,7 @@
"database": { "database": {
"queryBuilder": true, "queryBuilder": true,
"migrations": true, "migrations": true,
"tablePrefix": "telecart_", "tablePrefix": "megapay_",
"noForeignKeys": true "noForeignKeys": true
} }
} }

View File

@@ -1,15 +1,15 @@
## TeleCart Pulse Heartbeat Telemetry ## MegaPay Pulse Heartbeat Telemetry
### Цель ### Цель
Раз в час отправлять телеметрию (heartbeat) на TeleCart Pulse, чтобы фиксировать состояние магазина и версии окружения без участия пользователя. Раз в час отправлять телеметрию (heartbeat) на MegaPay Pulse, чтобы фиксировать состояние магазина и версии окружения без участия пользователя.
### Backend (`module/oc_telegram_shop/upload/oc_telegram_shop`) ### Backend (`module/oc_telegram_shop/upload/oc_telegram_shop`)
- `framework/TeleCartPulse/TeleCartPulseService.php` - `framework/MegaPayPulse/MegaPayPulseService.php`
- Новый метод `handleHeartbeat()` собирает данные: домен (через `Utils::getCurrentDomain()`), username бота (через `TelegramService::getMe()`), версии PHP, модуля (из `composer.json`), OpenCart (`VERSION` и `VERSION_CORE`), текущий UTC timestamp. - Новый метод `handleHeartbeat()` собирает данные: домен (через `Utils::getCurrentDomain()`), username бота (через `TelegramService::getMe()`), версии PHP, модуля (из `composer.json`), OpenCart (`VERSION` и `VERSION_CORE`), текущий UTC timestamp.
- Последний успешный пинг кешируется (ключ `telecart_pulse_heartbeat`, TTL 1 час) через существующий `CacheInterface`. - Последний успешный пинг кешируется (ключ `megapay_pulse_heartbeat`, TTL 1 час) через существующий `CacheInterface`.
- Подпись heartbeat выполняется через отдельный `PayloadSigner`, который использует секрет `pulse.heartbeat_secret`/`PULSE_HEARTBEAT_SECRET`. Логируются предупреждения при ошибках кеша/бота/подписи. - Подпись heartbeat выполняется через отдельный `PayloadSigner`, который использует секрет `pulse.heartbeat_secret`/`PULSE_HEARTBEAT_SECRET`. Логируются предупреждения при ошибках кеша/бота/подписи.
- Отправка идет на эндпоинт `heartbeat` с таймаутом 2 секунды и заголовком `X-TELECART-VERSION`, взятым из `composer.json`. - Отправка идет на эндпоинт `heartbeat` с таймаутом 2 секунды и заголовком `X-MEGAPAY-VERSION`, взятым из `composer.json`.
- `framework/TeleCartPulse/TeleCartPulseServiceProvider.php` - `framework/MegaPayPulse/MegaPayPulseServiceProvider.php`
- Регистрирует основной `PayloadSigner` (по `pulse.api_key`) и отдельный heartbeat signer (по `pulse.heartbeat_secret` или `PULSE_HEARTBEAT_SECRET`), инжектит `LoggerInterface`. - Регистрирует основной `PayloadSigner` (по `pulse.api_key`) и отдельный heartbeat signer (по `pulse.heartbeat_secret` или `PULSE_HEARTBEAT_SECRET`), инжектит `LoggerInterface`.
- `src/Handlers/TelemetryHandler.php` + `src/routes.php` - `src/Handlers/TelemetryHandler.php` + `src/routes.php`
- Добавлен маршрут `heartbeat`, который вызывает `handleHeartbeat()` и возвращает `{ status: "ok" }`. Логгер пишет warning при проблемах. - Добавлен маршрут `heartbeat`, который вызывает `handleHeartbeat()` и возвращает `{ status: "ok" }`. Логгер пишет warning при проблемах.
@@ -20,7 +20,7 @@
- `src/main.js`: после `pulse.ingest(...)` вызывается `pulse.heartbeat()` без блокировки цепочки. - `src/main.js`: после `pulse.ingest(...)` вызывается `pulse.heartbeat()` без блокировки цепочки.
### Конфигурация / ENV ### Конфигурация / ENV
- `PULSE_API_HOST` — базовый URL TeleCart Pulse (используется и для events, и для heartbeat). - `PULSE_API_HOST` — базовый URL MegaPay Pulse (используется и для events, и для heartbeat).
- `PULSE_TIMEOUT` — общий таймаут HTTP (для heartbeat принудительно 2 секунды). - `PULSE_TIMEOUT` — общий таймаут HTTP (для heartbeat принудительно 2 секунды).
- `PULSE_HEARTBEAT_SECRET` (или `pulse.heartbeat_secret` в настройках) — общий секрет для подписания heartbeat. Обязателен, иначе heartbeat не будет отправляться. - `PULSE_HEARTBEAT_SECRET` (или `pulse.heartbeat_secret` в настройках) — общий секрет для подписания heartbeat. Обязателен, иначе heartbeat не будет отправляться.
- `pulse.api_key` — прежний API ключ, используется только для event-инджеста. - `pulse.api_key` — прежний API ключ, используется только для event-инджеста.

View File

@@ -28,7 +28,7 @@
5. Миграция (если нужна новая таблица): 5. Миграция (если нужна новая таблица):
- Создай миграцию в database/migrations/ - Создай миграцию в database/migrations/
- Используй фиксированный префикс telecart_ - Используй фиксированный префикс megapay_
- Добавь индексы где необходимо - Добавь индексы где необходимо
Следуй архитектуре MVC-L проекта и используй существующие паттерны. Следуй архитектуре MVC-L проекта и используй существующие паттерны.
@@ -115,7 +115,7 @@
Создай миграцию для таблицы [TABLE_NAME]: Создай миграцию для таблицы [TABLE_NAME]:
1. Файл: database/migrations/[TIMESTAMP]_[DESCRIPTION].php 1. Файл: database/migrations/[TIMESTAMP]_[DESCRIPTION].php
2. Используй фиксированный префикс telecart_ для таблицы 2. Используй фиксированный префикс megapay_ для таблицы
3. Добавь все необходимые поля с правильными типами 3. Добавь все необходимые поля с правильными типами
4. Добавь индексы для часто используемых полей 4. Добавь индексы для часто используемых полей
5. Используй utf8mb4_unicode_ci collation 5. Используй utf8mb4_unicode_ci collation

View File

@@ -165,7 +165,7 @@ $result = $this->database->query("SELECT * FROM table_name WHERE status = 'activ
- **Variables**: camelCase (`$customerData`) - **Variables**: camelCase (`$customerData`)
- **Constants**: UPPER_SNAKE_CASE (`MAX_RETRIES`) - **Constants**: UPPER_SNAKE_CASE (`MAX_RETRIES`)
- **Files**: PascalCase для классов, kebab-case для остального - **Files**: PascalCase для классов, kebab-case для остального
- **Tables**: snake_case с префиксом `telecart_` - **Tables**: snake_case с префиксом `megapay_`
### Error Handling ### Error Handling

View File

@@ -188,13 +188,13 @@ try {
// ✅ Правильно // ✅ Правильно
$customers = $this->builder->newQuery() $customers = $this->builder->newQuery()
->select(['id', 'name', 'email']) ->select(['id', 'name', 'email'])
->from('telecart_customers') ->from('megapay_customers')
->where('status', '=', 'active') ->where('status', '=', 'active')
->orderBy('created_at', 'DESC') ->orderBy('created_at', 'DESC')
->get(); ->get();
// В крайних случаях можно использовать прямые SQL // В крайних случаях можно использовать прямые SQL
$result = $this->database->query("SELECT * FROM telecart_customers"); $result = $this->database->query("SELECT * FROM megapay_customers");
``` ```
### Parameter Binding ### Parameter Binding

View File

@@ -4,539 +4,539 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
<!--- END HEADER --> <!--- END HEADER -->
## [2.2.1](https://github.com/telecart-labs/telecart/compare/v2.2.0...v2.2.1) (2026-02-22) ## [2.2.1](https://github.com/megapay-labs/megapay/compare/v2.2.0...v2.2.1) (2026-02-22)
--- ---
## [2.2.0](https://github.com/telecart-labs/telecart/compare/v2.1.0...v2.2.0) (2026-01-09) ## [2.2.0](https://github.com/megapay-labs/megapay/compare/v2.1.0...v2.2.0) (2026-01-09)
### Features ### Features
* Add BETA label and UI improvements for TeleCart Pulse tab ([551c4a](https://github.com/telecart-labs/telecart/commit/551c4a3506ddedb1b11851e3d3cbcb4f3ed34e03)) * Add BETA label and UI improvements for MegaPay Pulse tab ([551c4a](https://github.com/megapay-labs/megapay/commit/551c4a3506ddedb1b11851e3d3cbcb4f3ed34e03))
* Add cache:clear CLI command for module cache clearing (#46) ([3d0a75](https://github.com/telecart-labs/telecart/commit/3d0a7536a64bc88dbb349a9640260757b46009c4)) * Add cache:clear CLI command for module cache clearing (#46) ([3d0a75](https://github.com/megapay-labs/megapay/commit/3d0a7536a64bc88dbb349a9640260757b46009c4))
* Add changelog ([bf99bf](https://github.com/telecart-labs/telecart/commit/bf99bfe8a442c8eaad64f348792b7ddcbfb4486c)) * Add changelog ([bf99bf](https://github.com/megapay-labs/megapay/commit/bf99bfe8a442c8eaad64f348792b7ddcbfb4486c))
* Add config redis cache, categories cache (#44) ([0798f5](https://github.com/telecart-labs/telecart/commit/0798f5c3e98721efbb45e2988350364b606622cd)) * Add config redis cache, categories cache (#44) ([0798f5](https://github.com/megapay-labs/megapay/commit/0798f5c3e98721efbb45e2988350364b606622cd))
* Add customer account page with profile information and actions ([ad94af](https://github.com/telecart-labs/telecart/commit/ad94afda6826dd1d120599353121bad000b675a7)) * Add customer account page with profile information and actions ([ad94af](https://github.com/megapay-labs/megapay/commit/ad94afda6826dd1d120599353121bad000b675a7))
* Add customizable text for manager contact button ([0a7877](https://github.com/telecart-labs/telecart/commit/0a7877ddbe7908d6a17089e1005308a945d3d21f)) * Add customizable text for manager contact button ([0a7877](https://github.com/megapay-labs/megapay/commit/0a7877ddbe7908d6a17089e1005308a945d3d21f))
* Add haptic feedback toggle setting ([afade8](https://github.com/telecart-labs/telecart/commit/afade85d004872d10929119db3ac95ee3acd0251)) * Add haptic feedback toggle setting ([afade8](https://github.com/megapay-labs/megapay/commit/afade85d004872d10929119db3ac95ee3acd0251))
* Add product interaction mode selector with three scenarios ([ecf4df](https://github.com/telecart-labs/telecart/commit/ecf4df363d49bf0d8bdc1b9ca3a241f99f26cfb8)) * Add product interaction mode selector with three scenarios ([ecf4df](https://github.com/megapay-labs/megapay/commit/ecf4df363d49bf0d8bdc1b9ca3a241f99f26cfb8))
* Add store_id conditions (#43) ([846418](https://github.com/telecart-labs/telecart/commit/84641868e98786264f517865d48619ac4bc1ef7a)) * Add store_id conditions (#43) ([846418](https://github.com/megapay-labs/megapay/commit/84641868e98786264f517865d48619ac4bc1ef7a))
* Add system information drawer (#44) ([9da605](https://github.com/telecart-labs/telecart/commit/9da605b9eac82045b46c3edbb998d28a63c22188)) * Add system information drawer (#44) ([9da605](https://github.com/megapay-labs/megapay/commit/9da605b9eac82045b46c3edbb998d28a63c22188))
* Increase dock icons size and add click animation ([ce2ea9](https://github.com/telecart-labs/telecart/commit/ce2ea9dea1fcd24d70ea66345d761a739d25f9d1)) * Increase dock icons size and add click animation ([ce2ea9](https://github.com/megapay-labs/megapay/commit/ce2ea9dea1fcd24d70ea66345d761a739d25f9d1))
##### Admin ##### Admin
* Improve navigation UI and move logs to drawer ([6a635e](https://github.com/telecart-labs/telecart/commit/6a635e189614c50c8d4bdbeb2486eb5b32ba7da0)) * Improve navigation UI and move logs to drawer ([6a635e](https://github.com/megapay-labs/megapay/commit/6a635e189614c50c8d4bdbeb2486eb5b32ba7da0))
##### Search ##### Search
* Improvement search cache (#44) ([8a9bac](https://github.com/telecart-labs/telecart/commit/8a9bac8221146b5db4960cc10de3e29dcd75c9bf)) * Improvement search cache (#44) ([8a9bac](https://github.com/megapay-labs/megapay/commit/8a9bac8221146b5db4960cc10de3e29dcd75c9bf))
##### Spa ##### Spa
* Add UTM markers for product view on OpenCart (#47) ([647e20](https://github.com/telecart-labs/telecart/commit/647e20c6b093f3de5e6aafcad474cf1a99189d2e)) * Add UTM markers for product view on OpenCart (#47) ([647e20](https://github.com/megapay-labs/megapay/commit/647e20c6b093f3de5e6aafcad474cf1a99189d2e))
### Bug Fixes ### Bug Fixes
* Correct external .env loading ([089b68](https://github.com/telecart-labs/telecart/commit/089b68672262286f4568a6a40627a0c2e0c51b14)) * Correct external .env loading ([089b68](https://github.com/megapay-labs/megapay/commit/089b68672262286f4568a6a40627a0c2e0c51b14))
* Correctly work with telecart customers without usernames ([0312b8](https://github.com/telecart-labs/telecart/commit/0312b882e1ad5596e823943924d1b284d5592b14)) * Correctly work with megapay customers without usernames ([0312b8](https://github.com/megapay-labs/megapay/commit/0312b882e1ad5596e823943924d1b284d5592b14))
* Missing store_id for carousel products ([3a1f8d](https://github.com/telecart-labs/telecart/commit/3a1f8dbf948c65c6f2d94392c277317f1ce5da75)) * Missing store_id for carousel products ([3a1f8d](https://github.com/megapay-labs/megapay/commit/3a1f8dbf948c65c6f2d94392c277317f1ce5da75))
##### Admin ##### Admin
* Correct logs sorting by datetime with milliseconds ([115c13](https://github.com/telecart-labs/telecart/commit/115c13393f045a8f2eb7992be11ce20e94b23b96)) * Correct logs sorting by datetime with milliseconds ([115c13](https://github.com/megapay-labs/megapay/commit/115c13393f045a8f2eb7992be11ce20e94b23b96))
##### Spa ##### Spa
* Correct line breaks for long attribute names and values in Product.vue ([ff7263](https://github.com/telecart-labs/telecart/commit/ff7263649c208449f0b0b65df3e6088115ec78f6)) * Correct line breaks for long attribute names and values in Product.vue ([ff7263](https://github.com/megapay-labs/megapay/commit/ff7263649c208449f0b0b65df3e6088115ec78f6))
* Correct privacy policy message margin ([79f234](https://github.com/telecart-labs/telecart/commit/79f23400d20ba3cb43160cf898ea589f30c7aa83)) * Correct privacy policy message margin ([79f234](https://github.com/megapay-labs/megapay/commit/79f23400d20ba3cb43160cf898ea589f30c7aa83))
--- ---
## [2.1.0](https://github.com/telecart-labs/telecart/compare/v2.0.0...v2.1.0) (2025-12-24) ## [2.1.0](https://github.com/megapay-labs/megapay/compare/v2.0.0...v2.1.0) (2025-12-24)
### Features ### Features
* Add setting to control category products button visibility ([c3994b](https://github.com/telecart-labs/telecart/commit/c3994b2291790f21cd219d1c5e820c274cb6e085)) * Add setting to control category products button visibility ([c3994b](https://github.com/megapay-labs/megapay/commit/c3994b2291790f21cd219d1c5e820c274cb6e085))
--- ---
## [2.0.0](https://github.com/telecart-labs/telecart/compare/v1.3.2...v2.0.0) (2025-12-23) ## [2.0.0](https://github.com/megapay-labs/megapay/compare/v1.3.2...v2.0.0) (2025-12-23)
### ⚠ BREAKING CHANGES ### ⚠ BREAKING CHANGES
* None ([9a93cc](https://github.com/telecart-labs/telecart/commit/9a93cc73421c9c85e3cfbe403cd2c8fb41ba3406)) * None ([9a93cc](https://github.com/megapay-labs/megapay/commit/9a93cc73421c9c85e3cfbe403cd2c8fb41ba3406))
### Features ### Features
* Add aspect ratio selector for products_carousel ([615e8c](https://github.com/telecart-labs/telecart/commit/615e8c54a60d076a65bc04e60d26c5cbb21c264f)) * Add aspect ratio selector for products_carousel ([615e8c](https://github.com/megapay-labs/megapay/commit/615e8c54a60d076a65bc04e60d26c5cbb21c264f))
* Add cron service to run telecart schedule tasks ([16a258](https://github.com/telecart-labs/telecart/commit/16a258ab682947f9856459797bc99b0adbf0d335)) * Add cron service to run megapay schedule tasks ([16a258](https://github.com/megapay-labs/megapay/commit/16a258ab682947f9856459797bc99b0adbf0d335))
* Add debug mode for developers. Logs improvements ([fbccd5](https://github.com/telecart-labs/telecart/commit/fbccd506752e8cdada461e92a85b7603335a8f23)) * Add debug mode for developers. Logs improvements ([fbccd5](https://github.com/megapay-labs/megapay/commit/fbccd506752e8cdada461e92a85b7603335a8f23))
* Add default configs ([2bc751](https://github.com/telecart-labs/telecart/commit/2bc751119cb5c55c7d29a90d28a24f015ba76692)) * Add default configs ([2bc751](https://github.com/megapay-labs/megapay/commit/2bc751119cb5c55c7d29a90d28a24f015ba76692))
* Added new products_carousel bock type ([f0837e](https://github.com/telecart-labs/telecart/commit/f0837e5c94ef3327f0d249e1994dc73a6da1c42b)) * Added new products_carousel bock type ([f0837e](https://github.com/megapay-labs/megapay/commit/f0837e5c94ef3327f0d249e1994dc73a6da1c42b))
* Add FormKit framework support and update dependencies ([6a59dc](https://github.com/telecart-labs/telecart/commit/6a59dcc0c9b4f8e6ee003c7e168b632d8199981e)) * Add FormKit framework support and update dependencies ([6a59dc](https://github.com/megapay-labs/megapay/commit/6a59dcc0c9b4f8e6ee003c7e168b632d8199981e))
* Add hide keyboard button on search page ([17ff88](https://github.com/telecart-labs/telecart/commit/17ff888c053983a7ae334ba695338ccd8b2db3ab)) * Add hide keyboard button on search page ([17ff88](https://github.com/megapay-labs/megapay/commit/17ff888c053983a7ae334ba695338ccd8b2db3ab))
* Add html editor for telegram messages ([97df5b](https://github.com/telecart-labs/telecart/commit/97df5b4c0aa1d5fbf19c2132436045af0846b5f1)) * Add html editor for telegram messages ([97df5b](https://github.com/megapay-labs/megapay/commit/97df5b4c0aa1d5fbf19c2132436045af0846b5f1))
* Add italy dump ([13f63e](https://github.com/telecart-labs/telecart/commit/13f63e09fcc3c33cb4de2e809a981a0bf532bb63)) * Add italy dump ([13f63e](https://github.com/megapay-labs/megapay/commit/13f63e09fcc3c33cb4de2e809a981a0bf532bb63))
* Add migrations, mantenance tasks, database cache, blocks cache ([c0a6cb](https://github.com/telecart-labs/telecart/commit/c0a6cb17b3fa5a75185ad2e42e8979b1c848c285)) * Add migrations, mantenance tasks, database cache, blocks cache ([c0a6cb](https://github.com/megapay-labs/megapay/commit/c0a6cb17b3fa5a75185ad2e42e8979b1c848c285))
* Add old browser checks ([76c32c](https://github.com/telecart-labs/telecart/commit/76c32c53200f33a5de8fee3587b6aa597ce6d04a)) * Add old browser checks ([76c32c](https://github.com/megapay-labs/megapay/commit/76c32c53200f33a5de8fee3587b6aa597ce6d04a))
* Add options to select aspect ratio and cron algo for product images ([e9c6ed](https://github.com/telecart-labs/telecart/commit/e9c6ed8ddf801d3cfbb91c08733ab118fec3de21)) * Add options to select aspect ratio and cron algo for product images ([e9c6ed](https://github.com/megapay-labs/megapay/commit/e9c6ed8ddf801d3cfbb91c08733ab118fec3de21))
* Add reactivity to formkit ([fdcfce](https://github.com/telecart-labs/telecart/commit/fdcfce0a79af94f5f7ff05e19b4edec0fad4d452)) * Add reactivity to formkit ([fdcfce](https://github.com/megapay-labs/megapay/commit/fdcfce0a79af94f5f7ff05e19b4edec0fad4d452))
* Add redis cache driver ([2b0f04](https://github.com/telecart-labs/telecart/commit/2b0f04eb9455e2f1abb5b9374f3348072ffd1d6a)) * Add redis cache driver ([2b0f04](https://github.com/megapay-labs/megapay/commit/2b0f04eb9455e2f1abb5b9374f3348072ffd1d6a))
* Add scheduler module ([65973d](https://github.com/telecart-labs/telecart/commit/65973d2d79a8c6bfbfc367b56a2b83e465fa2e32)) * Add scheduler module ([65973d](https://github.com/megapay-labs/megapay/commit/65973d2d79a8c6bfbfc367b56a2b83e465fa2e32))
* Add TeleCart Pulse heartbeat telemetry ([b60c77](https://github.com/telecart-labs/telecart/commit/b60c77e4539aab9d2cdb1e9916b7e60c9848d686)) * Add MegaPay Pulse heartbeat telemetry ([b60c77](https://github.com/megapay-labs/megapay/commit/b60c77e4539aab9d2cdb1e9916b7e60c9848d686))
* Add TeleCartPulse telemetry system and ETL endpoints ([e8d0f8](https://github.com/telecart-labs/telecart/commit/e8d0f8a8190c2877ac5aa1e0cc7a5a1663598fe5)) * Add MegaPayPulse telemetry system and ETL endpoints ([e8d0f8](https://github.com/megapay-labs/megapay/commit/e8d0f8a8190c2877ac5aa1e0cc7a5a1663598fe5))
* Add Telegram customers management system with admin panel ([9a93cc](https://github.com/telecart-labs/telecart/commit/9a93cc73421c9c85e3cfbe403cd2c8fb41ba3406)) * Add Telegram customers management system with admin panel ([9a93cc](https://github.com/megapay-labs/megapay/commit/9a93cc73421c9c85e3cfbe403cd2c8fb41ba3406))
* Add texts configuration ([34dfe9](https://github.com/telecart-labs/telecart/commit/34dfe9028693ad488d40f2015af482d789f012c6)) * Add texts configuration ([34dfe9](https://github.com/megapay-labs/megapay/commit/34dfe9028693ad488d40f2015af482d789f012c6))
* Add UI for CRON Scheduler ([7372b9](https://github.com/telecart-labs/telecart/commit/7372b9c330ba4ba83458ca8d722cc71f57316180)) * Add UI for CRON Scheduler ([7372b9](https://github.com/megapay-labs/megapay/commit/7372b9c330ba4ba83458ca8d722cc71f57316180))
* Add warmup images command ([ecd372](https://github.com/telecart-labs/telecart/commit/ecd372dad30e05c5913fa489e561475584b89079)) * Add warmup images command ([ecd372](https://github.com/megapay-labs/megapay/commit/ecd372dad30e05c5913fa489e561475584b89079))
* Better algorythm for image resize ([13e5bc](https://github.com/telecart-labs/telecart/commit/13e5bce8a548439da3dcd892b0c5600ffc995be6)) * Better algorythm for image resize ([13e5bc](https://github.com/megapay-labs/megapay/commit/13e5bce8a548439da3dcd892b0c5600ffc995be6))
* Button to show all products from category ([b2d29f](https://github.com/telecart-labs/telecart/commit/b2d29fd3e288991f77ba6c0bee4bc7c5092b6594)) * Button to show all products from category ([b2d29f](https://github.com/megapay-labs/megapay/commit/b2d29fd3e288991f77ba6c0bee4bc7c5092b6594))
* Change image crop algorythm for product view page ([262f52](https://github.com/telecart-labs/telecart/commit/262f52929063802404af6f0592741ca836c91bcd)) * Change image crop algorythm for product view page ([262f52](https://github.com/megapay-labs/megapay/commit/262f52929063802404af6f0592741ca836c91bcd))
* Clear cache after settings update ([6f9855](https://github.com/telecart-labs/telecart/commit/6f9855995dd3603b622a9e601162ac0b6da9a694)) * Clear cache after settings update ([6f9855](https://github.com/megapay-labs/megapay/commit/6f9855995dd3603b622a9e601162ac0b6da9a694))
* Correct stats for telecart dashboard ([05af49](https://github.com/telecart-labs/telecart/commit/05af4949bfcf2a42ece30f1d77816a3c3018eae2)) * Correct stats for megapay dashboard ([05af49](https://github.com/megapay-labs/megapay/commit/05af4949bfcf2a42ece30f1d77816a3c3018eae2))
* Design update, show avatar in navbar ([6ac6a4](https://github.com/telecart-labs/telecart/commit/6ac6a42e2105bb6f234c108e3a5d21096b87660f)) * Design update, show avatar in navbar ([6ac6a4](https://github.com/megapay-labs/megapay/commit/6ac6a42e2105bb6f234c108e3a5d21096b87660f))
* Disable source maps for frontend production builds ([770ec8](https://github.com/telecart-labs/telecart/commit/770ec81fdcd1456ad7787c9d1e31d92383849f8f)) * Disable source maps for frontend production builds ([770ec8](https://github.com/megapay-labs/megapay/commit/770ec81fdcd1456ad7787c9d1e31d92383849f8f))
* Dont migrate tg messages from v1 ([b87797](https://github.com/telecart-labs/telecart/commit/b87797ee6728523d8e17eeab13b85b014c157d95)) * Dont migrate tg messages from v1 ([b87797](https://github.com/megapay-labs/megapay/commit/b87797ee6728523d8e17eeab13b85b014c157d95))
* Expose module version ([f1a39e](https://github.com/telecart-labs/telecart/commit/f1a39eeb0023d9fdf99cfd95b21288d950730b23)) * Expose module version ([f1a39e](https://github.com/megapay-labs/megapay/commit/f1a39eeb0023d9fdf99cfd95b21288d950730b23))
* Fixed width and preloader for product view page ([5d775e](https://github.com/telecart-labs/telecart/commit/5d775e8eb6710cc1ca3501be1fdfc957582e8663)) * Fixed width and preloader for product view page ([5d775e](https://github.com/megapay-labs/megapay/commit/5d775e8eb6710cc1ca3501be1fdfc957582e8663))
* Fix opecart module status, remove .vite ([e72948](https://github.com/telecart-labs/telecart/commit/e729484fd7a698fcadacdfc99a30beb9d4acbb09)) * Fix opecart module status, remove .vite ([e72948](https://github.com/megapay-labs/megapay/commit/e729484fd7a698fcadacdfc99a30beb9d4acbb09))
* Hide greeting image from frontend ([2ec683](https://github.com/telecart-labs/telecart/commit/2ec683f0163804e7562de14d098b8a0c0f0f28da)) * Hide greeting image from frontend ([2ec683](https://github.com/megapay-labs/megapay/commit/2ec683f0163804e7562de14d098b8a0c0f0f28da))
* Image processing improve ([38668f](https://github.com/telecart-labs/telecart/commit/38668fb4a7f2a3f94a85e06e20ecdff98f5d160d)) * Image processing improve ([38668f](https://github.com/megapay-labs/megapay/commit/38668fb4a7f2a3f94a85e06e20ecdff98f5d160d))
* Images and products loading optimization ([bf6744](https://github.com/telecart-labs/telecart/commit/bf674473e97111aa7a2acad9c835fcea37c3b2ec)) * Images and products loading optimization ([bf6744](https://github.com/megapay-labs/megapay/commit/bf674473e97111aa7a2acad9c835fcea37c3b2ec))
* Improve mainpage ui/ux ([f5d9d4](https://github.com/telecart-labs/telecart/commit/f5d9d417b3b86c7b710da5751a1d50af10a42b6e)) * Improve mainpage ui/ux ([f5d9d4](https://github.com/megapay-labs/megapay/commit/f5d9d417b3b86c7b710da5751a1d50af10a42b6e))
* Increase default per_page products ([6ed2fd](https://github.com/telecart-labs/telecart/commit/6ed2fd2062295bc4296d9ef5c4852541e0e4138f)) * Increase default per_page products ([6ed2fd](https://github.com/megapay-labs/megapay/commit/6ed2fd2062295bc4296d9ef5c4852541e0e4138f))
* Integrate yandex metrika ecommerce ([2f74ab](https://github.com/telecart-labs/telecart/commit/2f74aba35f548d632beed65d81693483942289d5)) * Integrate yandex metrika ecommerce ([2f74ab](https://github.com/megapay-labs/megapay/commit/2f74aba35f548d632beed65d81693483942289d5))
* Maintenance tasks, logs ([ae9771](https://github.com/telecart-labs/telecart/commit/ae9771dec436bd3ff619b26c9c6ce811b1e876dd)) * Maintenance tasks, logs ([ae9771](https://github.com/megapay-labs/megapay/commit/ae9771dec436bd3ff619b26c9c6ce811b1e876dd))
* More fluent vuejs app error handler ([955747](https://github.com/telecart-labs/telecart/commit/955747334d7a7f4863e145f52bcc2864beb8818e)) * More fluent vuejs app error handler ([955747](https://github.com/megapay-labs/megapay/commit/955747334d7a7f4863e145f52bcc2864beb8818e))
* Move getImage response to admin ([f539bb](https://github.com/telecart-labs/telecart/commit/f539bbfbbf023995f88b684406ac5eb8f16fff66)) * Move getImage response to admin ([f539bb](https://github.com/megapay-labs/megapay/commit/f539bbfbbf023995f88b684406ac5eb8f16fff66))
* New settings and mainpage blocks ([6176c7](https://github.com/telecart-labs/telecart/commit/6176c720b1f4c0ce9f06a3cc4ff50b72a52ab0fb)) * New settings and mainpage blocks ([6176c7](https://github.com/megapay-labs/megapay/commit/6176c720b1f4c0ce9f06a3cc4ff50b72a52ab0fb))
* Provide current opencart timezone to App ([51f462](https://github.com/telecart-labs/telecart/commit/51f462922ec49c8cc5e1b0c7909a69180cbe8e72)) * Provide current opencart timezone to App ([51f462](https://github.com/megapay-labs/megapay/commit/51f462922ec49c8cc5e1b0c7909a69180cbe8e72))
* Remove unused js libs ([08f0e2](https://github.com/telecart-labs/telecart/commit/08f0e24859c4e201e85075f2186ed741e3180b38)) * Remove unused js libs ([08f0e2](https://github.com/megapay-labs/megapay/commit/08f0e24859c4e201e85075f2186ed741e3180b38))
* Send xdebug trigger from frontend ([2743b8](https://github.com/telecart-labs/telecart/commit/2743b83a2c624191d2b65a1b13f5b3645e69b71a)) * Send xdebug trigger from frontend ([2743b8](https://github.com/megapay-labs/megapay/commit/2743b83a2c624191d2b65a1b13f5b3645e69b71a))
* Separated coupon and voucher errors ([dd12cb](https://github.com/telecart-labs/telecart/commit/dd12cb8c3434cd3d6f3b8eed4e469db8cd02e3f5)) * Separated coupon and voucher errors ([dd12cb](https://github.com/megapay-labs/megapay/commit/dd12cb8c3434cd3d6f3b8eed4e469db8cd02e3f5))
* Set environment variables ([3716e8](https://github.com/telecart-labs/telecart/commit/3716e89811f2a4135d644cb5a6bae0bb57c367ee)) * Set environment variables ([3716e8](https://github.com/megapay-labs/megapay/commit/3716e89811f2a4135d644cb5a6bae0bb57c367ee))
* Show module version in admin ([116821](https://github.com/telecart-labs/telecart/commit/116821a20946bf3f341e1589af2b24ace1e904da)) * Show module version in admin ([116821](https://github.com/megapay-labs/megapay/commit/116821a20946bf3f341e1589af2b24ace1e904da))
* Store customer_id in with order ([8260d2](https://github.com/telecart-labs/telecart/commit/8260d2bc96bfb256e73673e13740b242756eede2)) * Store customer_id in with order ([8260d2](https://github.com/megapay-labs/megapay/commit/8260d2bc96bfb256e73673e13740b242756eede2))
* Tg bot start message customization ([152e6d](https://github.com/telecart-labs/telecart/commit/152e6d715bfff1cfd05bdab72c4d4b54f7878e4a)) * Tg bot start message customization ([152e6d](https://github.com/megapay-labs/megapay/commit/152e6d715bfff1cfd05bdab72c4d4b54f7878e4a))
* Track and push TeleCart Pulse events ([ef7856](https://github.com/telecart-labs/telecart/commit/ef785654b969e7abc955ed452d8367d6cf3aa55e)) * Track and push MegaPay Pulse events ([ef7856](https://github.com/megapay-labs/megapay/commit/ef785654b969e7abc955ed452d8367d6cf3aa55e))
* UI/UX, add reset cache to admin ([09f1e5](https://github.com/telecart-labs/telecart/commit/09f1e514a975fea5c4fcd3b8cc587f906ab30bd3)) * UI/UX, add reset cache to admin ([09f1e5](https://github.com/megapay-labs/megapay/commit/09f1e514a975fea5c4fcd3b8cc587f906ab30bd3))
* Update admin page ([cd818d](https://github.com/telecart-labs/telecart/commit/cd818d3356d5738a9fb534e056d2e1055b2016ce)) * Update admin page ([cd818d](https://github.com/megapay-labs/megapay/commit/cd818d3356d5738a9fb534e056d2e1055b2016ce))
* Update design for product and product cards ([8a777c](https://github.com/telecart-labs/telecart/commit/8a777cd4d280b7049b60fdd0d3fa0586561e0a65)) * Update design for product and product cards ([8a777c](https://github.com/megapay-labs/megapay/commit/8a777cd4d280b7049b60fdd0d3fa0586561e0a65))
* Update product page design ([c64170](https://github.com/telecart-labs/telecart/commit/c64170f2d8058d99ae60323d907579b59566c119)) * Update product page design ([c64170](https://github.com/megapay-labs/megapay/commit/c64170f2d8058d99ae60323d907579b59566c119))
* Update readme ([5fb450](https://github.com/telecart-labs/telecart/commit/5fb45000ac77de0019a256150089256d5c423d68), [540595](https://github.com/telecart-labs/telecart/commit/540595c9f0661a2ca4c16d8876be54f9258bc0a3), [1361fe](https://github.com/telecart-labs/telecart/commit/1361fea993bcc37b0495b8fff7c20a45ccbd8ca2)) * Update readme ([5fb450](https://github.com/megapay-labs/megapay/commit/5fb45000ac77de0019a256150089256d5c423d68), [540595](https://github.com/megapay-labs/megapay/commit/540595c9f0661a2ca4c16d8876be54f9258bc0a3), [1361fe](https://github.com/megapay-labs/megapay/commit/1361fea993bcc37b0495b8fff7c20a45ccbd8ca2))
* Update styles for swipe to back ([e6a9e6](https://github.com/telecart-labs/telecart/commit/e6a9e6797f518d27caba507ac79d07ac8c113b06)) * Update styles for swipe to back ([e6a9e6](https://github.com/megapay-labs/megapay/commit/e6a9e6797f518d27caba507ac79d07ac8c113b06))
* Use yaMetrika number in settings ([cedc49](https://github.com/telecart-labs/telecart/commit/cedc49f0d5c3107791c1e6ff87a2f024a8baf828)) * Use yaMetrika number in settings ([cedc49](https://github.com/megapay-labs/megapay/commit/cedc49f0d5c3107791c1e6ff87a2f024a8baf828))
* Visualize swipe back ([50bdb8](https://github.com/telecart-labs/telecart/commit/50bdb8601c04799a4ecdb1b854ee1151a02f00f1)) * Visualize swipe back ([50bdb8](https://github.com/megapay-labs/megapay/commit/50bdb8601c04799a4ecdb1b854ee1151a02f00f1))
* WIP add yandex metrika goals ([4e59c4](https://github.com/telecart-labs/telecart/commit/4e59c4e7888925a87ce63eb53587d5e21fec4561)) * WIP add yandex metrika goals ([4e59c4](https://github.com/megapay-labs/megapay/commit/4e59c4e7888925a87ce63eb53587d5e21fec4561))
* добавлена функциональность политики конфиденциальности и согласия на обработку ПД ([7a5eeb](https://github.com/telecart-labs/telecart/commit/7a5eebec91ee73a2d38509cfa4f9bbb87cb75225)) * добавлена функциональность политики конфиденциальности и согласия на обработку ПД ([7a5eeb](https://github.com/megapay-labs/megapay/commit/7a5eebec91ee73a2d38509cfa4f9bbb87cb75225))
* добавлен жест swipe back для навигации назад ([179729](https://github.com/telecart-labs/telecart/commit/17972993ca815072ad5ded2bbc7a29e97f1abc6f)) * добавлен жест swipe back для навигации назад ([179729](https://github.com/megapay-labs/megapay/commit/17972993ca815072ad5ded2bbc7a29e97f1abc6f))
##### Admin ##### Admin
* Add more details for admin errors ([17865d](https://github.com/telecart-labs/telecart/commit/17865d8af4ed4b7f1f02a5b065847281fa5ede5f)) * Add more details for admin errors ([17865d](https://github.com/megapay-labs/megapay/commit/17865d8af4ed4b7f1f02a5b065847281fa5ede5f))
* Refactor logs viewer with table display and detailed dialog ([b39a34](https://github.com/telecart-labs/telecart/commit/b39a344a7dac32225d6fe939ea81fcc67f4b5750)) * Refactor logs viewer with table display and detailed dialog ([b39a34](https://github.com/megapay-labs/megapay/commit/b39a344a7dac32225d6fe939ea81fcc67f4b5750))
* Remove legacy setting keys that not defined in defaults ([107741](https://github.com/telecart-labs/telecart/commit/1077417d717cbd601bdff82ab3dfbb61402c3640)) * Remove legacy setting keys that not defined in defaults ([107741](https://github.com/megapay-labs/megapay/commit/1077417d717cbd601bdff82ab3dfbb61402c3640))
##### Banner ##### Banner
* Add banner feature ([05e7ca](https://github.com/telecart-labs/telecart/commit/05e7cafd0f36b204e0dea51a0f46f1a2c795dceb)) * Add banner feature ([05e7ca](https://github.com/megapay-labs/megapay/commit/05e7cafd0f36b204e0dea51a0f46f1a2c795dceb))
##### Customers ##### Customers
* Track order meta and OC sync ([952d8e](https://github.com/telecart-labs/telecart/commit/952d8e58da2972ff834d7f6609749b6dbd15a938)) * Track order meta and OC sync ([952d8e](https://github.com/megapay-labs/megapay/commit/952d8e58da2972ff834d7f6609749b6dbd15a938))
##### Products-feed ##### Products-feed
* Replace fixed image dimensions with aspect ratio selection ([cd0606](https://github.com/telecart-labs/telecart/commit/cd060610fe991c7c6d0db81a24bfa2b062192d20)) * Replace fixed image dimensions with aspect ratio selection ([cd0606](https://github.com/megapay-labs/megapay/commit/cd060610fe991c7c6d0db81a24bfa2b062192d20))
##### Pulse ##### Pulse
* Implement reliable event tracking and delivery system ([4a3dcc](https://github.com/telecart-labs/telecart/commit/4a3dcc11d161420c58494d744909f48982bd2582)) * Implement reliable event tracking and delivery system ([4a3dcc](https://github.com/megapay-labs/megapay/commit/4a3dcc11d161420c58494d744909f48982bd2582))
##### Search ##### Search
* Add keyboard hide button and auto-hide Dock ([db8d13](https://github.com/telecart-labs/telecart/commit/db8d1360fc9d8702fa7f2607337ac447ea646c5d)) * Add keyboard hide button and auto-hide Dock ([db8d13](https://github.com/megapay-labs/megapay/commit/db8d1360fc9d8702fa7f2607337ac447ea646c5d))
* Improve search UI with sticky bar and keyboard handling ([64ead2](https://github.com/telecart-labs/telecart/commit/64ead29583086dc55ae59e5d2b775dae31f36944)) * Improve search UI with sticky bar and keyboard handling ([64ead2](https://github.com/megapay-labs/megapay/commit/64ead29583086dc55ae59e5d2b775dae31f36944))
##### Slider ##### Slider
* Add slider feature ([3049bd](https://github.com/telecart-labs/telecart/commit/3049bd3101a44259f2883b351244c6eb5564cf89)) * Add slider feature ([3049bd](https://github.com/megapay-labs/megapay/commit/3049bd3101a44259f2883b351244c6eb5564cf89))
##### Spa ##### Spa
* Add custom dock ([4936e6](https://github.com/telecart-labs/telecart/commit/4936e6f16c0cd44299d086911a347cd3626fa2af)) * Add custom dock ([4936e6](https://github.com/megapay-labs/megapay/commit/4936e6f16c0cd44299d086911a347cd3626fa2af))
* Add dock ([2e699e](https://github.com/telecart-labs/telecart/commit/2e699eb0d6aca08d3f87030ea822c1fc79d3d477)) * Add dock ([2e699e](https://github.com/megapay-labs/megapay/commit/2e699eb0d6aca08d3f87030ea822c1fc79d3d477))
* Correct radius for floating panel, small ui fixes ([72ab84](https://github.com/telecart-labs/telecart/commit/72ab842a95f090b886787f551bee274fc2f6932c)) * Correct radius for floating panel, small ui fixes ([72ab84](https://github.com/megapay-labs/megapay/commit/72ab842a95f090b886787f551bee274fc2f6932c))
* Show navbar with app logo and app name ([c3c0d6](https://github.com/telecart-labs/telecart/commit/c3c0d6d2c179c83a1700d773c496ff7a44cce99c)) * Show navbar with app logo and app name ([c3c0d6](https://github.com/megapay-labs/megapay/commit/c3c0d6d2c179c83a1700d773c496ff7a44cce99c))
* UI changes ([ed8592](https://github.com/telecart-labs/telecart/commit/ed8592c19dabf4f26d6ed45e55a3c6f7398d667e)) * UI changes ([ed8592](https://github.com/megapay-labs/megapay/commit/ed8592c19dabf4f26d6ed45e55a3c6f7398d667e))
##### Telecart ##### Megapay
* Add vouchers and coupons (#9) ([ac24f0](https://github.com/telecart-labs/telecart/commit/ac24f0376bee13cc14db49a2904867ef173dcf95)) * Add vouchers and coupons (#9) ([ac24f0](https://github.com/megapay-labs/megapay/commit/ac24f0376bee13cc14db49a2904867ef173dcf95))
##### Texts ##### Texts
* Add options to redefine text for zero product prices ([1fbbb7](https://github.com/telecart-labs/telecart/commit/1fbbb7b6db13a9dac745c32d11f2e71ed79e854e)) * Add options to redefine text for zero product prices ([1fbbb7](https://github.com/megapay-labs/megapay/commit/1fbbb7b6db13a9dac745c32d11f2e71ed79e854e))
##### Ya metrika ##### Ya metrika
* WIP yandex metrika ([d7666f](https://github.com/telecart-labs/telecart/commit/d7666f94ba22fc1a808299e9a91ead14e6b58b25)) * WIP yandex metrika ([d7666f](https://github.com/megapay-labs/megapay/commit/d7666f94ba22fc1a808299e9a91ead14e6b58b25))
### Bug Fixes ### Bug Fixes
* Admin mainpage builder drawer doesnot show ([ad54b1](https://github.com/telecart-labs/telecart/commit/ad54b14c6804fae8960a5e15dbceb0549d91c732)) * Admin mainpage builder drawer doesnot show ([ad54b1](https://github.com/megapay-labs/megapay/commit/ad54b14c6804fae8960a5e15dbceb0549d91c732))
* Base header color ([28d80d](https://github.com/telecart-labs/telecart/commit/28d80d0f19ee31fea5011c2b466edea1590ab71e)) * Base header color ([28d80d](https://github.com/megapay-labs/megapay/commit/28d80d0f19ee31fea5011c2b466edea1590ab71e))
* Browser check ([4cd49b](https://github.com/telecart-labs/telecart/commit/4cd49b17a6df65863dc9fd32efdd0bba4b4e44ff)) * Browser check ([4cd49b](https://github.com/megapay-labs/megapay/commit/4cd49b17a6df65863dc9fd32efdd0bba4b4e44ff))
* Center image on product view ([dc198c](https://github.com/telecart-labs/telecart/commit/dc198c63b7c4f66b92eeb55958983d8eaed0260f)) * Center image on product view ([dc198c](https://github.com/megapay-labs/megapay/commit/dc198c63b7c4f66b92eeb55958983d8eaed0260f))
* Correct cli.php path for phar ([57c840](https://github.com/telecart-labs/telecart/commit/57c8400904b74569c843cd898fe6c39552f91e6b)) * Correct cli.php path for phar ([57c840](https://github.com/megapay-labs/megapay/commit/57c8400904b74569c843cd898fe6c39552f91e6b))
* Correct counter id for yandex metrika test ([9870f2](https://github.com/telecart-labs/telecart/commit/9870f2f36364ec7d968b3aec14091aefae774199)) * Correct counter id for yandex metrika test ([9870f2](https://github.com/megapay-labs/megapay/commit/9870f2f36364ec7d968b3aec14091aefae774199))
* Correct crontab line ([613ce5](https://github.com/telecart-labs/telecart/commit/613ce520ee53be47ee06e101daf54c8f5136184b)) * Correct crontab line ([613ce5](https://github.com/megapay-labs/megapay/commit/613ce520ee53be47ee06e101daf54c8f5136184b))
* Correct path for cron ([185f30](https://github.com/telecart-labs/telecart/commit/185f3096e1e17507f4191104794991448d4d44bb)) * Correct path for cron ([185f30](https://github.com/megapay-labs/megapay/commit/185f3096e1e17507f4191104794991448d4d44bb))
* Correct url for hit ([515b82](https://github.com/telecart-labs/telecart/commit/515b82302ba603f61324ace576e23adbf82560fd)) * Correct url for hit ([515b82](https://github.com/megapay-labs/megapay/commit/515b82302ba603f61324ace576e23adbf82560fd))
* Disable fullscreen for desktop ([bf32d9](https://github.com/telecart-labs/telecart/commit/bf32d9081169206cef62d92f27338321d1cc1e69)) * Disable fullscreen for desktop ([bf32d9](https://github.com/megapay-labs/megapay/commit/bf32d9081169206cef62d92f27338321d1cc1e69))
* Fix dock layout ([bdbdfc](https://github.com/telecart-labs/telecart/commit/bdbdfc3650ff24e77f7f35059ac72e87cd02ddf2)) * Fix dock layout ([bdbdfc](https://github.com/megapay-labs/megapay/commit/bdbdfc3650ff24e77f7f35059ac72e87cd02ddf2))
* Fix errors and small improvements ([3b2e2c](https://github.com/telecart-labs/telecart/commit/3b2e2cb656bb8db6feebdbb23612202f96cdde3f)) * Fix errors and small improvements ([3b2e2c](https://github.com/megapay-labs/megapay/commit/3b2e2cb656bb8db6feebdbb23612202f96cdde3f))
* Fix search issues ([2f9a55](https://github.com/telecart-labs/telecart/commit/2f9a553ae356fe4fb7ee3a481010d14be7d94ad7)) * Fix search issues ([2f9a55](https://github.com/megapay-labs/megapay/commit/2f9a553ae356fe4fb7ee3a481010d14be7d94ad7))
* Fix type error ([836161](https://github.com/telecart-labs/telecart/commit/8361616dd647397777849fd87267134e0bc1fb9b)) * Fix type error ([836161](https://github.com/megapay-labs/megapay/commit/8361616dd647397777849fd87267134e0bc1fb9b))
* Glob not work with phar ([24db69](https://github.com/telecart-labs/telecart/commit/24db69fbbad6758d11dabdac54f075611cde9593)) * Glob not work with phar ([24db69](https://github.com/megapay-labs/megapay/commit/24db69fbbad6758d11dabdac54f075611cde9593))
* Grant +x permissions for cli.php ([0ee3b7](https://github.com/telecart-labs/telecart/commit/0ee3b7d091da970d19a755207c73c28689bfd2a4)) * Grant +x permissions for cli.php ([0ee3b7](https://github.com/megapay-labs/megapay/commit/0ee3b7d091da970d19a755207c73c28689bfd2a4))
* Handle missing tags in workflow ([bc50cf](https://github.com/telecart-labs/telecart/commit/bc50cf064854ad0597f1d7a39b0eb32d88d2598a)) * Handle missing tags in workflow ([bc50cf](https://github.com/megapay-labs/megapay/commit/bc50cf064854ad0597f1d7a39b0eb32d88d2598a))
* Image picker component name type ([30b010](https://github.com/telecart-labs/telecart/commit/30b0108fe78b2a594db0c749f563577921c189d0)) * Image picker component name type ([30b010](https://github.com/megapay-labs/megapay/commit/30b0108fe78b2a594db0c749f563577921c189d0))
* Many products in search ([a5e91d](https://github.com/telecart-labs/telecart/commit/a5e91dd488b1f13abf739797e75400ddf36ba7e1)) * Many products in search ([a5e91d](https://github.com/megapay-labs/megapay/commit/a5e91dd488b1f13abf739797e75400ddf36ba7e1))
* Order creation ([82ab81](https://github.com/telecart-labs/telecart/commit/82ab8134e19f2cc4066de5241e7ff29905d79b17)) * Order creation ([82ab81](https://github.com/megapay-labs/megapay/commit/82ab8134e19f2cc4066de5241e7ff29905d79b17))
* Pulse ingest ([95dd54](https://github.com/telecart-labs/telecart/commit/95dd545dc5718046cd421d70ad2d4ea137919852)) * Pulse ingest ([95dd54](https://github.com/megapay-labs/megapay/commit/95dd545dc5718046cd421d70ad2d4ea137919852))
* Scroll behaviour ([359395](https://github.com/telecart-labs/telecart/commit/359395b7e880d72dd34da504f6d9fe001d6f0aff)) * Scroll behaviour ([359395](https://github.com/megapay-labs/megapay/commit/359395b7e880d72dd34da504f6d9fe001d6f0aff))
* Search ([e5792a](https://github.com/telecart-labs/telecart/commit/e5792a059a0986b6d6c86df9dbcbda212bc0f548)) * Search ([e5792a](https://github.com/megapay-labs/megapay/commit/e5792a059a0986b6d6c86df9dbcbda212bc0f548))
* Settings numeric error ([44d2af](https://github.com/telecart-labs/telecart/commit/44d2af3b30a7133b550e56385c3096c0e8848df5)) * Settings numeric error ([44d2af](https://github.com/megapay-labs/megapay/commit/44d2af3b30a7133b550e56385c3096c0e8848df5))
* Store error ([ab5c2f](https://github.com/telecart-labs/telecart/commit/ab5c2f42b907d19f0c52c631cea02b981a199c39)) * Store error ([ab5c2f](https://github.com/megapay-labs/megapay/commit/ab5c2f42b907d19f0c52c631cea02b981a199c39))
* Switch between code and visual for custom forms ([0ab09a](https://github.com/telecart-labs/telecart/commit/0ab09aad10eb724cf0378bcc2f46001b5108fade)) * Switch between code and visual for custom forms ([0ab09a](https://github.com/megapay-labs/megapay/commit/0ab09aad10eb724cf0378bcc2f46001b5108fade))
* Test ([c4b192](https://github.com/telecart-labs/telecart/commit/c4b19286f36ad166a1092dda86e65d48e3390723)) * Test ([c4b192](https://github.com/megapay-labs/megapay/commit/c4b19286f36ad166a1092dda86e65d48e3390723))
* Use html for tg bot ([7e6502](https://github.com/telecart-labs/telecart/commit/7e6502b07e74e27e27326c9593f25c2c9c03418b)) * Use html for tg bot ([7e6502](https://github.com/megapay-labs/megapay/commit/7e6502b07e74e27e27326c9593f25c2c9c03418b))
##### Admin ##### Admin
* Fix error when chat_id is string ([8f6af0](https://github.com/telecart-labs/telecart/commit/8f6af04e732f853eb79504676dc5ae83ba151c93)) * Fix error when chat_id is string ([8f6af0](https://github.com/megapay-labs/megapay/commit/8f6af04e732f853eb79504676dc5ae83ba151c93))
##### Spa ##### Spa
* Remove html in price for some opencart custom themes ([3423dd](https://github.com/telecart-labs/telecart/commit/3423dd172748845ce5177ea6bf5894a6da977c37), [d6a436](https://github.com/telecart-labs/telecart/commit/d6a43605acaff1cf335dc044e2b297132d6eb2ce)) * Remove html in price for some opencart custom themes ([3423dd](https://github.com/megapay-labs/megapay/commit/3423dd172748845ce5177ea6bf5894a6da977c37), [d6a436](https://github.com/megapay-labs/megapay/commit/d6a43605acaff1cf335dc044e2b297132d6eb2ce))
##### Telecart ##### Megapay
* Fix products search ([98ee6d](https://github.com/telecart-labs/telecart/commit/98ee6d9ecac4349cad847bdba1b10cf8660c251f)) * Fix products search ([98ee6d](https://github.com/megapay-labs/megapay/commit/98ee6d9ecac4349cad847bdba1b10cf8660c251f))
--- ---
## [1.3.2](https://github.com/telecart-labs/telecart/compare/v1.3.1...v1.3.2) (2025-10-24) ## [1.3.2](https://github.com/megapay-labs/megapay/compare/v1.3.1...v1.3.2) (2025-10-24)
### Bug Fixes ### Bug Fixes
##### Products ##### Products
* Encode html for title on products page ([78ca4f](https://github.com/telecart-labs/telecart/commit/78ca4fd309e2254771a01ade75197d46e149c5f3)) * Encode html for title on products page ([78ca4f](https://github.com/megapay-labs/megapay/commit/78ca4fd309e2254771a01ade75197d46e149c5f3))
--- ---
## [1.3.1](https://github.com/telecart-labs/telecart/compare/v1.3.0...v1.3.1) (2025-10-19) ## [1.3.1](https://github.com/megapay-labs/megapay/compare/v1.3.0...v1.3.1) (2025-10-19)
### Bug Fixes ### Bug Fixes
##### App ##### App
* Fix unhandled exceptions ([aa4264](https://github.com/telecart-labs/telecart/commit/aa42643c34c1a7cb11aae2d3191ac63c0af3236a)) * Fix unhandled exceptions ([aa4264](https://github.com/megapay-labs/megapay/commit/aa42643c34c1a7cb11aae2d3191ac63c0af3236a))
--- ---
## [1.3.0](https://github.com/telecart-labs/telecart/compare/v1.2.0...v1.3.0) (2025-10-19) ## [1.3.0](https://github.com/megapay-labs/megapay/compare/v1.2.0...v1.3.0) (2025-10-19)
### Features ### Features
* Add filters to mainpage ([1e2a9b](https://github.com/telecart-labs/telecart/commit/1e2a9bc7051e14c65eb44b392dba11f766b95d33)) * Add filters to mainpage ([1e2a9b](https://github.com/megapay-labs/megapay/commit/1e2a9bc7051e14c65eb44b392dba11f766b95d33))
* Handle start command for telecart bot ([c936d7](https://github.com/telecart-labs/telecart/commit/c936d727b495b06f63d7f15949d540f2c9a2b9c0)) * Handle start command for megapay bot ([c936d7](https://github.com/megapay-labs/megapay/commit/c936d727b495b06f63d7f15949d540f2c9a2b9c0))
##### Admin ##### Admin
* Do not log assets cleanup message if nothing deleted ([00165b](https://github.com/telecart-labs/telecart/commit/00165b3b61841303a6eff0447ee134d860f4a8b9)) * Do not log assets cleanup message if nothing deleted ([00165b](https://github.com/megapay-labs/megapay/commit/00165b3b61841303a6eff0447ee134d860f4a8b9))
* Remove old assets ([01368b](https://github.com/telecart-labs/telecart/commit/01368bbfce831cd8949500ffdf5f5e4614316459)) * Remove old assets ([01368b](https://github.com/megapay-labs/megapay/commit/01368bbfce831cd8949500ffdf5f5e4614316459))
* Remove old maps ([31a990](https://github.com/telecart-labs/telecart/commit/31a9909cc37c953113c743d248c9dd4065f89acb)) * Remove old maps ([31a990](https://github.com/megapay-labs/megapay/commit/31a9909cc37c953113c743d248c9dd4065f89acb))
##### Bot ##### Bot
* Add bot commands ([023ace](https://github.com/telecart-labs/telecart/commit/023acee68fb8f247a5e84f62aade44c77cfc0ed5)) * Add bot commands ([023ace](https://github.com/megapay-labs/megapay/commit/023acee68fb8f247a5e84f62aade44c77cfc0ed5))
##### Filters ##### Filters
* Add filters for the main page ([e7e045](https://github.com/telecart-labs/telecart/commit/e7e045b695d227d2d895242b4c0f19883d07f69e)) * Add filters for the main page ([e7e045](https://github.com/megapay-labs/megapay/commit/e7e045b695d227d2d895242b4c0f19883d07f69e))
##### Spa ##### Spa
* Hide floating cart btn for filters page ([259154](https://github.com/telecart-labs/telecart/commit/259154e4f1ca2ac0e2e6a357e8a53be78a00441a)) * Hide floating cart btn for filters page ([259154](https://github.com/megapay-labs/megapay/commit/259154e4f1ca2ac0e2e6a357e8a53be78a00441a))
* Lock vertical orientation ([646721](https://github.com/telecart-labs/telecart/commit/6467216775c44a7f4cc924d4551cc88ca246b757)) * Lock vertical orientation ([646721](https://github.com/megapay-labs/megapay/commit/6467216775c44a7f4cc924d4551cc88ca246b757))
* Update Telegram Mini App to 59 version ([3ecb51](https://github.com/telecart-labs/telecart/commit/3ecb51b5cd1751f4e2ace73171225ee3a33e46c4)) * Update Telegram Mini App to 59 version ([3ecb51](https://github.com/megapay-labs/megapay/commit/3ecb51b5cd1751f4e2ace73171225ee3a33e46c4))
### Bug Fixes ### Bug Fixes
* Escape character for start message command ([a051ff](https://github.com/telecart-labs/telecart/commit/a051ff545e920760e3a0e6c34ef3cc94a0c1bfdb)) * Escape character for start message command ([a051ff](https://github.com/megapay-labs/megapay/commit/a051ff545e920760e3a0e6c34ef3cc94a0c1bfdb))
--- ---
## [1.2.0](https://github.com/telecart-labs/telecart/compare/v1.1.0...v1.2.0) (2025-09-27) ## [1.2.0](https://github.com/megapay-labs/megapay/compare/v1.1.0...v1.2.0) (2025-09-27)
### Features ### Features
##### Product ##### Product
* Add option to disable store feature ([d7dd05](https://github.com/telecart-labs/telecart/commit/d7dd055e245a5bb0772b382ca8542394e92fecd5)) * Add option to disable store feature ([d7dd05](https://github.com/megapay-labs/megapay/commit/d7dd055e245a5bb0772b382ca8542394e92fecd5))
### Bug Fixes ### Bug Fixes
* Correct update opencart config after defaults diff update ([e24e7c](https://github.com/telecart-labs/telecart/commit/e24e7c6d106597c627451abf8014723f42fdda34)) * Correct update opencart config after defaults diff update ([e24e7c](https://github.com/megapay-labs/megapay/commit/e24e7c6d106597c627451abf8014723f42fdda34))
--- ---
## [1.1.0](https://github.com/telecart-labs/telecart/compare/v1.0.7...v1.1.0) (2025-09-26) ## [1.1.0](https://github.com/megapay-labs/megapay/compare/v1.0.7...v1.1.0) (2025-09-26)
--- ---
## [1.0.7](https://github.com/telecart-labs/telecart/compare/v1.0.6...v1.0.7) (2025-09-26) ## [1.0.7](https://github.com/megapay-labs/megapay/compare/v1.0.6...v1.0.7) (2025-09-26)
### Features ### Features
##### Categories ##### Categories
* Added animations for categories list ([b7b255](https://github.com/telecart-labs/telecart/commit/b7b255887db2d04b8ba70a966382f44c92475df0)) * Added animations for categories list ([b7b255](https://github.com/megapay-labs/megapay/commit/b7b255887db2d04b8ba70a966382f44c92475df0))
* Add skeleton for categories loading ([294e0c](https://github.com/telecart-labs/telecart/commit/294e0cd17e2038f3088b504331ad9b009129e8ed)) * Add skeleton for categories loading ([294e0c](https://github.com/megapay-labs/megapay/commit/294e0cd17e2038f3088b504331ad9b009129e8ed))
* Hide button from categories ([f06606](https://github.com/telecart-labs/telecart/commit/f066069a1b6cf186046e272bc7af61ab46f79c0e)) * Hide button from categories ([f06606](https://github.com/megapay-labs/megapay/commit/f066069a1b6cf186046e272bc7af61ab46f79c0e))
##### Design ##### Design
* Add safe top padding for product page ([a3e5b8](https://github.com/telecart-labs/telecart/commit/a3e5b8b07a28813115662b566284f8622f0b3722)) * Add safe top padding for product page ([a3e5b8](https://github.com/megapay-labs/megapay/commit/a3e5b8b07a28813115662b566284f8622f0b3722))
* Product link in cart ([39a350](https://github.com/telecart-labs/telecart/commit/39a350d517d5d762720236f0e9b682299fd2b746)) * Product link in cart ([39a350](https://github.com/megapay-labs/megapay/commit/39a350d517d5d762720236f0e9b682299fd2b746))
##### Products ##### Products
* Show correct product prices ([35dd0d](https://github.com/telecart-labs/telecart/commit/35dd0de261a4497c01cd6eb54ed0d7032cea5f8b)) * Show correct product prices ([35dd0d](https://github.com/megapay-labs/megapay/commit/35dd0de261a4497c01cd6eb54ed0d7032cea5f8b))
### Bug Fixes ### Bug Fixes
##### Product ##### Product
* Decode html entities for product and category names ([acbfae](https://github.com/telecart-labs/telecart/commit/acbfaebcf415f42c6fb16c6a39d5e10f0776da90)) * Decode html entities for product and category names ([acbfae](https://github.com/megapay-labs/megapay/commit/acbfaebcf415f42c6fb16c6a39d5e10f0776da90))
* Fix error when image not found ([a381b3](https://github.com/telecart-labs/telecart/commit/a381b3a6ee6972775815db382269ec8ab3d31a4f)) * Fix error when image not found ([a381b3](https://github.com/megapay-labs/megapay/commit/a381b3a6ee6972775815db382269ec8ab3d31a4f))
* Fix select product option UI ([22a783](https://github.com/telecart-labs/telecart/commit/22a783f0ef833f5797e798222dce65493d71b34b)) * Fix select product option UI ([22a783](https://github.com/megapay-labs/megapay/commit/22a783f0ef833f5797e798222dce65493d71b34b))
--- ---
## [1.0.6](https://github.com/telecart-labs/telecart/compare/v1.0.5...v1.0.6) (2025-09-24) ## [1.0.6](https://github.com/megapay-labs/megapay/compare/v1.0.5...v1.0.6) (2025-09-24)
### Bug Fixes ### Bug Fixes
* Fix possible foreign error message on telecart page ([016eeb](https://github.com/telecart-labs/telecart/commit/016eeb445db7ce692825d323bed7c1dd815e30af)) * Fix possible foreign error message on megapay page ([016eeb](https://github.com/megapay-labs/megapay/commit/016eeb445db7ce692825d323bed7c1dd815e30af))
##### Categories ##### Categories
* Fix nested lvl > 2 categories rendering ([0f04cb](https://github.com/telecart-labs/telecart/commit/0f04cbf105252b88358095ae5be33fedca6f1e63)) * Fix nested lvl > 2 categories rendering ([0f04cb](https://github.com/megapay-labs/megapay/commit/0f04cbf105252b88358095ae5be33fedca6f1e63))
* Increase max categories count to display up to 100 ([9f6416](https://github.com/telecart-labs/telecart/commit/9f6416a1b7b7f065b558ecd3089c42ef397bd817)) * Increase max categories count to display up to 100 ([9f6416](https://github.com/megapay-labs/megapay/commit/9f6416a1b7b7f065b558ecd3089c42ef397bd817))
##### Database ##### Database
* Fix db connection error when not standard mysql port ([ec5cdf](https://github.com/telecart-labs/telecart/commit/ec5cdfcaa9321cb824c858df91ce4464d6158a2c)) * Fix db connection error when not standard mysql port ([ec5cdf](https://github.com/megapay-labs/megapay/commit/ec5cdfcaa9321cb824c858df91ce4464d6158a2c))
--- ---
## [1.0.5](https://github.com/telecart-labs/telecart/compare/v1.0.4...v1.0.5) (2025-09-24) ## [1.0.5](https://github.com/megapay-labs/megapay/compare/v1.0.4...v1.0.5) (2025-09-24)
### Features ### Features
##### Categories ##### Categories
* Add options to select what categories to show on front page ([9e4022](https://github.com/telecart-labs/telecart/commit/9e4022f64856082fffa7a0264949373319cdf9ff)) * Add options to select what categories to show on front page ([9e4022](https://github.com/megapay-labs/megapay/commit/9e4022f64856082fffa7a0264949373319cdf9ff))
--- ---
## [1.0.4](https://github.com/telecart-labs/telecart/compare/v1.0.3...v1.0.4) (2025-09-24) ## [1.0.4](https://github.com/megapay-labs/megapay/compare/v1.0.3...v1.0.4) (2025-09-24)
### Bug Fixes ### Bug Fixes
* Error when category doesnt have image ([490cbf](https://github.com/telecart-labs/telecart/commit/490cbfacf72095001dccaf374034292ea247e21b)) * Error when category doesnt have image ([490cbf](https://github.com/megapay-labs/megapay/commit/490cbfacf72095001dccaf374034292ea247e21b))
--- ---
## [1.0.3](https://github.com/telecart-labs/telecart/compare/v1.0.2...v1.0.3) (2025-09-24) ## [1.0.3](https://github.com/megapay-labs/megapay/compare/v1.0.2...v1.0.3) (2025-09-24)
### Bug Fixes ### Bug Fixes
* Init exception for some opencart versions ([0cf0c4](https://github.com/telecart-labs/telecart/commit/0cf0c438433f8c1895bef5f490bc0f9af86b0c04)) * Init exception for some opencart versions ([0cf0c4](https://github.com/megapay-labs/megapay/commit/0cf0c438433f8c1895bef5f490bc0f9af86b0c04))
--- ---
## [1.0.2](https://github.com/telecart-labs/telecart/compare/v1.0.1...v1.0.2) (2025-08-16) ## [1.0.2](https://github.com/megapay-labs/megapay/compare/v1.0.1...v1.0.2) (2025-08-16)
### Bug Fixes ### Bug Fixes
* UI fixes ([854dfd](https://github.com/telecart-labs/telecart/commit/854dfdf7f2dba7bc78b53c19f345c1909298c474)) * UI fixes ([854dfd](https://github.com/megapay-labs/megapay/commit/854dfdf7f2dba7bc78b53c19f345c1909298c474))
--- ---
## [1.0.1](https://github.com/telecart-labs/telecart/compare/v1.0.0...v1.0.1) (2025-08-16) ## [1.0.1](https://github.com/megapay-labs/megapay/compare/v1.0.0...v1.0.1) (2025-08-16)
### Bug Fixes ### Bug Fixes
* Check code phrase when configure chat_id ([a0abc1](https://github.com/telecart-labs/telecart/commit/a0abc14c6db91fb6cec14f8aa64297d671e88a7e)) * Check code phrase when configure chat_id ([a0abc1](https://github.com/megapay-labs/megapay/commit/a0abc14c6db91fb6cec14f8aa64297d671e88a7e))
--- ---
## [1.0.0](https://github.com/telecart-labs/telecart/compare/v0.0.2...v1.0.0) (2025-08-16) ## [1.0.0](https://github.com/megapay-labs/megapay/compare/v0.0.2...v1.0.0) (2025-08-16)
### Features ### Features
* Add bot_token validation ([d7df5a](https://github.com/telecart-labs/telecart/commit/d7df5a4b5c8abdf5117c07a9bb7fc7744c23eb1d)) * Add bot_token validation ([d7df5a](https://github.com/megapay-labs/megapay/commit/d7df5a4b5c8abdf5117c07a9bb7fc7744c23eb1d))
* Add carousel for images ([a40089](https://github.com/telecart-labs/telecart/commit/a40089ef553eaf30d813a9e2b2495fe3aa7dd0d4)) * Add carousel for images ([a40089](https://github.com/megapay-labs/megapay/commit/a40089ef553eaf30d813a9e2b2495fe3aa7dd0d4))
* Add Categories ([6a8ea0](https://github.com/telecart-labs/telecart/commit/6a8ea048ea52e6bd3c146b4ec311e9633fce269a)) * Add Categories ([6a8ea0](https://github.com/megapay-labs/megapay/commit/6a8ea048ea52e6bd3c146b4ec311e9633fce269a))
* Add custom BottomButton instead of TG ([b0cc02](https://github.com/telecart-labs/telecart/commit/b0cc0237af12ea5560835092bb808e4bc742c380)) * Add custom BottomButton instead of TG ([b0cc02](https://github.com/megapay-labs/megapay/commit/b0cc0237af12ea5560835092bb808e4bc742c380))
* Add fullscreen viewer ([4ae8d5](https://github.com/telecart-labs/telecart/commit/4ae8d593280774527fbeda3e52d924bd23a12813)) * Add fullscreen viewer ([4ae8d5](https://github.com/megapay-labs/megapay/commit/4ae8d593280774527fbeda3e52d924bd23a12813))
* Add fulscreen mode, dark mode ([252854](https://github.com/telecart-labs/telecart/commit/252854e67ea93716c271e2e20d25b0d73e24e380)) * Add fulscreen mode, dark mode ([252854](https://github.com/megapay-labs/megapay/commit/252854e67ea93716c271e2e20d25b0d73e24e380))
* Add haptictouch to bottom buttons ([51ce6e](https://github.com/telecart-labs/telecart/commit/51ce6ed959e9b673a0cfd9fac614f743b24d582f)) * Add haptictouch to bottom buttons ([51ce6e](https://github.com/megapay-labs/megapay/commit/51ce6ed959e9b673a0cfd9fac614f743b24d582f))
* Add hero block ([3c819e](https://github.com/telecart-labs/telecart/commit/3c819e6c6cf9d25088c2a8024da13e8e0180bde7)) * Add hero block ([3c819e](https://github.com/megapay-labs/megapay/commit/3c819e6c6cf9d25088c2a8024da13e8e0180bde7))
* Add manufacturer to product view ([b25f6d](https://github.com/telecart-labs/telecart/commit/b25f6d3c7335c42487702aa7fff2c5003fd63046)) * Add manufacturer to product view ([b25f6d](https://github.com/megapay-labs/megapay/commit/b25f6d3c7335c42487702aa7fff2c5003fd63046))
* Add new mainpage products options, hide attributes ([d9fd26](https://github.com/telecart-labs/telecart/commit/d9fd26d3541e02d4656d32af547a3e338bbbc4ff)) * Add new mainpage products options, hide attributes ([d9fd26](https://github.com/megapay-labs/megapay/commit/d9fd26d3541e02d4656d32af547a3e338bbbc4ff))
* Add preloader for product page ([b66a02](https://github.com/telecart-labs/telecart/commit/b66a02fd57a2f0233b37bb76b30a360e71333256)) * Add preloader for product page ([b66a02](https://github.com/megapay-labs/megapay/commit/b66a02fd57a2f0233b37bb76b30a360e71333256))
* Add product view page ([f13e12](https://github.com/telecart-labs/telecart/commit/f13e128d03831598ecd058217a0e8874f0831f75)) * Add product view page ([f13e12](https://github.com/megapay-labs/megapay/commit/f13e128d03831598ecd058217a0e8874f0831f75))
* Add telegram api ([b958fe](https://github.com/telecart-labs/telecart/commit/b958feaec751b2e3a4134f925a74c75d5d2d1b42)) * Add telegram api ([b958fe](https://github.com/megapay-labs/megapay/commit/b958feaec751b2e3a4134f925a74c75d5d2d1b42))
* Add telegram safe content area ([1715c0](https://github.com/telecart-labs/telecart/commit/1715c01b1d1b99d4e99a8fe6f40107a384250326)) * Add telegram safe content area ([1715c0](https://github.com/megapay-labs/megapay/commit/1715c01b1d1b99d4e99a8fe6f40107a384250326))
* Add validation and use opencart logger ([9f35ac](https://github.com/telecart-labs/telecart/commit/9f35acf39935416bfbb35735c3749baf0af20995)) * Add validation and use opencart logger ([9f35ac](https://github.com/megapay-labs/megapay/commit/9f35acf39935416bfbb35735c3749baf0af20995))
* Allow only vertical orientation ([fe4188](https://github.com/telecart-labs/telecart/commit/fe4188eb8b3d58cb5fa25c267e0e0ba46effbbac)) * Allow only vertical orientation ([fe4188](https://github.com/megapay-labs/megapay/commit/fe4188eb8b3d58cb5fa25c267e0e0ba46effbbac))
* Cache frontpage products and categories ([5f785e](https://github.com/telecart-labs/telecart/commit/5f785e82e6689283526dd5a218d76908078e7942)) * Cache frontpage products and categories ([5f785e](https://github.com/megapay-labs/megapay/commit/5f785e82e6689283526dd5a218d76908078e7942))
* Create new order ([c057f4](https://github.com/telecart-labs/telecart/commit/c057f4be76544466af62556237f7031c874f5f51)) * Create new order ([c057f4](https://github.com/megapay-labs/megapay/commit/c057f4be76544466af62556237f7031c874f5f51))
* Deny direct access to the spa ([41e74b](https://github.com/telecart-labs/telecart/commit/41e74bad121d76b9a4be2a2f02822d8323e739cc)) * Deny direct access to the spa ([41e74b](https://github.com/megapay-labs/megapay/commit/41e74bad121d76b9a4be2a2f02822d8323e739cc))
* Diplicate webhook info request ([6249b2](https://github.com/telecart-labs/telecart/commit/6249b218a137e105e64fbfb0b6c8829e2ca01349)) * Diplicate webhook info request ([6249b2](https://github.com/megapay-labs/megapay/commit/6249b218a137e105e64fbfb0b6c8829e2ca01349))
* Display product options ([f47bb4](https://github.com/telecart-labs/telecart/commit/f47bb46751fea79e43a96e2b63afde4cb7ef801b)) * Display product options ([f47bb4](https://github.com/megapay-labs/megapay/commit/f47bb46751fea79e43a96e2b63afde4cb7ef801b))
* Do not check signature if bot token not set ([1d892f](https://github.com/telecart-labs/telecart/commit/1d892f7d090a1ff91f724871e688b18a40df768e)) * Do not check signature if bot token not set ([1d892f](https://github.com/megapay-labs/megapay/commit/1d892f7d090a1ff91f724871e688b18a40df768e))
* Encode images to webp for telegram mini app ([c282b6](https://github.com/telecart-labs/telecart/commit/c282b6ea3b5c04ae92708eb1984ad14d2ea46cfa)) * Encode images to webp for telegram mini app ([c282b6](https://github.com/megapay-labs/megapay/commit/c282b6ea3b5c04ae92708eb1984ad14d2ea46cfa))
* Expand mini app on mounted ([1e454b](https://github.com/telecart-labs/telecart/commit/1e454b8f2387d9a4e2e4316253d7f8bddadccc1c)) * Expand mini app on mounted ([1e454b](https://github.com/megapay-labs/megapay/commit/1e454b8f2387d9a4e2e4316253d7f8bddadccc1c))
* Fix module name in admin ([9770a0](https://github.com/telecart-labs/telecart/commit/9770a09fc0abe57d7b97137c9fef4bfaf5687278)) * Fix module name in admin ([9770a0](https://github.com/megapay-labs/megapay/commit/9770a09fc0abe57d7b97137c9fef4bfaf5687278))
* Infinity scroll, load more, resore scroll ([bb2ee3](https://github.com/telecart-labs/telecart/commit/bb2ee38118e8626f8d85070047e256ad8305c1e5)) * Infinity scroll, load more, resore scroll ([bb2ee3](https://github.com/megapay-labs/megapay/commit/bb2ee38118e8626f8d85070047e256ad8305c1e5))
* Make two columns grid for product list ([34bd64](https://github.com/telecart-labs/telecart/commit/34bd64e9025fbd61cd3c64c1e9a9bebb4bf98e5d)) * Make two columns grid for product list ([34bd64](https://github.com/megapay-labs/megapay/commit/34bd64e9025fbd61cd3c64c1e9a9bebb4bf98e5d))
* Product options, speedup home page, themes ([e3cc0d](https://github.com/telecart-labs/telecart/commit/e3cc0d4b10edf3a7c655a8e6d9a39ca587d6ecbc)) * Product options, speedup home page, themes ([e3cc0d](https://github.com/megapay-labs/megapay/commit/e3cc0d4b10edf3a7c655a8e6d9a39ca587d6ecbc))
* Remove cache, refactor ([7404ec](https://github.com/telecart-labs/telecart/commit/7404ecb33e1289439a3b4b9b5926175fe5d3872d)) * Remove cache, refactor ([7404ec](https://github.com/megapay-labs/megapay/commit/7404ecb33e1289439a3b4b9b5926175fe5d3872d))
* Remove prefilled fields in checkout ([33b350](https://github.com/telecart-labs/telecart/commit/33b3500aa470438963af90ee2edccdff9a27233d)) * Remove prefilled fields in checkout ([33b350](https://github.com/megapay-labs/megapay/commit/33b3500aa470438963af90ee2edccdff9a27233d))
* Safe-top and search ([a8bb5e](https://github.com/telecart-labs/telecart/commit/a8bb5eb493ab329bebca8c7903d4facf4a22d76a)) * Safe-top and search ([a8bb5e](https://github.com/megapay-labs/megapay/commit/a8bb5eb493ab329bebca8c7903d4facf4a22d76a))
* Search component and loading splashscreen ([2fb841](https://github.com/telecart-labs/telecart/commit/2fb841ef08027eeabdade90d9a4725ea602b3f48)) * Search component and loading splashscreen ([2fb841](https://github.com/megapay-labs/megapay/commit/2fb841ef08027eeabdade90d9a4725ea602b3f48))
* Show tg app link ([b1ea16](https://github.com/telecart-labs/telecart/commit/b1ea169e2f83cd3d3108d9d11d2b9bb8ee234211)) * Show tg app link ([b1ea16](https://github.com/megapay-labs/megapay/commit/b1ea169e2f83cd3d3108d9d11d2b9bb8ee234211))
* UI changes ([d522cb](https://github.com/telecart-labs/telecart/commit/d522cbef8389adb05cc6e70ed6665db37915233c)) * UI changes ([d522cb](https://github.com/megapay-labs/megapay/commit/d522cbef8389adb05cc6e70ed6665db37915233c))
* Ui improvements, show only active products, limit max page for infinity scroll ([d499d7](https://github.com/telecart-labs/telecart/commit/d499d7d846d55cc158306160c51d4b871f5b6376)) * Ui improvements, show only active products, limit max page for infinity scroll ([d499d7](https://github.com/megapay-labs/megapay/commit/d499d7d846d55cc158306160c51d4b871f5b6376))
* Update styles ([ca3a59](https://github.com/telecart-labs/telecart/commit/ca3a59f43ae19f9c8417993e45c63f29696f46c8)) * Update styles ([ca3a59](https://github.com/megapay-labs/megapay/commit/ca3a59f43ae19f9c8417993e45c63f29696f46c8))
##### Admin ##### Admin
* Correct getting chat_id ([1e80fd](https://github.com/telecart-labs/telecart/commit/1e80fdb2ebaf47e39a6cbd45438860428146aac6)) * Correct getting chat_id ([1e80fd](https://github.com/megapay-labs/megapay/commit/1e80fdb2ebaf47e39a6cbd45438860428146aac6))
* Correct merge new default settings after initializing app ([469077](https://github.com/telecart-labs/telecart/commit/469077d0c9006f3bcfffcecf4454f2e5e4492fac)) * Correct merge new default settings after initializing app ([469077](https://github.com/megapay-labs/megapay/commit/469077d0c9006f3bcfffcecf4454f2e5e4492fac))
* Update disclaimer text ([133bad](https://github.com/telecart-labs/telecart/commit/133badf45b9727fbf2bee7c9b9f74ff274fa3cc8)) * Update disclaimer text ([133bad](https://github.com/megapay-labs/megapay/commit/133badf45b9727fbf2bee7c9b9f74ff274fa3cc8))
##### App ##### App
* Add maintenance mode ([2752ec](https://github.com/telecart-labs/telecart/commit/2752ec3dd18261af9894c8a28a6775bdb22301c3)) * Add maintenance mode ([2752ec](https://github.com/megapay-labs/megapay/commit/2752ec3dd18261af9894c8a28a6775bdb22301c3))
* Telegram init data signature validator ([350ec4](https://github.com/telecart-labs/telecart/commit/350ec4f64bf6534e57cf613e6b38d39a052fd646)) * Telegram init data signature validator ([350ec4](https://github.com/megapay-labs/megapay/commit/350ec4f64bf6534e57cf613e6b38d39a052fd646))
##### Order ##### Order
* Add success haptic for order created event ([858be6](https://github.com/telecart-labs/telecart/commit/858be67c89130ab291b34d8bd7fb4340b6fff422)) * Add success haptic for order created event ([858be6](https://github.com/megapay-labs/megapay/commit/858be67c89130ab291b34d8bd7fb4340b6fff422))
* Order default status and customer group ([14d42c](https://github.com/telecart-labs/telecart/commit/14d42c6ecb1967cc626c57ae7ccb60f66b361aec)) * Order default status and customer group ([14d42c](https://github.com/megapay-labs/megapay/commit/14d42c6ecb1967cc626c57ae7ccb60f66b361aec))
* Order process enchancements ([85101b](https://github.com/telecart-labs/telecart/commit/85101b988140c1d0114d3176115aab0864011b16)) * Order process enchancements ([85101b](https://github.com/megapay-labs/megapay/commit/85101b988140c1d0114d3176115aab0864011b16))
* WIP: telegram notifications ([454bd3](https://github.com/telecart-labs/telecart/commit/454bd39f1f12a6fa004f80c3b13ebc17032a35f9)) * WIP: telegram notifications ([454bd3](https://github.com/megapay-labs/megapay/commit/454bd39f1f12a6fa004f80c3b13ebc17032a35f9))
##### Orders ##### Orders
* Tg notifications, ya metrika, meta tags ([86d0fa](https://github.com/telecart-labs/telecart/commit/86d0fa95941fd2b1d491de8280817d0e80b461f2)) * Tg notifications, ya metrika, meta tags ([86d0fa](https://github.com/megapay-labs/megapay/commit/86d0fa95941fd2b1d491de8280817d0e80b461f2))
##### Product ##### Product
* Change router history driver, change add to cart behaviour ([ebc352](https://github.com/telecart-labs/telecart/commit/ebc352dcdfcf08694d2590ee94c9e799e795a2fc)) * Change router history driver, change add to cart behaviour ([ebc352](https://github.com/megapay-labs/megapay/commit/ebc352dcdfcf08694d2590ee94c9e799e795a2fc))
* Display attributes ([63adf9](https://github.com/telecart-labs/telecart/commit/63adf96908137ab0c173415f77278ee7483a2fb8)) * Display attributes ([63adf9](https://github.com/megapay-labs/megapay/commit/63adf96908137ab0c173415f77278ee7483a2fb8))
##### Shop ##### Shop
* Change grid image resize algorythm ([c3c256](https://github.com/telecart-labs/telecart/commit/c3c25619326e292575236979e389f8ddb68b6958)) * Change grid image resize algorythm ([c3c256](https://github.com/megapay-labs/megapay/commit/c3c25619326e292575236979e389f8ddb68b6958))
##### Style ##### Style
* Change pagination swiper styles ([50bf90](https://github.com/telecart-labs/telecart/commit/50bf9061be778b37f7f6869f4c39a4833af31b1d)) * Change pagination swiper styles ([50bf90](https://github.com/megapay-labs/megapay/commit/50bf9061be778b37f7f6869f4c39a4833af31b1d))
### Bug Fixes ### Bug Fixes
* Add CORS headers, make ci builds as preleases ([551535](https://github.com/telecart-labs/telecart/commit/55153531fb4899d0f3e699b70231d32290800ee2)) * Add CORS headers, make ci builds as preleases ([551535](https://github.com/megapay-labs/megapay/commit/55153531fb4899d0f3e699b70231d32290800ee2))
* Add route names ([47bb2c](https://github.com/telecart-labs/telecart/commit/47bb2cae85e9a16b0076898cd6265512c3adfc3c)) * Add route names ([47bb2c](https://github.com/megapay-labs/megapay/commit/47bb2cae85e9a16b0076898cd6265512c3adfc3c))
* Change hardcoded axios url ([4bb983](https://github.com/telecart-labs/telecart/commit/4bb983e4af53baf2a7a5aa39f15b5389906a4c71)) * Change hardcoded axios url ([4bb983](https://github.com/megapay-labs/megapay/commit/4bb983e4af53baf2a7a5aa39f15b5389906a4c71))
* Correct back button work ([08af20](https://github.com/telecart-labs/telecart/commit/08af204d7403572dbc45f3a74e13cf5d3d560a42)) * Correct back button work ([08af20](https://github.com/megapay-labs/megapay/commit/08af204d7403572dbc45f3a74e13cf5d3d560a42))
* Correct controller class ([5af66d](https://github.com/telecart-labs/telecart/commit/5af66d228a3defbc6f0b4fd15a9e2a3c192bf41d)) * Correct controller class ([5af66d](https://github.com/megapay-labs/megapay/commit/5af66d228a3defbc6f0b4fd15a9e2a3c192bf41d))
* Corrent telegram mini app url in settings ([ea2a60](https://github.com/telecart-labs/telecart/commit/ea2a60b59b20d2bede9d6884349b09e55e345774)) * Corrent telegram mini app url in settings ([ea2a60](https://github.com/megapay-labs/megapay/commit/ea2a60b59b20d2bede9d6884349b09e55e345774))
* Exception if no images ([9bcf32](https://github.com/telecart-labs/telecart/commit/9bcf32841ebd4663b5c6bd5e855b18e8cd486e45)) * Exception if no images ([9bcf32](https://github.com/megapay-labs/megapay/commit/9bcf32841ebd4663b5c6bd5e855b18e8cd486e45))
* Fullscreen slide index ([4114c3](https://github.com/telecart-labs/telecart/commit/4114c3366e4090e41e29bf6e48fe5f54d0dd4a9c)) * Fullscreen slide index ([4114c3](https://github.com/megapay-labs/megapay/commit/4114c3366e4090e41e29bf6e48fe5f54d0dd4a9c))
* Glitch ([db24be](https://github.com/telecart-labs/telecart/commit/db24be6f92bbe485985892ea017f4e4ef457cd52)) * Glitch ([db24be](https://github.com/megapay-labs/megapay/commit/db24be6f92bbe485985892ea017f4e4ef457cd52))
* Icon error ([19911c](https://github.com/telecart-labs/telecart/commit/19911c8f871e456c51836c3d07add3f066744ace)) * Icon error ([19911c](https://github.com/megapay-labs/megapay/commit/19911c8f871e456c51836c3d07add3f066744ace))
* Infinity scroll, init data in base64 ([f2f161](https://github.com/telecart-labs/telecart/commit/f2f1618e0ee591bc58a830a333b1f759b0a860d6)) * Infinity scroll, init data in base64 ([f2f161](https://github.com/megapay-labs/megapay/commit/f2f1618e0ee591bc58a830a333b1f759b0a860d6))
* Night theme ([06a6dc](https://github.com/telecart-labs/telecart/commit/06a6dca656871a920092dc6767990ab70b9fc6c2)) * Night theme ([06a6dc](https://github.com/megapay-labs/megapay/commit/06a6dca656871a920092dc6767990ab70b9fc6c2))
* Router in opencart ([ad92db](https://github.com/telecart-labs/telecart/commit/ad92dbfad48f993e2393c0e235083614581ae0c6)) * Router in opencart ([ad92db](https://github.com/megapay-labs/megapay/commit/ad92dbfad48f993e2393c0e235083614581ae0c6))
* Router scroll scrollBehavior ([08d245](https://github.com/telecart-labs/telecart/commit/08d2453df92ffc89c5e6c4e264370d8b9c32a432)) * Router scroll scrollBehavior ([08d245](https://github.com/megapay-labs/megapay/commit/08d2453df92ffc89c5e6c4e264370d8b9c32a432))
* Totals ([eb1f1d](https://github.com/telecart-labs/telecart/commit/eb1f1dc9c1de7c4733d0117257f7902f145614b2)) * Totals ([eb1f1d](https://github.com/megapay-labs/megapay/commit/eb1f1dc9c1de7c4733d0117257f7902f145614b2))
* Watch router ([1ffb1c](https://github.com/telecart-labs/telecart/commit/1ffb1cef12df1bde4330a7c9531b6574a07d2fe6)) * Watch router ([1ffb1c](https://github.com/megapay-labs/megapay/commit/1ffb1cef12df1bde4330a7c9531b6574a07d2fe6))
##### Admin ##### Admin
* Fix shop url ([c61dfd](https://github.com/telecart-labs/telecart/commit/c61dfd824a532512703c207c464954b51dbcce5a)) * Fix shop url ([c61dfd](https://github.com/megapay-labs/megapay/commit/c61dfd824a532512703c207c464954b51dbcce5a))
--- ---
## [0.0.2](https://github.com/telecart-labs/telecart/compare/v0.0.1+a26c8ba...v0.0.2) (2025-07-10) ## [0.0.2](https://github.com/megapay-labs/megapay/compare/v0.0.1+a26c8ba...v0.0.2) (2025-07-10)
### Bug Fixes ### Bug Fixes
* Add CORS headers, make ci builds as preleases ([551535](https://github.com/telecart-labs/telecart/commit/55153531fb4899d0f3e699b70231d32290800ee2)) * Add CORS headers, make ci builds as preleases ([551535](https://github.com/megapay-labs/megapay/commit/55153531fb4899d0f3e699b70231d32290800ee2))
* Correct controller class ([5af66d](https://github.com/telecart-labs/telecart/commit/5af66d228a3defbc6f0b4fd15a9e2a3c192bf41d)) * Correct controller class ([5af66d](https://github.com/megapay-labs/megapay/commit/5af66d228a3defbc6f0b4fd15a9e2a3c192bf41d))
--- ---
## [0.0.1+a26c8ba](https://github.com/telecart-labs/telecart/compare/v0.0.1...v0.0.1+a26c8ba) (2025-07-10) ## [0.0.1+a26c8ba](https://github.com/megapay-labs/megapay/compare/v0.0.1...v0.0.1+a26c8ba) (2025-07-10)
### Bug Fixes ### Bug Fixes
* Add CORS headers, make ci builds as preleases ([551535](https://github.com/telecart-labs/telecart/commit/55153531fb4899d0f3e699b70231d32290800ee2)) * Add CORS headers, make ci builds as preleases ([551535](https://github.com/megapay-labs/megapay/commit/55153531fb4899d0f3e699b70231d32290800ee2))
* Correct controller class ([5af66d](https://github.com/telecart-labs/telecart/commit/5af66d228a3defbc6f0b4fd15a9e2a3c192bf41d)) * Correct controller class ([5af66d](https://github.com/megapay-labs/megapay/commit/5af66d228a3defbc6f0b4fd15a9e2a3c192bf41d))
* Move files to the correct folder ([9735d4](https://github.com/telecart-labs/telecart/commit/9735d48957b7d9947be5a1be18edba8aebc45531)) * Move files to the correct folder ([9735d4](https://github.com/megapay-labs/megapay/commit/9735d48957b7d9947be5a1be18edba8aebc45531))
--- ---
## [0.0.1](https://github.com/telecart-labs/telecart/compare/c3664025ba6b608920a0182799102a207980d7be...v0.0.1) (2025-07-10) ## [0.0.1](https://github.com/megapay-labs/megapay/compare/c3664025ba6b608920a0182799102a207980d7be...v0.0.1) (2025-07-10)
### Features ### Features
* WIP ([846fa6](https://github.com/telecart-labs/telecart/commit/846fa64fb4db9760c4264179098c43e7f53b557c)) * WIP ([846fa6](https://github.com/megapay-labs/megapay/commit/846fa64fb4db9760c4264179098c43e7f53b557c))
--- ---

View File

@@ -42,7 +42,7 @@ dev-spa:
dev-admin: dev-admin:
rm -rf module/oc_telegram_shop/upload/admin/view/javascript && \ rm -rf module/oc_telegram_shop/upload/admin/view/javascript && \
rm -rf module/oc_telegram_shop/upload/system/library/oc_telegram_shop && \ rm -rf module/oc_telegram_shop/upload/system/library/oc_telegram_shop && \
rm -rf src/upload/admin/view/javascript/telecart && \ rm -rf src/upload/admin/view/javascript/megapay && \
cd frontend/admin && npm run dev cd frontend/admin && npm run dev
lint: lint:
@@ -70,8 +70,8 @@ test-coverage:
docker compose exec -w /module/oc_telegram_shop/upload/oc_telegram_shop web bash -c "./vendor/bin/phpunit --coverage-html coverage tests/" docker compose exec -w /module/oc_telegram_shop/upload/oc_telegram_shop web bash -c "./vendor/bin/phpunit --coverage-html coverage tests/"
phar: phar:
docker build -t telecart_local_build -f ./deployment/build.dockerfile . && \ docker build -t megapay_local_build -f ./deployment/build.dockerfile . && \
docker run -v "./src/upload/system/library/oc_telegram_shop:/build" telecart_local_build sh -c 'sh /scripts/build_phar.sh' docker run -v "./src/upload/system/library/oc_telegram_shop:/build" megapay_local_build sh -c 'sh /scripts/build_phar.sh'
cli: cli:
docker compose exec -w /module/oc_telegram_shop/upload web bash -c "/usr/local/bin/php cli.php $(ARGS)" docker compose exec -w /module/oc_telegram_shop/upload web bash -c "/usr/local/bin/php cli.php $(ARGS)"

View File

@@ -1,11 +1,11 @@
APP_DEBUG=true APP_DEBUG=true
PULSE_API_HOST=https://pulse.telecart.pro/api/ PULSE_API_HOST=https://pulse.megapay.pro/api/
PULSE_HEARTBEAT_SECRET=c5261f5d-529e-45ad-a69c-9778b755b7cb PULSE_HEARTBEAT_SECRET=c5261f5d-529e-45ad-a69c-9778b755b7cb
TELECART_CACHE_DRIVER=redis MEGAPAY_CACHE_DRIVER=redis
#TELECART_REDIS_HOST=redis #MEGAPAY_REDIS_HOST=redis
#TELECART_REDIS_PORT=6379 #MEGAPAY_REDIS_PORT=6379
#TELECART_REDIS_DATABASE=0 #MEGAPAY_REDIS_DATABASE=0
SENTRY_ENABLED=false SENTRY_ENABLED=false
SENTRY_DSN= SENTRY_DSN=

View File

@@ -1,10 +1,10 @@
APP_DEBUG=false APP_DEBUG=false
PULSE_API_HOST=https://pulse.telecart.pro/api/ PULSE_API_HOST=https://pulse.megapay.pro/api/
PULSE_HEARTBEAT_SECRET=c5261f5d-529e-45ad-a69c-9778b755b7cb PULSE_HEARTBEAT_SECRET=c5261f5d-529e-45ad-a69c-9778b755b7cb
TELECART_CACHE_DRIVER=mysql MEGAPAY_CACHE_DRIVER=mysql
TELECART_REDIS_HOST=redis MEGAPAY_REDIS_HOST=redis
TELECART_REDIS_PORT=6379 MEGAPAY_REDIS_PORT=6379
TELECART_REDIS_DATABASE=0 MEGAPAY_REDIS_DATABASE=0
SENTRY_ENABLED=false SENTRY_ENABLED=false
SENTRY_DSN= SENTRY_DSN=

View File

@@ -10,7 +10,7 @@ use Openguru\OpenCartFramework\ImageTool\ImageToolServiceProvider;
use Openguru\OpenCartFramework\QueryBuilder\QueryBuilderServiceProvider; use Openguru\OpenCartFramework\QueryBuilder\QueryBuilderServiceProvider;
use Openguru\OpenCartFramework\Router\RouteServiceProvider; use Openguru\OpenCartFramework\Router\RouteServiceProvider;
use Openguru\OpenCartFramework\Support\Arr; use Openguru\OpenCartFramework\Support\Arr;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartPulseServiceProvider; use Openguru\OpenCartFramework\MegaPayPulse\MegaPayPulseServiceProvider;
use Openguru\OpenCartFramework\Scheduler\SchedulerServiceProvider; use Openguru\OpenCartFramework\Scheduler\SchedulerServiceProvider;
use Openguru\OpenCartFramework\Telegram\TelegramServiceProvider; use Openguru\OpenCartFramework\Telegram\TelegramServiceProvider;
use Openguru\OpenCartFramework\Telegram\TelegramValidateInitDataMiddleware; use Openguru\OpenCartFramework\Telegram\TelegramValidateInitDataMiddleware;
@@ -34,7 +34,7 @@ class ApplicationFactory
TelegramServiceProvider::class, TelegramServiceProvider::class,
SchedulerServiceProvider::class, SchedulerServiceProvider::class,
ValidatorServiceProvider::class, ValidatorServiceProvider::class,
TeleCartPulseServiceProvider::class, MegaPayPulseServiceProvider::class,
ImageToolServiceProvider::class, ImageToolServiceProvider::class,
]) ])
->withMiddlewares([ ->withMiddlewares([

View File

@@ -32,9 +32,9 @@ class ETLHandler
COALESCE(( COALESCE((
SELECT MAX(date_modified) SELECT MAX(date_modified)
FROM oc_order as o FROM oc_order as o
where o.customer_id = telecart_customers.oc_customer_id where o.customer_id = megapay_customers.oc_customer_id
), 0), ), 0),
telecart_customers.updated_at megapay_customers.updated_at
) )
'; ';
} }
@@ -44,7 +44,7 @@ class ETLHandler
$lastUpdatedAtSql = $this->getLastUpdatedAtSql(); $lastUpdatedAtSql = $this->getLastUpdatedAtSql();
return $this->builder->newQuery() return $this->builder->newQuery()
->from('telecart_customers') ->from('megapay_customers')
->where('allows_write_to_pm', '=', 1) ->where('allows_write_to_pm', '=', 1)
->when($updatedAt !== null, function (Builder $builder) use ($lastUpdatedAtSql, $updatedAt) { ->when($updatedAt !== null, function (Builder $builder) use ($lastUpdatedAtSql, $updatedAt) {
$builder->where(new RawExpression($lastUpdatedAtSql), '>=', $updatedAt); $builder->where(new RawExpression($lastUpdatedAtSql), '>=', $updatedAt);
@@ -101,7 +101,7 @@ class ETLHandler
'username', 'username',
'photo_url', 'photo_url',
'telegram_user_id' => 'tg_user_id', 'telegram_user_id' => 'tg_user_id',
'telecart_customers.oc_customer_id', 'megapay_customers.oc_customer_id',
'is_premium', 'is_premium',
'last_seen_at', 'last_seen_at',
'orders_count' => 'orders_count_total', 'orders_count' => 'orders_count_total',
@@ -110,14 +110,14 @@ class ETLHandler
'( '(
SELECT MIN(date_added) SELECT MIN(date_added)
FROM oc_order FROM oc_order
WHERE oc_order.customer_id = telecart_customers.oc_customer_id WHERE oc_order.customer_id = megapay_customers.oc_customer_id
) AS first_order_date' ) AS first_order_date'
), ),
new RawExpression( new RawExpression(
'( '(
SELECT MAX(date_added) SELECT MAX(date_added)
FROM oc_order FROM oc_order
WHERE oc_order.customer_id = telecart_customers.oc_customer_id WHERE oc_order.customer_id = megapay_customers.oc_customer_id
) AS last_order_date' ) AS last_order_date'
), ),
new RawExpression( new RawExpression(
@@ -127,7 +127,7 @@ class ETLHandler
FROM FROM
oc_order oc_order
WHERE WHERE
oc_order.customer_id = telecart_customers.oc_customer_id oc_order.customer_id = megapay_customers.oc_customer_id
AND oc_order.order_status_id IN ($successOrderStatusIds) AND oc_order.order_status_id IN ($successOrderStatusIds)
), 0) AS total_spent" ), 0) AS total_spent"
), ),
@@ -138,7 +138,7 @@ class ETLHandler
FROM FROM
oc_order oc_order
WHERE WHERE
oc_order.customer_id = telecart_customers.oc_customer_id oc_order.customer_id = megapay_customers.oc_customer_id
AND oc_order.order_status_id IN ($successOrderStatusIds) AND oc_order.order_status_id IN ($successOrderStatusIds)
), 0) AS orders_count_success" ), 0) AS orders_count_success"
), ),

View File

@@ -32,7 +32,7 @@ class FormsHandler
} }
$form = $this->builder->newQuery() $form = $this->builder->newQuery()
->from('telecart_forms') ->from('megapay_forms')
->where('alias', '=', $alias) ->where('alias', '=', $alias)
->firstOrNull(); ->firstOrNull();

View File

@@ -4,12 +4,12 @@ declare(strict_types=1);
namespace App\Handlers; namespace App\Handlers;
use App\Services\TelecartCustomerService; use App\Services\MegapayCustomerService;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
use Openguru\OpenCartFramework\Http\Request; use Openguru\OpenCartFramework\Http\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Openguru\OpenCartFramework\Support\Arr; use Openguru\OpenCartFramework\Support\Arr;
use Openguru\OpenCartFramework\TeleCartPulse\TrackingIdGenerator; use Openguru\OpenCartFramework\MegaPayPulse\TrackingIdGenerator;
use Openguru\OpenCartFramework\Telegram\Enums\TelegramHeader; use Openguru\OpenCartFramework\Telegram\Enums\TelegramHeader;
use Openguru\OpenCartFramework\Telegram\Exceptions\DecodeTelegramInitDataException; use Openguru\OpenCartFramework\Telegram\Exceptions\DecodeTelegramInitDataException;
use Openguru\OpenCartFramework\Telegram\TelegramInitDataDecoder; use Openguru\OpenCartFramework\Telegram\TelegramInitDataDecoder;
@@ -19,12 +19,12 @@ use Throwable;
class TelegramCustomerHandler class TelegramCustomerHandler
{ {
private TelecartCustomerService $telegramCustomerService; private MegapayCustomerService $telegramCustomerService;
private LoggerInterface $logger; private LoggerInterface $logger;
private TelegramInitDataDecoder $initDataDecoder; private TelegramInitDataDecoder $initDataDecoder;
public function __construct( public function __construct(
TelecartCustomerService $telegramCustomerService, MegapayCustomerService $telegramCustomerService,
LoggerInterface $logger, LoggerInterface $logger,
TelegramInitDataDecoder $initDataDecoder TelegramInitDataDecoder $initDataDecoder
) { ) {

View File

@@ -5,8 +5,8 @@ declare(strict_types=1);
namespace App\Handlers; namespace App\Handlers;
use Openguru\OpenCartFramework\Http\Request; use Openguru\OpenCartFramework\Http\Request;
use Openguru\OpenCartFramework\TeleCartPulse\PulseIngestException; use Openguru\OpenCartFramework\MegaPayPulse\PulseIngestException;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartPulseService; use Openguru\OpenCartFramework\MegaPayPulse\MegaPayPulseService;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@@ -14,14 +14,14 @@ use Throwable;
class TelemetryHandler class TelemetryHandler
{ {
private TeleCartPulseService $teleCartPulseService; private MegaPayPulseService $megaPayPulseService;
private LoggerInterface $logger; private LoggerInterface $logger;
public function __construct( public function __construct(
TeleCartPulseService $teleCartPulseService, MegaPayPulseService $megaPayPulseService,
LoggerInterface $logger LoggerInterface $logger
) { ) {
$this->teleCartPulseService = $teleCartPulseService; $this->megaPayPulseService = $megaPayPulseService;
$this->logger = $logger; $this->logger = $logger;
} }
@@ -30,7 +30,7 @@ class TelemetryHandler
*/ */
public function ingest(Request $request): JsonResponse public function ingest(Request $request): JsonResponse
{ {
$this->teleCartPulseService->handleIngest($request->json()); $this->megaPayPulseService->handleIngest($request->json());
return new JsonResponse([], Response::HTTP_NO_CONTENT); return new JsonResponse([], Response::HTTP_NO_CONTENT);
} }
@@ -38,9 +38,9 @@ class TelemetryHandler
public function heartbeat(): JsonResponse public function heartbeat(): JsonResponse
{ {
try { try {
$this->teleCartPulseService->handleHeartbeat(); $this->megaPayPulseService->handleHeartbeat();
} catch (Throwable $e) { } catch (Throwable $e) {
$this->logger->warning('TeleCart Pulse Heartbeat failed: ' . $e->getMessage(), ['exception' => $e]); $this->logger->warning('MegaPay Pulse Heartbeat failed: ' . $e->getMessage(), ['exception' => $e]);
} }
return new JsonResponse(['status' => 'ok']); return new JsonResponse(['status' => 'ok']);

View File

@@ -7,12 +7,12 @@ namespace App\Models;
use Carbon\Carbon; use Carbon\Carbon;
use Openguru\OpenCartFramework\QueryBuilder\Builder; use Openguru\OpenCartFramework\QueryBuilder\Builder;
use Openguru\OpenCartFramework\QueryBuilder\Connections\ConnectionInterface; use Openguru\OpenCartFramework\QueryBuilder\Connections\ConnectionInterface;
use Openguru\OpenCartFramework\TeleCartPulse\TrackingIdGenerator; use Openguru\OpenCartFramework\MegaPayPulse\TrackingIdGenerator;
use RuntimeException; use RuntimeException;
class TelegramCustomer class TelegramCustomer
{ {
private const TABLE_NAME = 'telecart_customers'; private const TABLE_NAME = 'megapay_customers';
private ConnectionInterface $database; private ConnectionInterface $database;
private Builder $builder; private Builder $builder;

View File

@@ -44,7 +44,7 @@ class AppServiceProvider extends ServiceProvider
$registry->addCommand( $registry->addCommand(
'start', 'start',
StartCommand::class, StartCommand::class,
'Базовая команда Telegram бота. Присылает ссылку на открытие Telecart магазина.' 'Базовая команда Telegram бота. Присылает ссылку на открытие Megapay магазина.'
); );
} }

View File

@@ -17,7 +17,7 @@ class OcCustomerService
$this->database = $database; $this->database = $database;
} }
public function create(array $orderData, ?int $telecartCustomerId): ?int public function create(array $orderData, ?int $megapayCustomerId): ?int
{ {
$customerData = [ $customerData = [
'customer_group_id' => $orderData['customer_group_id'], 'customer_group_id' => $orderData['customer_group_id'],
@@ -41,10 +41,10 @@ class OcCustomerService
$this->database->insert(db_table('customer'), $customerData); $this->database->insert(db_table('customer'), $customerData);
$lastInsertId = $this->database->lastInsertId(); $lastInsertId = $this->database->lastInsertId();
if ($telecartCustomerId) { if ($megapayCustomerId) {
$this->builder $this->builder
->where('id', '=', $telecartCustomerId) ->where('id', '=', $megapayCustomerId)
->update('telecart_customers', [ ->update('megapay_customers', [
'oc_customer_id' => $lastInsertId, 'oc_customer_id' => $lastInsertId,
]); ]);
} }
@@ -52,15 +52,15 @@ class OcCustomerService
return $lastInsertId; return $lastInsertId;
} }
public function findByTelecartCustomerId(int $telegramCustomerId): ?array public function findByMegapayCustomerId(int $telegramCustomerId): ?array
{ {
return $this->builder->newQuery() return $this->builder->newQuery()
->select(['oc_customers.*']) ->select(['oc_customers.*'])
->from(db_table('customer'), 'oc_customers') ->from(db_table('customer'), 'oc_customers')
->join('telecart_customers', function (JoinClause $join) { ->join('megapay_customers', function (JoinClause $join) {
$join->on('telecart_customers.oc_customer_id', '=', 'oc_customers.customer_id'); $join->on('megapay_customers.oc_customer_id', '=', 'oc_customers.customer_id');
}) })
->where('telecart_customers.id', '=', $telegramCustomerId) ->where('megapay_customers.id', '=', $telegramCustomerId)
->firstOrNull(); ->firstOrNull();
} }
@@ -73,12 +73,12 @@ class OcCustomerService
->firstOrNull(); ->firstOrNull();
} }
public function findOrCreateByTelecartCustomerId(int $telecartCustomerId, array $orderData): ?array public function findOrCreateByMegapayCustomerId(int $megapayCustomerId, array $orderData): ?array
{ {
$ocCustomer = $this->findByTelecartCustomerId($telecartCustomerId); $ocCustomer = $this->findByMegapayCustomerId($megapayCustomerId);
if (! $ocCustomer) { if (! $ocCustomer) {
$ocCustomerId = $this->create($orderData, $telecartCustomerId); $ocCustomerId = $this->create($orderData, $megapayCustomerId);
return $this->findById($ocCustomerId); return $this->findById($ocCustomerId);
} }

View File

@@ -23,7 +23,7 @@ class OrderCreateService
private SettingsService $settings; private SettingsService $settings;
private TelegramService $telegramService; private TelegramService $telegramService;
private LoggerInterface $logger; private LoggerInterface $logger;
private TelecartCustomerService $telecartCustomerService; private MegapayCustomerService $megapayCustomerService;
private OcCustomerService $ocCustomerService; private OcCustomerService $ocCustomerService;
private OrderMetaService $orderMetaService; private OrderMetaService $orderMetaService;
@@ -34,7 +34,7 @@ class OrderCreateService
SettingsService $settings, SettingsService $settings,
TelegramService $telegramService, TelegramService $telegramService,
LoggerInterface $logger, LoggerInterface $logger,
TelecartCustomerService $telegramCustomerService, MegapayCustomerService $telegramCustomerService,
OcCustomerService $ocCustomerService, OcCustomerService $ocCustomerService,
OrderMetaService $orderMetaService OrderMetaService $orderMetaService
) { ) {
@@ -44,7 +44,7 @@ class OrderCreateService
$this->settings = $settings; $this->settings = $settings;
$this->telegramService = $telegramService; $this->telegramService = $telegramService;
$this->logger = $logger; $this->logger = $logger;
$this->telecartCustomerService = $telegramCustomerService; $this->megapayCustomerService = $telegramCustomerService;
$this->ocCustomerService = $ocCustomerService; $this->ocCustomerService = $ocCustomerService;
$this->orderMetaService = $orderMetaService; $this->orderMetaService = $orderMetaService;
} }
@@ -110,9 +110,9 @@ class OrderCreateService
try { try {
$this->database->beginTransaction(); $this->database->beginTransaction();
$telecartCustomer = $this->telecartCustomerService->saveOrUpdate($telegramUserdata); $megapayCustomer = $this->megapayCustomerService->saveOrUpdate($telegramUserdata);
$telecartCustomerId = (int) $telecartCustomer['id']; $megapayCustomerId = (int) $megapayCustomer['id'];
$ocCustomer = $this->ocCustomerService->findOrCreateByTelecartCustomerId($telecartCustomerId, $orderData); $ocCustomer = $this->ocCustomerService->findOrCreateByMegapayCustomerId($megapayCustomerId, $orderData);
$ocCustomerId = (int) $ocCustomer['customer_id']; $ocCustomerId = (int) $ocCustomer['customer_id'];
$orderData['customer_id'] = $ocCustomerId; $orderData['customer_id'] = $ocCustomerId;
@@ -131,10 +131,10 @@ class OrderCreateService
// Insert order meta data // Insert order meta data
if ($customOrderFields) { if ($customOrderFields) {
$this->orderMetaService->insert($orderId, $storeId, $customOrderFields, $telecartCustomerId); $this->orderMetaService->insert($orderId, $storeId, $customOrderFields, $megapayCustomerId);
} }
$this->telecartCustomerService->increaseOrdersCount($telecartCustomerId); $this->megapayCustomerService->increaseOrdersCount($megapayCustomerId);
$this->database->commitTransaction(); $this->database->commitTransaction();
} catch (Throwable $exception) { } catch (Throwable $exception) {

View File

@@ -13,15 +13,15 @@ class OrderMetaService
$this->connection = $connection; $this->connection = $connection;
} }
public function insert(int $orderId, int $storeId, array $fields, ?int $telecartCustomerId = null): void public function insert(int $orderId, int $storeId, array $fields, ?int $megapayCustomerId = null): void
{ {
$orderMeta = [ $orderMeta = [
'oc_order_id' => $orderId, 'oc_order_id' => $orderId,
'oc_store_id' => $storeId, 'oc_store_id' => $storeId,
'telecart_customer_id' => $telecartCustomerId, 'megapay_customer_id' => $megapayCustomerId,
'meta_data' => json_encode($fields, JSON_THROW_ON_ERROR), 'meta_data' => json_encode($fields, JSON_THROW_ON_ERROR),
]; ];
$this->connection->insert('telecart_order_meta', $orderMeta); $this->connection->insert('megapay_order_meta', $orderMeta);
} }
} }

View File

@@ -287,7 +287,7 @@ class ProductsService
$data['share'] = Str::htmlEntityEncode( $data['share'] = Str::htmlEntityEncode(
$this->oc->url->link('product/product', [ $this->oc->url->link('product/product', [
'product_id' => $productId, 'product_id' => $productId,
'utm_source' => 'telecart', 'utm_source' => 'megapay',
'utm_medium' => 'telegram', 'utm_medium' => 'telegram',
'utm_campaign' => 'product_click', 'utm_campaign' => 'product_click',
'utm_content' => 'product_button', 'utm_content' => 'product_button',

View File

@@ -11,7 +11,7 @@ use Openguru\OpenCartFramework\Support\Arr;
use Openguru\OpenCartFramework\Support\Utils; use Openguru\OpenCartFramework\Support\Utils;
use RuntimeException; use RuntimeException;
class TelecartCustomerService class MegapayCustomerService
{ {
private TelegramCustomer $telegramCustomer; private TelegramCustomer $telegramCustomer;
private Settings $settings; private Settings $settings;
@@ -87,7 +87,7 @@ class TelecartCustomerService
} }
/** /**
* Assign OpenCart Customer to Telegram User ID and return Telecart Customer ID if it exists. * Assign OpenCart Customer to Telegram User ID and return Megapay Customer ID if it exists.
* *
* @param $telegramUserId * @param $telegramUserId
* @param int $ocCustomerId * @param int $ocCustomerId
@@ -111,9 +111,9 @@ class TelecartCustomerService
return (int)$customer['id']; return (int)$customer['id'];
} }
public function increaseOrdersCount(int $telecartCustomerId): void public function increaseOrdersCount(int $megapayCustomerId): void
{ {
$this->telegramCustomer->increase($telecartCustomerId, 'orders_count'); $this->telegramCustomer->increase($megapayCustomerId, 'orders_count');
} }
/** /**

View File

@@ -42,7 +42,7 @@ class LinkCommand extends TelegramCommand
$greeting = $this->telegram->escapeTgSpecialCharacters( $greeting = $this->telegram->escapeTgSpecialCharacters(
<<<HTML <<<HTML
Это удобный инструмент, который поможет вам 📎 создать красивое Это удобный инструмент, который поможет вам 📎 создать красивое
сообщение с кнопкой для открытия вашего 🛒 Telecart магазина. сообщение с кнопкой для открытия вашего 🛒 Megapay магазина.
📌 Такое сообщение можно закрепить в канале или группе. 📌 Такое сообщение можно закрепить в канале или группе.
📤 Переслать клиентам в личные сообщения. 📤 Переслать клиентам в личные сообщения.
@@ -102,7 +102,7 @@ HTML;
MARKDOWN; MARKDOWN;
$text = $this->telegram->prepareMessage($template, [ $text = $this->telegram->prepareMessage($template, [
'{LINK}' => 'https://telecart-labs.github.io/docs/telegram/telegram/#direct-link', '{LINK}' => 'https://megapay-labs.github.io/docs/telegram/telegram/#direct-link',
]); ]);
$this->telegram->sendMessage($chatId, $text); $this->telegram->sendMessage($chatId, $text);

View File

@@ -12,7 +12,7 @@ use Openguru\OpenCartFramework\ImageTool\ImageToolServiceProvider;
use Openguru\OpenCartFramework\QueryBuilder\QueryBuilderServiceProvider; use Openguru\OpenCartFramework\QueryBuilder\QueryBuilderServiceProvider;
use Openguru\OpenCartFramework\Router\RouteServiceProvider; use Openguru\OpenCartFramework\Router\RouteServiceProvider;
use Openguru\OpenCartFramework\Support\Arr; use Openguru\OpenCartFramework\Support\Arr;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartPulseServiceProvider; use Openguru\OpenCartFramework\MegaPayPulse\MegaPayPulseServiceProvider;
use Openguru\OpenCartFramework\Telegram\TelegramServiceProvider; use Openguru\OpenCartFramework\Telegram\TelegramServiceProvider;
class ApplicationFactory class ApplicationFactory
@@ -33,7 +33,7 @@ class ApplicationFactory
AppServiceProvider::class, AppServiceProvider::class,
CacheServiceProvider::class, CacheServiceProvider::class,
TelegramServiceProvider::class, TelegramServiceProvider::class,
TeleCartPulseServiceProvider::class, MegaPayPulseServiceProvider::class,
ImageToolServiceProvider::class, ImageToolServiceProvider::class,
]); ]);
} }

View File

@@ -33,7 +33,7 @@ class FormsHandler
} }
$form = $this->builder->newQuery() $form = $this->builder->newQuery()
->from('telecart_forms') ->from('megapay_forms')
->where('alias', '=', $alias) ->where('alias', '=', $alias)
->firstOrNull(); ->firstOrNull();

View File

@@ -198,7 +198,7 @@ class LogsHandler
private function findLastLogsFileInDir(string $dir): ?string private function findLastLogsFileInDir(string $dir): ?string
{ {
$files = glob($dir . '/telecart-*.log'); $files = glob($dir . '/megapay-*.log');
return $files ? end($files) : null; return $files ? end($files) : null;
} }

View File

@@ -87,7 +87,7 @@ class SendMessageHandler
* Извлечь ID записи из запроса * Извлечь ID записи из запроса
* *
* @param Request $request HTTP запрос * @param Request $request HTTP запрос
* @return int ID записи в таблице telecart_customers * @return int ID записи в таблице megapay_customers
* @throws RuntimeException Если ID отсутствует или невалиден * @throws RuntimeException Если ID отсутствует или невалиден
*/ */
private function extractCustomerId(Request $request): int private function extractCustomerId(Request $request): int

View File

@@ -112,7 +112,7 @@ class SettingsHandler
$data['scheduled_jobs'] = $this->scheduledJob->all(); $data['scheduled_jobs'] = $this->scheduledJob->all();
$forms = $this->builder->newQuery() $forms = $this->builder->newQuery()
->from('telecart_forms') ->from('megapay_forms')
->get(); ->get();
if ($forms) { if ($forms) {
@@ -184,7 +184,7 @@ class SettingsHandler
$schema = json_encode($form['schema'], JSON_THROW_ON_ERROR); $schema = json_encode($form['schema'], JSON_THROW_ON_ERROR);
$this->builder->newQuery() $this->builder->newQuery()
->where('alias', '=', $form['alias']) ->where('alias', '=', $form['alias'])
->update('telecart_forms', [ ->update('megapay_forms', [
'friendly_name' => $form['friendly_name'], 'friendly_name' => $form['friendly_name'],
'is_custom' => $form['is_custom'], 'is_custom' => $form['is_custom'],
'schema' => $schema, 'schema' => $schema,
@@ -267,7 +267,7 @@ class SettingsHandler
$info['MySQL Version'] = 'Error: ' . $e->getMessage(); $info['MySQL Version'] = 'Error: ' . $e->getMessage();
} }
$cacheDriver = env('TELECART_CACHE_DRIVER', 'mysql'); $cacheDriver = env('MEGAPAY_CACHE_DRIVER', 'mysql');
$cacheClass = get_class($this->cache); $cacheClass = get_class($this->cache);
$info['Cache Driver'] = $cacheDriver . ' (' . basename(str_replace('\\', '/', $cacheClass)) . ')'; $info['Cache Driver'] = $cacheDriver . ' (' . basename(str_replace('\\', '/', $cacheClass)) . ')';

View File

@@ -30,12 +30,12 @@ class StatsHandler
new RawExpression('SUM(orders.total) AS orders_total_amount'), new RawExpression('SUM(orders.total) AS orders_total_amount'),
]) ])
->from(db_table('order'), 'orders') ->from(db_table('order'), 'orders')
->join('telecart_customers', function (JoinClause $join) { ->join('megapay_customers', function (JoinClause $join) {
$join->on('orders.customer_id', '=', 'telecart_customers.oc_customer_id'); $join->on('orders.customer_id', '=', 'megapay_customers.oc_customer_id');
}) })
->join('telecart_order_meta', function (JoinClause $join) { ->join('megapay_order_meta', function (JoinClause $join) {
$join->on('orders.order_id', '=', 'telecart_order_meta.oc_order_id') $join->on('orders.order_id', '=', 'megapay_order_meta.oc_order_id')
->whereRaw('orders.store_id = telecart_order_meta.oc_store_id'); ->whereRaw('orders.store_id = megapay_order_meta.oc_store_id');
}) })
->firstOrNull(); ->firstOrNull();
@@ -54,7 +54,7 @@ class StatsHandler
private function countCustomersCount(): int private function countCustomersCount(): int
{ {
return $this->builder->newQuery() return $this->builder->newQuery()
->from('telecart_customers') ->from('megapay_customers')
->count(); ->count();
} }
} }

View File

@@ -3,17 +3,17 @@
namespace Bastion\Handlers; namespace Bastion\Handlers;
use Openguru\OpenCartFramework\Cache\CacheInterface; use Openguru\OpenCartFramework\Cache\CacheInterface;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartEvent; use Openguru\OpenCartFramework\MegaPayPulse\MegaPayEvent;
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\JsonResponse;
class TeleCartPulseStatsHandler class MegaPayPulseStatsHandler
{ {
private TeleCartEvent $eventModel; private MegaPayEvent $eventModel;
private CacheInterface $cache; private CacheInterface $cache;
private const CACHE_KEY = 'telecart_pulse_stats'; private const CACHE_KEY = 'megapay_pulse_stats';
private const CACHE_TTL = 3600; // 1 час private const CACHE_TTL = 3600; // 1 час
public function __construct(TeleCartEvent $eventModel, CacheInterface $cache) public function __construct(MegaPayEvent $eventModel, CacheInterface $cache)
{ {
$this->eventModel = $eventModel; $this->eventModel = $eventModel;
$this->cache = $cache; $this->cache = $cache;

View File

@@ -12,7 +12,7 @@ use Openguru\OpenCartFramework\Support\Arr;
class TelegramCustomersHandler class TelegramCustomersHandler
{ {
private const TABLE_NAME = 'telecart_customers'; private const TABLE_NAME = 'megapay_customers';
private const DEFAULT_PAGE = 1; private const DEFAULT_PAGE = 1;
private const DEFAULT_ROWS = 20; private const DEFAULT_ROWS = 20;
private const DEFAULT_SORT_FIELD = 'last_seen_at'; private const DEFAULT_SORT_FIELD = 'last_seen_at';

View File

@@ -6,15 +6,15 @@ use GuzzleHttp\Exception\GuzzleException;
use Openguru\OpenCartFramework\Cache\CacheInterface; use Openguru\OpenCartFramework\Cache\CacheInterface;
use Openguru\OpenCartFramework\Config\Settings; use Openguru\OpenCartFramework\Config\Settings;
use Openguru\OpenCartFramework\Scheduler\TaskInterface; use Openguru\OpenCartFramework\Scheduler\TaskInterface;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartEvent; use Openguru\OpenCartFramework\MegaPayPulse\MegaPayEvent;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartPulseEventsSender; use Openguru\OpenCartFramework\MegaPayPulse\MegaPayPulseEventsSender;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Throwable; use Throwable;
class TeleCartPulseSendEventsTask implements TaskInterface class MegaPayPulseSendEventsTask implements TaskInterface
{ {
private TeleCartEvent $eventModel; private MegaPayEvent $eventModel;
private TeleCartPulseEventsSender $eventsSender; private MegaPayPulseEventsSender $eventsSender;
private LoggerInterface $logger; private LoggerInterface $logger;
private CacheInterface $cache; private CacheInterface $cache;
private Settings $settings; private Settings $settings;
@@ -23,8 +23,8 @@ class TeleCartPulseSendEventsTask implements TaskInterface
public function __construct( public function __construct(
Settings $settings, Settings $settings,
TeleCartEvent $eventModel, MegaPayEvent $eventModel,
TeleCartPulseEventsSender $eventsSender, MegaPayPulseEventsSender $eventsSender,
LoggerInterface $logger, LoggerInterface $logger,
CacheInterface $cache CacheInterface $cache
) { ) {
@@ -82,7 +82,7 @@ class TeleCartPulseSendEventsTask implements TaskInterface
'failed' => $failed, 'failed' => $failed,
]); ]);
} catch (Throwable $e) { } catch (Throwable $e) {
$this->logger->error("TeleCartPulseSendEventsTask failed: " . $e->getMessage(), [ $this->logger->error("MegaPayPulseSendEventsTask failed: " . $e->getMessage(), [
'exception' => $e, 'exception' => $e,
]); ]);
} finally { } finally {
@@ -117,8 +117,8 @@ class TeleCartPulseSendEventsTask implements TaskInterface
return true; return true;
} }
// TeleCart Pulse не вернул подтверждение // MegaPay Pulse не вернул подтверждение
$errorReason = 'No confirmation received from TeleCart Pulse'; $errorReason = 'No confirmation received from MegaPay Pulse';
$this->handleFailedAttempt($eventId, $attemptsCount, $errorReason); $this->handleFailedAttempt($eventId, $attemptsCount, $errorReason);
} catch (GuzzleException $e) { } catch (GuzzleException $e) {
// Ошибка HTTP запроса // Ошибка HTTP запроса
@@ -170,6 +170,6 @@ class TeleCartPulseSendEventsTask implements TaskInterface
*/ */
private function clearStatsCache(): void private function clearStatsCache(): void
{ {
$this->cache->delete('telecart_pulse_stats'); $this->cache->delete('megapay_pulse_stats');
} }
} }

View File

@@ -23,8 +23,8 @@ class SettingsService
public function update(array $data): void public function update(array $data): void
{ {
$this->connection->transaction(function () use ($data) { $this->connection->transaction(function () use ($data) {
$this->registry->model_setting_setting->editSetting('module_telecart', [ $this->registry->model_setting_setting->editSetting('module_megapay', [
'module_telecart_settings' => $data, 'module_megapay_settings' => $data,
]); ]);
$this->registry->model_setting_setting->editSetting('module_tgshop', [ $this->registry->model_setting_setting->editSetting('module_tgshop', [

View File

@@ -8,7 +8,7 @@ use Bastion\Handlers\LogsHandler;
use Bastion\Handlers\SendMessageHandler; use Bastion\Handlers\SendMessageHandler;
use Bastion\Handlers\SettingsHandler; use Bastion\Handlers\SettingsHandler;
use Bastion\Handlers\StatsHandler; use Bastion\Handlers\StatsHandler;
use Bastion\Handlers\TeleCartPulseStatsHandler; use Bastion\Handlers\MegaPayPulseStatsHandler;
use Bastion\Handlers\TelegramCustomersHandler; use Bastion\Handlers\TelegramCustomersHandler;
use Bastion\Handlers\TelegramHandler; use Bastion\Handlers\TelegramHandler;
@@ -33,5 +33,5 @@ return [
'sendMessageToCustomer' => [SendMessageHandler::class, 'sendMessage'], 'sendMessageToCustomer' => [SendMessageHandler::class, 'sendMessage'],
'testTgMessage' => [TelegramHandler::class, 'testTgMessage'], 'testTgMessage' => [TelegramHandler::class, 'testTgMessage'],
'tgGetMe' => [TelegramHandler::class, 'tgGetMe'], 'tgGetMe' => [TelegramHandler::class, 'tgGetMe'],
'getTeleCartPulseStats' => [TeleCartPulseStatsHandler::class, 'getStats'], 'getMegaPayPulseStats' => [MegaPayPulseStatsHandler::class, 'getStats'],
]; ];

View File

@@ -42,7 +42,7 @@ $prefix = DB_PREFIX;
$dsn = "mysql:host=$host;port=$port;dbname=$dbName"; $dsn = "mysql:host=$host;port=$port;dbname=$dbName";
$pdo = new PDO($dsn, $username, $password); $pdo = new PDO($dsn, $username, $password);
$connection = new MySqlConnection($pdo); $connection = new MySqlConnection($pdo);
$raw = $connection->select("SELECT value FROM `{$prefix}setting` WHERE `key` = 'module_telecart_settings'"); $raw = $connection->select("SELECT value FROM `{$prefix}setting` WHERE `key` = 'module_megapay_settings'");
$timezone = $connection->select("SELECT value FROM `{$prefix}setting` WHERE `key` = 'config_timezone'"); $timezone = $connection->select("SELECT value FROM `{$prefix}setting` WHERE `key` = 'config_timezone'");
$timezone = $timezone[0]['value'] ?? 'UTC'; $timezone = $timezone[0]['value'] ?? 'UTC';
$json = json_decode($raw[0]['value'], true, 512, JSON_THROW_ON_ERROR); $json = json_decode($raw[0]['value'], true, 512, JSON_THROW_ON_ERROR);
@@ -79,10 +79,10 @@ $items = Arr::mergeArraysRecursively($json, [
], ],
]); ]);
$logger = new Logger('TeleCart_CLI', [], [], new DateTimeZone('UTC')); $logger = new Logger('MegaPay_CLI', [], [], new DateTimeZone('UTC'));
$logger->pushHandler( $logger->pushHandler(
new RotatingFileHandler( new RotatingFileHandler(
DIR_LOGS . '/telecart.log', 14, $debug ? Logger::DEBUG : Logger::INFO DIR_LOGS . '/megapay.log', 14, $debug ? Logger::DEBUG : Logger::INFO
), ),
); );
@@ -90,7 +90,7 @@ $app = ApplicationFactory::create($items);
$app->setLogger($logger); $app->setLogger($logger);
$app->boot(); $app->boot();
$console = new Application('TeleCart', module_version()); $console = new Application('MegaPay', module_version());
$console->add($app->get(VersionCommand::class)); $console->add($app->get(VersionCommand::class));
$console->add($app->get(ScheduleRunCommand::class)); $console->add($app->get(ScheduleRunCommand::class));
$console->add($app->get(PulseSendEventsCommand::class)); $console->add($app->get(PulseSendEventsCommand::class));

View File

@@ -3,7 +3,7 @@
return [ return [
'app' => [ 'app' => [
'app_enabled' => true, 'app_enabled' => true,
'app_name' => 'Telecart', 'app_name' => 'Megapay',
'app_icon' => null, 'app_icon' => null,
"theme_light" => "light", "theme_light" => "light",
"theme_dark" => "dark", "theme_dark" => "dark",
@@ -104,15 +104,15 @@ HTML,
], ],
'cache' => [ 'cache' => [
'namespace' => 'telecart', 'namespace' => 'megapay',
'default_lifetime' => 60 * 60 * 24, 'default_lifetime' => 60 * 60 * 24,
'options' => [ 'options' => [
'db_table' => 'telecart_cache_items', 'db_table' => 'megapay_cache_items',
], ],
], ],
'paths' => [ 'paths' => [
'images_cache' => 'cache/telecart', 'images_cache' => 'cache/megapay',
], ],
'cron' => [ 'cron' => [

View File

@@ -10,7 +10,7 @@ use Openguru\OpenCartFramework\ImageTool\ImageToolServiceProvider;
use Openguru\OpenCartFramework\QueryBuilder\QueryBuilderServiceProvider; use Openguru\OpenCartFramework\QueryBuilder\QueryBuilderServiceProvider;
use Openguru\OpenCartFramework\Scheduler\SchedulerServiceProvider; use Openguru\OpenCartFramework\Scheduler\SchedulerServiceProvider;
use Openguru\OpenCartFramework\Support\Arr; use Openguru\OpenCartFramework\Support\Arr;
use Openguru\OpenCartFramework\TeleCartPulse\TeleCartPulseServiceProvider; use Openguru\OpenCartFramework\MegaPayPulse\MegaPayPulseServiceProvider;
use Openguru\OpenCartFramework\Telegram\TelegramServiceProvider; use Openguru\OpenCartFramework\Telegram\TelegramServiceProvider;
class ApplicationFactory class ApplicationFactory
@@ -28,7 +28,7 @@ class ApplicationFactory
AppServiceProvider::class, AppServiceProvider::class,
CacheServiceProvider::class, CacheServiceProvider::class,
TelegramServiceProvider::class, TelegramServiceProvider::class,
TeleCartPulseServiceProvider::class, MegaPayPulseServiceProvider::class,
SchedulerServiceProvider::class, SchedulerServiceProvider::class,
ImageToolServiceProvider::class, ImageToolServiceProvider::class,
]); ]);

View File

@@ -10,10 +10,10 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Console\Style\SymfonyStyle;
class CacheClearCommand extends TeleCartCommand class CacheClearCommand extends MegaPayCommand
{ {
protected static $defaultName = 'cache:clear'; protected static $defaultName = 'cache:clear';
protected static $defaultDescription = 'Очистка кеша модуля TeleCart'; protected static $defaultDescription = 'Очистка кеша модуля MegaPay';
private CacheInterface $cache; private CacheInterface $cache;
@@ -27,7 +27,7 @@ class CacheClearCommand extends TeleCartCommand
{ {
$io = new SymfonyStyle($input, $output); $io = new SymfonyStyle($input, $output);
$io->title('Очистка кеша модуля TeleCart'); $io->title('Очистка кеша модуля MegaPay');
try { try {
$this->cache->clear(); $this->cache->clear();

View File

@@ -8,7 +8,7 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Console\Style\SymfonyStyle;
class CustomerCountsCommand extends TeleCartCommand class CustomerCountsCommand extends MegaPayCommand
{ {
protected static $defaultName = 'customer:counts'; protected static $defaultName = 'customer:counts';
protected static $defaultDescription = 'Обновление счетчиков заказов для всех клиентов'; protected static $defaultDescription = 'Обновление счетчиков заказов для всех клиентов';
@@ -29,8 +29,8 @@ class CustomerCountsCommand extends TeleCartCommand
$io->writeln('Выполняется пересчёт счетчиков заказов...'); $io->writeln('Выполняется пересчёт счетчиков заказов...');
$sql = <<<SQL $sql = <<<SQL
update telecart_customers update megapay_customers
set orders_count = (select count(*) from oc_order where oc_order.customer_id = telecart_customers.oc_customer_id) set orders_count = (select count(*) from oc_order where oc_order.customer_id = megapay_customers.oc_customer_id)
where true; where true;
SQL; SQL;

View File

@@ -10,7 +10,7 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Console\Style\SymfonyStyle;
class ImagesCacheClearCommand extends TeleCartCommand class ImagesCacheClearCommand extends MegaPayCommand
{ {
protected static $defaultName = 'images:cache-clear'; protected static $defaultName = 'images:cache-clear';
protected static $defaultDescription = 'Очистка кеша изображений товаров'; protected static $defaultDescription = 'Очистка кеша изображений товаров';
@@ -31,7 +31,7 @@ class ImagesCacheClearCommand extends TeleCartCommand
// Получаем пути из конфига // Получаем пути из конфига
$imagesDir = $this->container->getConfigValue('paths.images'); $imagesDir = $this->container->getConfigValue('paths.images');
$cachePath = $this->container->getConfigValue('paths.images_cache', 'cache/telecart'); $cachePath = $this->container->getConfigValue('paths.images_cache', 'cache/megapay');
$cachePath = ltrim($cachePath, '/'); $cachePath = ltrim($cachePath, '/');
$fullCachePath = rtrim($imagesDir, '/') . '/' . $cachePath; $fullCachePath = rtrim($imagesDir, '/') . '/' . $cachePath;

View File

@@ -16,7 +16,7 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Console\Style\SymfonyStyle;
class ImagesWarmupCacheCommand extends TeleCartCommand class ImagesWarmupCacheCommand extends MegaPayCommand
{ {
protected static $defaultName = 'images:warmup'; protected static $defaultName = 'images:warmup';
protected static $defaultDescription = 'Прогрев кеша изображений товаров'; protected static $defaultDescription = 'Прогрев кеша изображений товаров';

View File

@@ -2,27 +2,27 @@
namespace Console\Commands; namespace Console\Commands;
use Bastion\ScheduledTasks\TeleCartPulseSendEventsTask; use Bastion\ScheduledTasks\MegaPayPulseSendEventsTask;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
class PulseSendEventsCommand extends TeleCartCommand class PulseSendEventsCommand extends MegaPayCommand
{ {
protected static $defaultName = 'pulse:send'; protected static $defaultName = 'pulse:send';
protected static $defaultDescription = 'Manually send pulse events ignoring schedule.'; protected static $defaultDescription = 'Manually send pulse events ignoring schedule.';
private TeleCartPulseSendEventsTask $teleCartPulseSendEventsTask; private MegaPayPulseSendEventsTask $megaPayPulseSendEventsTask;
public function __construct(TeleCartPulseSendEventsTask $teleCartPulseSendEventsTask) public function __construct(MegaPayPulseSendEventsTask $megaPayPulseSendEventsTask)
{ {
parent::__construct(); parent::__construct();
$this->teleCartPulseSendEventsTask = $teleCartPulseSendEventsTask; $this->megaPayPulseSendEventsTask = $megaPayPulseSendEventsTask;
} }
protected function execute(InputInterface $input, OutputInterface $output): int protected function execute(InputInterface $input, OutputInterface $output): int
{ {
$output->writeln('<info>Sending Pulse events.</info>'); $output->writeln('<info>Sending Pulse events.</info>');
$this->teleCartPulseSendEventsTask->execute(); $this->megaPayPulseSendEventsTask->execute();
return self::SUCCESS; return self::SUCCESS;
} }

View File

@@ -10,7 +10,7 @@ use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
class ScheduleRunCommand extends TeleCartCommand class ScheduleRunCommand extends MegaPayCommand
{ {
private SchedulerService $scheduler; private SchedulerService $scheduler;
private Settings $settings; private Settings $settings;
@@ -46,7 +46,7 @@ class ScheduleRunCommand extends TeleCartCommand
$output->writeln( $output->writeln(
sprintf( sprintf(
'[%s] <info>TeleCart Scheduler Running...</info>', '[%s] <info>MegaPay Scheduler Running...</info>',
Carbon::now()->toJSON(), Carbon::now()->toJSON(),
) )
); );

View File

@@ -4,7 +4,7 @@ namespace Console\Commands;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
abstract class TeleCartCommand extends Command abstract class MegaPayCommand extends Command
{ {
public function __construct() public function __construct()
{ {

View File

@@ -6,13 +6,13 @@ use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
class VersionCommand extends TeleCartCommand class VersionCommand extends MegaPayCommand
{ {
protected static $defaultName = 'version'; protected static $defaultName = 'version';
protected function execute(InputInterface $input, OutputInterface $output): int protected function execute(InputInterface $input, OutputInterface $output): int
{ {
$output->writeln('TeleCart Version: ' . module_version()); $output->writeln('MegaPay Version: ' . module_version());
return Command::SUCCESS; return Command::SUCCESS;
} }

View File

@@ -15,7 +15,7 @@ return new class extends Migration {
return; return;
} }
$newSettings = $opencart->model_setting_setting->getSetting('module_telecart'); $newSettings = $opencart->model_setting_setting->getSetting('module_megapay');
static $mapLegacyToNewSettings = [ static $mapLegacyToNewSettings = [
'module_tgshop_app_icon' => 'app.app_icon', 'module_tgshop_app_icon' => 'app.app_icon',
@@ -62,8 +62,8 @@ return new class extends Migration {
} }
} }
$opencart->model_setting_setting->editSetting('module_telecart', [ $opencart->model_setting_setting->editSetting('module_megapay', [
'module_telecart_settings' => $data, 'module_megapay_settings' => $data,
]); ]);
$this->logger->info('Выполнено обновление настроек с 1й версии модуля.'); $this->logger->info('Выполнено обновление настроек с 1й версии модуля.');

View File

@@ -6,7 +6,7 @@ return new class extends Migration {
public function up(): void public function up(): void
{ {
$sql = <<<SQL $sql = <<<SQL
CREATE TABLE IF NOT EXISTS `telecart_forms` ( CREATE TABLE IF NOT EXISTS `megapay_forms` (
`id` bigint(11) AUTO_INCREMENT PRIMARY KEY, `id` bigint(11) AUTO_INCREMENT PRIMARY KEY,
`alias` varchar(100) NOT NULL, `alias` varchar(100) NOT NULL,
`friendly_name` varchar(100) NOT NULL, `friendly_name` varchar(100) NOT NULL,

View File

@@ -8,7 +8,7 @@ return new class extends Migration {
{ {
$checkoutForm = json_encode(self::getCheckoutFormSchema(), JSON_THROW_ON_ERROR); $checkoutForm = json_encode(self::getCheckoutFormSchema(), JSON_THROW_ON_ERROR);
$this->database->insert('telecart_forms', [ $this->database->insert('megapay_forms', [
'alias' => 'checkout', 'alias' => 'checkout',
'friendly_name' => 'Оформление заказа', 'friendly_name' => 'Оформление заказа',
'schema' => $checkoutForm, 'schema' => $checkoutForm,

View File

@@ -5,7 +5,7 @@ use Openguru\OpenCartFramework\Migrations\Migration;
return new class extends Migration { return new class extends Migration {
public function up(): void public function up(): void
{ {
$tableName = 'telecart_customers'; $tableName = 'megapay_customers';
$sql = <<<SQL $sql = <<<SQL
CREATE TABLE IF NOT EXISTS `{$tableName}` ( CREATE TABLE IF NOT EXISTS `{$tableName}` (

View File

@@ -6,7 +6,7 @@ return new class extends Migration {
public function up(): void public function up(): void
{ {
$sql = <<<SQL $sql = <<<SQL
ALTER TABLE `telecart_customers` ALTER TABLE `megapay_customers`
ADD COLUMN `privacy_consented_at` TIMESTAMP NULL DEFAULT NULL AFTER `referral`; ADD COLUMN `privacy_consented_at` TIMESTAMP NULL DEFAULT NULL AFTER `referral`;
SQL; SQL;

View File

@@ -5,21 +5,21 @@ use Openguru\OpenCartFramework\Migrations\Migration;
return new class extends Migration { return new class extends Migration {
public function up(): void public function up(): void
{ {
$tableName = 'telecart_order_meta'; $tableName = 'megapay_order_meta';
$sql = <<<SQL $sql = <<<SQL
CREATE TABLE IF NOT EXISTS `{$tableName}` ( CREATE TABLE IF NOT EXISTS `{$tableName}` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`oc_order_id` INT(11) UNSIGNED NOT NULL, `oc_order_id` INT(11) UNSIGNED NOT NULL,
`oc_store_id` INT(11) UNSIGNED NOT NULL, `oc_store_id` INT(11) UNSIGNED NOT NULL,
`telecart_customer_id` INT(11) UNSIGNED DEFAULT NULL, `megapay_customer_id` INT(11) UNSIGNED DEFAULT NULL,
`meta_data` JSON DEFAULT NULL, `meta_data` JSON DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `unique_oc_order_id` (`oc_order_id`), UNIQUE KEY `unique_oc_order_id` (`oc_order_id`),
KEY `idx_oc_store_id` (`oc_store_id`), KEY `idx_oc_store_id` (`oc_store_id`),
KEY `idx_telecart_customer_id` (`telecart_customer_id`) KEY `idx_megapay_customer_id` (`megapay_customer_id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB; ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB;
SQL; SQL;

View File

@@ -6,7 +6,7 @@ return new class extends Migration {
public function up(): void public function up(): void
{ {
$sql = <<<SQL $sql = <<<SQL
ALTER TABLE `telecart_customers` ALTER TABLE `megapay_customers`
ADD COLUMN `orders_count` INT(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `referral`; ADD COLUMN `orders_count` INT(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `referral`;
SQL; SQL;

View File

@@ -6,7 +6,7 @@ return new class extends Migration {
public function up(): void public function up(): void
{ {
$sql = <<<SQL $sql = <<<SQL
ALTER TABLE `telecart_customers` ALTER TABLE `megapay_customers`
ADD COLUMN `tracking_id` VARCHAR(64) NOT NULL AFTER `oc_customer_id`; ADD COLUMN `tracking_id` VARCHAR(64) NOT NULL AFTER `oc_customer_id`;
SQL; SQL;

View File

@@ -5,7 +5,7 @@ use Openguru\OpenCartFramework\Migrations\Migration;
return new class extends Migration { return new class extends Migration {
public function up(): void public function up(): void
{ {
$tableName = 'telecart_events'; $tableName = 'megapay_events';
$sql = <<<SQL $sql = <<<SQL
CREATE TABLE IF NOT EXISTS `{$tableName}` ( CREATE TABLE IF NOT EXISTS `{$tableName}` (

View File

@@ -10,14 +10,14 @@ return new class extends Migration {
$opencart = $this->app->get(OcRegistryDecorator::class); $opencart = $this->app->get(OcRegistryDecorator::class);
$opencart->load->model('setting/setting'); $opencart->load->model('setting/setting');
$currentSettings = $opencart->model_setting_setting->getSetting('module_telecart'); $currentSettings = $opencart->model_setting_setting->getSetting('module_megapay');
if (! $currentSettings || ! isset($currentSettings['module_telecart_settings'])) { if (! $currentSettings || ! isset($currentSettings['module_megapay_settings'])) {
$this->logger->info("Settings not found in database, migration skipped"); $this->logger->info("Settings not found in database, migration skipped");
return; return;
} }
$allSettings = $currentSettings['module_telecart_settings']; $allSettings = $currentSettings['module_megapay_settings'];
// Проверяем наличие store.enable_store // Проверяем наличие store.enable_store
$enableStore = Arr::get($allSettings, 'store.enable_store'); $enableStore = Arr::get($allSettings, 'store.enable_store');
@@ -41,8 +41,8 @@ return new class extends Migration {
$this->logger->info("Removed store.enable_store from settings"); $this->logger->info("Removed store.enable_store from settings");
// Сохраняем обновленные настройки через OpenCart модель // Сохраняем обновленные настройки через OpenCart модель
$opencart->model_setting_setting->editSetting('module_telecart', [ $opencart->model_setting_setting->editSetting('module_megapay', [
'module_telecart_settings' => $allSettings, 'module_megapay_settings' => $allSettings,
]); ]);
$this->logger->info("Successfully migrated store.enable_store to product_interaction_mode and removed store.enable_store from settings"); $this->logger->info("Successfully migrated store.enable_store to product_interaction_mode and removed store.enable_store from settings");

View File

@@ -6,7 +6,7 @@ return new class extends Migration {
public function up(): void public function up(): void
{ {
$sql = <<<SQL $sql = <<<SQL
update telecart_customers update megapay_customers
set username = telegram_user_id set username = telegram_user_id
where username is null where username is null
SQL; SQL;

View File

@@ -6,7 +6,7 @@ return new class extends Migration {
public function up(): void public function up(): void
{ {
$sql = <<<SQL $sql = <<<SQL
ALTER TABLE `telecart_customers` ALTER TABLE `megapay_customers`
ADD COLUMN `store_id` INT NOT NULL DEFAULT 0 AFTER `oc_customer_id` ADD COLUMN `store_id` INT NOT NULL DEFAULT 0 AFTER `oc_customer_id`
SQL; SQL;

View File

@@ -6,7 +6,7 @@ return new class extends Migration {
public function up(): void public function up(): void
{ {
$sql = <<<SQL $sql = <<<SQL
CREATE TABLE IF NOT EXISTS `telecart_scheduled_jobs` ( CREATE TABLE IF NOT EXISTS `megapay_scheduled_jobs` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`task` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL, `task` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL,

View File

@@ -1,14 +1,14 @@
<?php <?php
use Bastion\ScheduledTasks\TeleCartPulseSendEventsTask; use Bastion\ScheduledTasks\MegaPayPulseSendEventsTask;
use Openguru\OpenCartFramework\Migrations\Migration; use Openguru\OpenCartFramework\Migrations\Migration;
return new class extends Migration { return new class extends Migration {
public function up(): void public function up(): void
{ {
$this->database->insert('telecart_scheduled_jobs', [ $this->database->insert('megapay_scheduled_jobs', [
'name' => 'telecart_pulse_send_events', 'name' => 'megapay_pulse_send_events',
'task' => TeleCartPulseSendEventsTask::class, 'task' => MegaPayPulseSendEventsTask::class,
'is_enabled' => 0, 'is_enabled' => 0,
'cron_expression' => '*/10 * * * *', 'cron_expression' => '*/10 * * * *',
'last_success_at' => null, 'last_success_at' => null,

View File

@@ -31,10 +31,10 @@ class CacheServiceProvider extends ServiceProvider
// Регистрация RedisAdapter для Redis кеша // Регистрация RedisAdapter для Redis кеша
$this->container->singleton(RedisAdapter::class, function (Container $container) { $this->container->singleton(RedisAdapter::class, function (Container $container) {
$host = env('TELECART_REDIS_HOST', '127.0.0.1'); $host = env('MEGAPAY_REDIS_HOST', '127.0.0.1');
$port = (int) env('TELECART_REDIS_PORT', 6379); $port = (int) env('MEGAPAY_REDIS_PORT', 6379);
$password = env('TELECART_REDIS_PASSWORD', null); $password = env('MEGAPAY_REDIS_PASSWORD', null);
$database = (int) env('TELECART_REDIS_DATABASE', 0); $database = (int) env('MEGAPAY_REDIS_DATABASE', 0);
$redisConfig = [ $redisConfig = [
'host' => $host, 'host' => $host,
@@ -56,7 +56,7 @@ class CacheServiceProvider extends ServiceProvider
// Регистрация CacheInterface с выбором драйвера // Регистрация CacheInterface с выбором драйвера
$this->container->singleton(CacheInterface::class, function (Container $container) { $this->container->singleton(CacheInterface::class, function (Container $container) {
$driver = env('TELECART_CACHE_DRIVER', 'mysql'); $driver = env('MEGAPAY_CACHE_DRIVER', 'mysql');
if ($driver === 'redis') { if ($driver === 'redis') {
return new SymfonyRedisCache($container->get(RedisAdapter::class)); return new SymfonyRedisCache($container->get(RedisAdapter::class));

View File

@@ -31,7 +31,7 @@ class ImageFactory
'format' => 'webp', 'format' => 'webp',
'quality' => 90, 'quality' => 90,
'no_image_path' => 'no_image.png', 'no_image_path' => 'no_image.png',
'cache_path' => 'cache/telecart', 'cache_path' => 'cache/megapay',
]; ];
public function __construct(string $imageDir, string $siteUrl, string $driver, array $options = []) public function __construct(string $imageDir, string $siteUrl, string $driver, array $options = [])
@@ -180,7 +180,7 @@ class ImageFactory
$filename .= '_' . substr(hash('SHA256', json_encode($this->modifications)), 0, 12); $filename .= '_' . substr(hash('SHA256', json_encode($this->modifications)), 0, 12);
} }
$cachePath = $this->options['cache_path'] ?? 'cache/telecart'; $cachePath = $this->options['cache_path'] ?? 'cache/megapay';
$cachePath = ltrim($cachePath, '/'); $cachePath = ltrim($cachePath, '/');
return $this->imageDir . '/' . $cachePath . '/' . $imagePath . $filename . '.' . $format; return $this->imageDir . '/' . $cachePath . '/' . $imagePath . $filename . '.' . $format;

View File

@@ -17,7 +17,7 @@ class ImageToolServiceProvider extends ServiceProvider
$container->getConfigValue('app.shop_base_url'), $container->getConfigValue('app.shop_base_url'),
$driver, $driver,
[ [
'cache_path' => $container->getConfigValue('paths.images_cache', 'cache/telecart'), 'cache_path' => $container->getConfigValue('paths.images_cache', 'cache/megapay'),
] ]
); );
}); });

View File

@@ -41,7 +41,7 @@ class MigratorService
private function getMigrationsTableName(): string private function getMigrationsTableName(): string
{ {
return 'telecart_migrations'; return 'megapay_migrations';
} }
private function ensureMigrationsTableExists(): void private function ensureMigrationsTableExists(): void

View File

@@ -10,7 +10,7 @@ use Openguru\OpenCartFramework\QueryBuilder\Builder;
class ScheduledJob class ScheduledJob
{ {
private const TABLE_NAME = 'telecart_scheduled_jobs'; private const TABLE_NAME = 'megapay_scheduled_jobs';
private Builder $builder; private Builder $builder;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use Exception; use Exception;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use JsonException; use JsonException;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
final class PulseEvents final class PulseEvents
{ {

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use Exception; use Exception;

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
class StartParamSerializer class StartParamSerializer
{ {

View File

@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use Carbon\Carbon; use Carbon\Carbon;
use Openguru\OpenCartFramework\QueryBuilder\Builder; use Openguru\OpenCartFramework\QueryBuilder\Builder;
@@ -11,9 +11,9 @@ use Openguru\OpenCartFramework\QueryBuilder\RawExpression;
use Ramsey\Uuid\Uuid; use Ramsey\Uuid\Uuid;
use RuntimeException; use RuntimeException;
class TeleCartEvent class MegaPayEvent
{ {
private const TABLE_NAME = 'telecart_events'; private const TABLE_NAME = 'megapay_events';
private ConnectionInterface $database; private ConnectionInterface $database;
private Builder $builder; private Builder $builder;
@@ -94,7 +94,7 @@ class TeleCartEvent
} }
$errorMessage = $error ? $error[1] : 'Unknown error'; $errorMessage = $error ? $error[1] : 'Unknown error';
throw new RuntimeException("Failed to insert telecart event. Error: {$errorMessage}"); throw new RuntimeException("Failed to insert megapay event. Error: {$errorMessage}");
} }
return $this->database->lastInsertId(); return $this->database->lastInsertId();

View File

@@ -1,13 +1,13 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Exception\GuzzleException;
use Openguru\OpenCartFramework\Support\Arr; use Openguru\OpenCartFramework\Support\Arr;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class TeleCartPulseEventsSender class MegaPayPulseEventsSender
{ {
private PayloadSigner $payloadSigner; private PayloadSigner $payloadSigner;
private LoggerInterface $logger; private LoggerInterface $logger;
@@ -84,7 +84,7 @@ class TeleCartPulseEventsSender
'timeout' => env('PULSE_TIMEOUT', 5.0), 'timeout' => env('PULSE_TIMEOUT', 5.0),
'headers' => [ 'headers' => [
'Authorization' => 'Bearer ' . $this->apiKey, 'Authorization' => 'Bearer ' . $this->apiKey,
'X-TELECART-VERSION' => module_version(), 'X-MEGAPAY-VERSION' => module_version(),
], ],
]); ]);

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use Carbon\Carbon; use Carbon\Carbon;
use GuzzleHttp\Client; use GuzzleHttp\Client;
@@ -13,13 +13,13 @@ use Openguru\OpenCartFramework\Telegram\TelegramService;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Throwable; use Throwable;
class TeleCartPulseService class MegaPayPulseService
{ {
private TelegramInitDataDecoder $initDataDecoder; private TelegramInitDataDecoder $initDataDecoder;
private TelegramService $telegramService; private TelegramService $telegramService;
private CacheInterface $cache; private CacheInterface $cache;
private LoggerInterface $logger; private LoggerInterface $logger;
private TeleCartEvent $eventModel; private MegaPayEvent $eventModel;
private ?string $apiKey; private ?string $apiKey;
private ?PayloadSigner $heartbeatPayloadSigner; private ?PayloadSigner $heartbeatPayloadSigner;
@@ -28,7 +28,7 @@ class TeleCartPulseService
TelegramService $telegramService, TelegramService $telegramService,
CacheInterface $cache, CacheInterface $cache,
LoggerInterface $logger, LoggerInterface $logger,
TeleCartEvent $eventModel, MegaPayEvent $eventModel,
?string $apiKey = null, ?string $apiKey = null,
?PayloadSigner $heartbeatPayloadSigner = null ?PayloadSigner $heartbeatPayloadSigner = null
) { ) {
@@ -132,16 +132,16 @@ class TeleCartPulseService
*/ */
public function handleHeartbeat(): void public function handleHeartbeat(): void
{ {
if ($this->cache->get('telecart_pulse_heartbeat')) { if ($this->cache->get('megapay_pulse_heartbeat')) {
return; return;
} }
try { try {
$this->cache->set('telecart_pulse_heartbeat', time(), 3600); $this->cache->set('megapay_pulse_heartbeat', time(), 3600);
$me = $this->telegramService->getMe(); $me = $this->telegramService->getMe();
} catch (Throwable $e) { } catch (Throwable $e) {
$this->logger->warning( $this->logger->warning(
'TeleCart Pulse heartbeat prerequisites failed: ' . $e->getMessage(), 'MegaPay Pulse heartbeat prerequisites failed: ' . $e->getMessage(),
['exception' => $e] ['exception' => $e]
); );
@@ -173,7 +173,7 @@ class TeleCartPulseService
$signature = $this->heartbeatPayloadSigner->sign($payload); $signature = $this->heartbeatPayloadSigner->sign($payload);
} catch (PayloadSignException $exception) { } catch (PayloadSignException $exception) {
$this->logger->warning( $this->logger->warning(
'TeleCart Pulse heartbeat signing failed: ' . $exception->getMessage(), 'MegaPay Pulse heartbeat signing failed: ' . $exception->getMessage(),
['exception' => $exception] ['exception' => $exception]
); );
@@ -199,7 +199,7 @@ class TeleCartPulseService
'base_uri' => $baseUri, 'base_uri' => $baseUri,
'timeout' => env('PULSE_TIMEOUT', 2.0), 'timeout' => env('PULSE_TIMEOUT', 2.0),
'headers' => [ 'headers' => [
'X-TELECART-VERSION' => module_version(), 'X-MEGAPAY-VERSION' => module_version(),
], ],
]); ]);

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use Openguru\OpenCartFramework\Cache\CacheInterface; use Openguru\OpenCartFramework\Cache\CacheInterface;
use Openguru\OpenCartFramework\Container\Container; use Openguru\OpenCartFramework\Container\Container;
@@ -9,7 +9,7 @@ use Openguru\OpenCartFramework\Telegram\TelegramInitDataDecoder;
use Openguru\OpenCartFramework\Telegram\TelegramService; use Openguru\OpenCartFramework\Telegram\TelegramService;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class TeleCartPulseServiceProvider extends ServiceProvider class MegaPayPulseServiceProvider extends ServiceProvider
{ {
public function register(): void public function register(): void
{ {
@@ -19,23 +19,23 @@ class TeleCartPulseServiceProvider extends ServiceProvider
); );
}); });
$this->container->singleton(TeleCartPulseService::class, function (Container $app) { $this->container->singleton(MegaPayPulseService::class, function (Container $app) {
$heartbeatSecret = $app->getConfigValue('pulse.heartbeat_secret') ?? env('PULSE_HEARTBEAT_SECRET'); $heartbeatSecret = $app->getConfigValue('pulse.heartbeat_secret') ?? env('PULSE_HEARTBEAT_SECRET');
$heartbeatSigner = $heartbeatSecret ? new PayloadSigner($heartbeatSecret) : null; $heartbeatSigner = $heartbeatSecret ? new PayloadSigner($heartbeatSecret) : null;
return new TeleCartPulseService( return new MegaPayPulseService(
$app->get(TelegramInitDataDecoder::class), $app->get(TelegramInitDataDecoder::class),
$app->get(TelegramService::class), $app->get(TelegramService::class),
$app->get(CacheInterface::class), $app->get(CacheInterface::class),
$app->get(LoggerInterface::class), $app->get(LoggerInterface::class),
$app->get(TeleCartEvent::class), $app->get(MegaPayEvent::class),
$app->getConfigValue('pulse.api_key'), $app->getConfigValue('pulse.api_key'),
$heartbeatSigner, $heartbeatSigner,
); );
}); });
$this->container->singleton(TeleCartPulseEventsSender::class, function (Container $app) { $this->container->singleton(MegaPayPulseEventsSender::class, function (Container $app) {
return new TeleCartPulseEventsSender( return new MegaPayPulseEventsSender(
$app->get(PayloadSigner::class), $app->get(PayloadSigner::class),
$app->get(LoggerInterface::class), $app->get(LoggerInterface::class),
$app->getConfigValue('pulse.api_key'), $app->getConfigValue('pulse.api_key'),

View File

@@ -1,6 +1,6 @@
<?php <?php
namespace Openguru\OpenCartFramework\TeleCartPulse; namespace Openguru\OpenCartFramework\MegaPayPulse;
use Ramsey\Uuid\Uuid; use Ramsey\Uuid\Uuid;

View File

@@ -21,7 +21,7 @@ class StartCommand extends TelegramCommand
{ {
$chatId = $update['message']['chat']['id']; $chatId = $update['message']['chat']['id'];
$message = $this->settings->get('texts.start_message', 'Welcome to Telecart - Telegram e-commerce solution.'); $message = $this->settings->get('texts.start_message', 'Welcome to Megapay - Telegram e-commerce solution.');
$buttons = [ $buttons = [
'inline_keyboard' => [ 'inline_keyboard' => [
[ [

View File

@@ -46,7 +46,7 @@ class TestCase extends BaseTestCase
$app = ApplicationFactory::create([ $app = ApplicationFactory::create([
'app' => [ 'app' => [
'app_enabled' => true, 'app_enabled' => true,
'app_name' => 'Telecart', 'app_name' => 'Megapay',
'app_icon' => null, 'app_icon' => null,
"theme_light" => "light", "theme_light" => "light",
"theme_dark" => "dark", "theme_dark" => "dark",
@@ -108,10 +108,10 @@ class TestCase extends BaseTestCase
], ],
'cache' => [ 'cache' => [
'namespace' => 'telecart', 'namespace' => 'megapay',
'default_lifetime' => 60 * 60 * 24, 'default_lifetime' => 60 * 60 * 24,
'options' => [ 'options' => [
'db_table' => 'telecart_cache_items', 'db_table' => 'megapay_cache_items',
], ],
], ],
@@ -161,7 +161,7 @@ class TestCase extends BaseTestCase
protected function getNullLogger(): LoggerInterface protected function getNullLogger(): LoggerInterface
{ {
$logger = new Logger('Telecart_Tests'); $logger = new Logger('Megapay_Tests');
$logger->pushHandler(new NullHandler()); $logger->pushHandler(new NullHandler());
return $logger; return $logger;

View File

@@ -403,10 +403,10 @@ class ArrTest extends TestCase
public function testMergeArraysRecursivelyWithDotNotationRealWorldExample(): void public function testMergeArraysRecursivelyWithDotNotationRealWorldExample(): void
{ {
$json = [ $json = [
'module_telecart_settings' => [ 'module_megapay_settings' => [
'app' => [ 'app' => [
'app_enabled' => true, 'app_enabled' => true,
'app_name' => 'Telecart', 'app_name' => 'Megapay',
], ],
'telegram' => [ 'telegram' => [
'bot_token' => 'old_token', 'bot_token' => 'old_token',
@@ -415,22 +415,22 @@ class ArrTest extends TestCase
]; ];
$envOverrides = [ $envOverrides = [
'app.logs.path' => '/var/log/telecart', 'app.logs.path' => '/var/log/megapay',
'app.app_debug' => true, 'app.app_debug' => true,
'telegram.bot_token' => 'new_token_from_env', 'telegram.bot_token' => 'new_token_from_env',
]; ];
$result = Arr::mergeArraysRecursivelyWithDotNotation( $result = Arr::mergeArraysRecursivelyWithDotNotation(
$json['module_telecart_settings'], $json['module_megapay_settings'],
$envOverrides $envOverrides
); );
$expected = [ $expected = [
'app' => [ 'app' => [
'app_enabled' => true, 'app_enabled' => true,
'app_name' => 'Telecart', 'app_name' => 'Megapay',
'logs' => [ 'logs' => [
'path' => '/var/log/telecart', 'path' => '/var/log/megapay',
], ],
'app_debug' => true, 'app_debug' => true,
], ],
@@ -667,7 +667,7 @@ class ArrTest extends TestCase
public function testExceptRemovesSpecifiedKeys(): void public function testExceptRemovesSpecifiedKeys(): void
{ {
$array = [ $array = [
'app' => 'telecart', 'app' => 'megapay',
'debug' => true, 'debug' => true,
'version' => '1.0.0', 'version' => '1.0.0',
]; ];
@@ -675,7 +675,7 @@ class ArrTest extends TestCase
$result = Arr::except($array, ['debug', 'nonexistent']); $result = Arr::except($array, ['debug', 'nonexistent']);
$expected = [ $expected = [
'app' => 'telecart', 'app' => 'megapay',
'version' => '1.0.0', 'version' => '1.0.0',
]; ];
@@ -685,7 +685,7 @@ class ArrTest extends TestCase
public function testExceptReturnsOriginalArrayWhenNoKeysProvided(): void public function testExceptReturnsOriginalArrayWhenNoKeysProvided(): void
{ {
$array = [ $array = [
'app' => 'telecart', 'app' => 'megapay',
'debug' => true, 'debug' => true,
]; ];

View File

@@ -519,7 +519,7 @@ class BuilderTest extends TestCase
$connection->expects($this->once()) $connection->expects($this->once())
->method('statement') ->method('statement')
->with( ->with(
'UPDATE `telecart_settings` SET `alias` = ?, `foo` = ? WHERE alias = ?', 'UPDATE `megapay_settings` SET `alias` = ?, `foo` = ? WHERE alias = ?',
['foobar2', 'bar2', 'foobar'] ['foobar2', 'bar2', 'foobar']
) )
->willReturn(true); ->willReturn(true);
@@ -528,7 +528,7 @@ class BuilderTest extends TestCase
$builder->newQuery() $builder->newQuery()
->where('alias', '=', 'foobar') ->where('alias', '=', 'foobar')
->update('telecart_settings', [ ->update('megapay_settings', [
'alias' => 'foobar2', 'alias' => 'foobar2',
'foo' => 'bar2', 'foo' => 'bar2',
]); ]);
@@ -542,7 +542,7 @@ class BuilderTest extends TestCase
$connection->expects($this->once()) $connection->expects($this->once())
->method('statement') ->method('statement')
->with( ->with(
'UPDATE `telecart_settings` SET `json` = ? WHERE alias = ?', 'UPDATE `megapay_settings` SET `json` = ? WHERE alias = ?',
[$json, 'foobar'] [$json, 'foobar']
) )
->willReturn(true); ->willReturn(true);
@@ -551,7 +551,7 @@ class BuilderTest extends TestCase
$builder->newQuery() $builder->newQuery()
->where('alias', '=', 'foobar') ->where('alias', '=', 'foobar')
->update('telecart_settings', [ ->update('megapay_settings', [
'json' => $json, 'json' => $json,
]); ]);
} }
@@ -564,7 +564,7 @@ class BuilderTest extends TestCase
$connection->expects($this->once()) $connection->expects($this->once())
->method('statement') ->method('statement')
->with( ->with(
'UPDATE `telecart_settings` SET `json` = ? WHERE alias = ?', 'UPDATE `megapay_settings` SET `json` = ? WHERE alias = ?',
[$json, 'foobar'] [$json, 'foobar']
) )
->willReturn(true); ->willReturn(true);
@@ -573,7 +573,7 @@ class BuilderTest extends TestCase
$builder->newQuery() $builder->newQuery()
->where('alias', '=', 'foobar') ->where('alias', '=', 'foobar')
->update('telecart_settings', [ ->update('megapay_settings', [
'json' => $json, 'json' => $json,
]); ]);
} }

View File

@@ -60,11 +60,11 @@ class ImageFactoryTest extends TestCase
$factory = new ImageFactory($this->imageDir, $this->siteUrl, 'gd'); $factory = new ImageFactory($this->imageDir, $this->siteUrl, 'gd');
// Ожидание: http://localhost/image/cache/telecart/catalog/test_... // Ожидание: http://localhost/image/cache/megapay/catalog/test_...
$url = $factory->make('catalog/test.png')->url(); $url = $factory->make('catalog/test.png')->url();
// Проверяем, что 'cache' не пострадал от ltrim и путь содержит telecart // Проверяем, что 'cache' не пострадал от ltrim и путь содержит megapay
$this->assertStringContainsString('/image/cache/telecart/catalog/test', $url, 'URL corrupted: ' . $url); $this->assertStringContainsString('/image/cache/megapay/catalog/test', $url, 'URL corrupted: ' . $url);
} }
public function testFilenameLengthAndDuplication() public function testFilenameLengthAndDuplication()
@@ -84,7 +84,7 @@ class ImageFactoryTest extends TestCase
$expectedHash = substr(hash('SHA256', json_encode(['resize' => ['width' => 100, 'height' => 100]])), 0, 12); $expectedHash = substr(hash('SHA256', json_encode(['resize' => ['width' => 100, 'height' => 100]])), 0, 12);
$this->assertStringContainsString($expectedHash, $filename); $this->assertStringContainsString($expectedHash, $filename);
$this->assertFileExists($this->imageDir . '/cache/telecart/test_' . $expectedHash . '.webp'); $this->assertFileExists($this->imageDir . '/cache/megapay/test_' . $expectedHash . '.webp');
} }
public function testMissingImageFallback() public function testMissingImageFallback()
@@ -100,7 +100,7 @@ class ImageFactoryTest extends TestCase
$this->assertStringContainsString('no_image', $url); $this->assertStringContainsString('no_image', $url);
// Проверяем, что сам файл создался (конвертация в webp) // Проверяем, что сам файл создался (конвертация в webp)
$this->assertFileExists($this->imageDir . '/cache/telecart/no_image.webp'); $this->assertFileExists($this->imageDir . '/cache/megapay/no_image.webp');
} }
public function testMissingFallbackImageSafeFail() public function testMissingFallbackImageSafeFail()

View File

@@ -7,7 +7,7 @@ use App\Services\OcCustomerService;
use App\Services\OrderCreateService; use App\Services\OrderCreateService;
use App\Services\OrderMetaService; use App\Services\OrderMetaService;
use App\Services\SettingsService; use App\Services\SettingsService;
use App\Services\TelecartCustomerService; use App\Services\MegapayCustomerService;
use Carbon\Carbon; use Carbon\Carbon;
use Mockery as m; use Mockery as m;
use Openguru\OpenCartFramework\OpenCart\Decorators\OcRegistryDecorator; use Openguru\OpenCartFramework\OpenCart\Decorators\OcRegistryDecorator;
@@ -67,7 +67,7 @@ class OrderCreateServiceTest extends TestCase
$orderId = 1111; $orderId = 1111;
$orderProductId = 223; $orderProductId = 223;
$ocCustomerId = 333; $ocCustomerId = 333;
$telecartCustomerId = 444; $megapayCustomerId = 444;
$product = [ $product = [
'product_id' => 93, 'product_id' => 93,
@@ -176,24 +176,24 @@ class OrderCreateServiceTest extends TestCase
$telegramServiceMock = m::mock(TelegramService::class); $telegramServiceMock = m::mock(TelegramService::class);
$loggerMock = m::mock(LoggerInterface::class); $loggerMock = m::mock(LoggerInterface::class);
$telegramCustomerService = m::mock(TelecartCustomerService::class); $telegramCustomerService = m::mock(MegapayCustomerService::class);
$telegramCustomerService->shouldReceive('saveOrUpdate')->once() $telegramCustomerService->shouldReceive('saveOrUpdate')->once()
->with($tgData['user']) ->with($tgData['user'])
->andReturn(['id' => $telecartCustomerId]); ->andReturn(['id' => $megapayCustomerId]);
$telegramCustomerService->shouldReceive('increaseOrdersCount')->once() $telegramCustomerService->shouldReceive('increaseOrdersCount')->once()
->with($telecartCustomerId) ->with($megapayCustomerId)
->andReturnNull(); ->andReturnNull();
$ocCustomerService = m::mock(OcCustomerService::class); $ocCustomerService = m::mock(OcCustomerService::class);
$ocCustomerService->shouldReceive('findOrCreateByTelecartCustomerId')->once() $ocCustomerService->shouldReceive('findOrCreateByMegapayCustomerId')->once()
->with($telecartCustomerId, m::type('array')) ->with($megapayCustomerId, m::type('array'))
->andReturn(['customer_id' => $ocCustomerId]); ->andReturn(['customer_id' => $ocCustomerId]);
$orderMetaService = m::mock(OrderMetaService::class); $orderMetaService = m::mock(OrderMetaService::class);
$orderMetaService->shouldReceive('insert') $orderMetaService->shouldReceive('insert')
->once() ->once()
->with($orderId, $storeId, $customOrderFields, $telecartCustomerId) ->with($orderId, $storeId, $customOrderFields, $megapayCustomerId)
->andReturnNull(); ->andReturnNull();
$service = new OrderCreateService( $service = new OrderCreateService(

View File

@@ -28,12 +28,12 @@ services:
- XDEBUG_CLIENT_HOST=host.docker.internal - XDEBUG_CLIENT_HOST=host.docker.internal
- XDEBUG_CLIENT_PORT=9003 - XDEBUG_CLIENT_PORT=9003
- XDEBUG_DISCOVER_CLIENT_HOST=false - XDEBUG_DISCOVER_CLIENT_HOST=false
- PHP_IDE_CONFIG=serverName=telecart - PHP_IDE_CONFIG=serverName=megapay
- php.session.gc_maxlifetime=28800 - php.session.gc_maxlifetime=28800
- php.session.cookie_lifetime=0 - php.session.cookie_lifetime=0
- TELECART_REDIS_HOST=redis - MEGAPAY_REDIS_HOST=redis
- TELECART_REDIS_PORT=6379 - MEGAPAY_REDIS_PORT=6379
- TELECART_REDIS_DATABASE=0 - MEGAPAY_REDIS_DATABASE=0
depends_on: depends_on:
- mysql - mysql
- redis - redis
@@ -63,7 +63,7 @@ services:
- ./deployment/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d - ./deployment/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
cron: cron:
image: ghcr.io/telecart-labs/scheduler:latest image: ghcr.io/megapay-labs/scheduler:latest
platform: linux/amd64 platform: linux/amd64
restart: unless-stopped restart: unless-stopped
environment: environment:

View File

@@ -1,9 +0,0 @@
{
"recommendations": [
"Vue.volar",
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
"oxc.oxc-vscode",
"esbenp.prettier-vscode"
]
}

View File

@@ -58,7 +58,7 @@
<li :class="{active: route.name === 'pulse'}"> <li :class="{active: route.name === 'pulse'}">
<RouterLink :to="{name: 'pulse'}"> <RouterLink :to="{name: 'pulse'}">
<i class="fa fa-heartbeat pulse-icon tw:text-red-200"></i> TeleCart Pulse <span class="pulse-beta-label tw:ml-1 tw:px-1.5 tw:py-0.5 tw:text-xs tw:font-semibold tw:text-white tw:rounded">BETA</span> <i class="fa fa-heartbeat pulse-icon tw:text-red-200"></i> MegaPay Pulse <span class="pulse-beta-label tw:ml-1 tw:px-1.5 tw:py-0.5 tw:text-xs tw:font-semibold tw:text-white tw:rounded">BETA</span>
</RouterLink> </RouterLink>
</li> </li>

View File

@@ -43,7 +43,7 @@ legend.p-fieldset-legend {
margin-bottom: 0; margin-bottom: 0;
} }
.telecart-admin-app { .megapay-admin-app {
color: var(--color-slate-700); color: var(--color-slate-700);
} }

View File

@@ -67,9 +67,9 @@ const settings = useSettingsStore();
/** Человекочитаемое имя и описание задач (ключ — job.name с бэкенда) */ /** Человекочитаемое имя и описание задач (ключ — job.name с бэкенда) */
const JOB_META = { const JOB_META = {
telecart_pulse_send_events: { megapay_pulse_send_events: {
friendlyName: 'Отправка данных в TeleCart Pulse', friendlyName: 'Отправка данных в MegaPay Pulse',
description: 'Отправка данных телеметрии о действиях в TeleCart. Требуется для сбора метрик по рассылкам и кампаниям, сделанных через сервис TeleCart Pulse', description: 'Отправка данных телеметрии о действиях в MegaPay. Требуется для сбора метрик по рассылкам и кампаниям, сделанных через сервис MegaPay Pulse',
}, },
}; };

View File

@@ -94,7 +94,7 @@ onMounted(() => {
$(searchInput.value).autocomplete({ $(searchInput.value).autocomplete({
source: function (request, response) { source: function (request, response) {
$.ajax({ $.ajax({
url: `/admin/index.php?route=catalog/category/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=${encodeURIComponent(request)}`, url: `/admin/index.php?route=catalog/category/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=${encodeURIComponent(request)}`,
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
response($.map(json, function (item) { response($.map(json, function (item) {

View File

@@ -94,7 +94,7 @@ onMounted(() => {
$(productsInput.value).autocomplete({ $(productsInput.value).autocomplete({
source: function (request, response) { source: function (request, response) {
$.ajax({ $.ajax({
url: `/admin/index.php?route=catalog/product/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=${encodeURIComponent(request)}`, url: `/admin/index.php?route=catalog/product/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=${encodeURIComponent(request)}`,
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
response($.map(json, function (item) { response($.map(json, function (item) {

View File

@@ -40,7 +40,7 @@
<template #help> <template #help>
Подробная инструкция доступна в Подробная инструкция доступна в
<a href="https://telecart-labs.github.io/docs/telegram/telegram/#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B1%D0%BE%D1%82%D0%B0" target="_blank">документации <a href="https://megapay-labs.github.io/docs/telegram/telegram/#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B1%D0%BE%D1%82%D0%B0" target="_blank">документации
<i class="fa fa-external-link"></i> <i class="fa fa-external-link"></i>
</a>. </a>.
</template> </template>

View File

@@ -41,7 +41,7 @@
Telegram поддерживает только часть HTML тегов, которые описаны в их Telegram поддерживает только часть HTML тегов, которые описаны в их
<a href="https://core.telegram.org/bots/api#html-style" target="_blank">документации <i class="fa fa-external-link"></i></a>. <a href="https://core.telegram.org/bots/api#html-style" target="_blank">документации <i class="fa fa-external-link"></i></a>.
</p> </p>
<p>Дополнительно к этому TeleCart добавляет переменные, которые вы можете использовать, чтобы сделать сообщения динамическими.</p> <p>Дополнительно к этому MegaPay добавляет переменные, которые вы можете использовать, чтобы сделать сообщения динамическими.</p>
<ul> <ul>
<li><code>{store_name}</code> название магазина</li> <li><code>{store_name}</code> название магазина</li>
<li><code>{order_id}</code> номер заказа</li> <li><code>{order_id}</code> номер заказа</li>

View File

@@ -6,9 +6,9 @@
:modelValue="model" :modelValue="model"
:allowCopy="true" :allowCopy="true"
> >
Ссылка на сайт с TeleCart витриной, которую нужно указывать в настройках MiniApp в @BotFather.<br> Ссылка на сайт с MegaPay витриной, которую нужно указывать в настройках MiniApp в @BotFather.<br>
Подробная инструкция по настройке в Подробная инструкция по настройке в
<a href="https://docs.telecart.pro/telegram/telegram/" target="_blank"> <a href="https://docs.megapay.pro/telegram/telegram/" target="_blank">
документации <i class="fa fa-external-link"></i> документации <i class="fa fa-external-link"></i>
</a>. </a>.
</ItemInput> </ItemInput>

View File

@@ -30,7 +30,7 @@ onMounted(() => {
} }
$.ajax({ $.ajax({
url: `index.php?route=catalog/category/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=` + encodeURIComponent(request), url: `index.php?route=catalog/category/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=` + encodeURIComponent(request),
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
response($.map(json, function (item) { response($.map(json, function (item) {

View File

@@ -29,7 +29,7 @@ onMounted(() => {
} }
$.ajax({ $.ajax({
url: `index.php?route=catalog/product/autocomplete&user_token=${window.TeleCart.user_token}&filter_name=` + encodeURIComponent(request), url: `index.php?route=catalog/product/autocomplete&user_token=${window.MegaPay.user_token}&filter_name=` + encodeURIComponent(request),
dataType: 'json', dataType: 'json',
success: function (json) { success: function (json) {
response($.map(json, function (item) { response($.map(json, function (item) {

View File

@@ -18,7 +18,7 @@
<div class="tw:flex tw:items-center tw:flex-wrap tw:gap-8"> <div class="tw:flex tw:items-center tw:flex-wrap tw:gap-8">
<div> <div>
<span <span
v-tooltip.top="'Общее количество заказов, сделанное через TeleCart за всё время.'" v-tooltip.top="'Общее количество заказов, сделанное через MegaPay за всё время.'"
class="tw:text-surface-500 tw:dark:text-surface-300" class="tw:text-surface-500 tw:dark:text-surface-300"
> >
Количество заказов Количество заказов
@@ -31,7 +31,7 @@
</div> </div>
<div> <div>
<span <span
v-tooltip.top="'Итоговая сумма заказов, сделанных через TeleCart за всё время.'" v-tooltip.top="'Итоговая сумма заказов, сделанных через MegaPay за всё время.'"
class="tw:text-surface-500 tw:dark:text-surface-300" class="tw:text-surface-500 tw:dark:text-surface-300"
>Общая сумма</span> >Общая сумма</span>
<div <div
@@ -101,14 +101,14 @@
/> />
<Button <Button
icon="fa fa-book" icon="fa fa-book"
v-tooltip.top="'Документация по модулю TeleCart'" v-tooltip.top="'Документация по модулю MegaPay'"
as="a" as="a"
target="_blank" target="_blank"
href="https://telecart-labs.github.io/docs/" href="https://megapay-labs.github.io/docs/"
/> />
<Button <Button
icon="fa fa-group" icon="fa fa-group"
v-tooltip.top="'Официальная Telegram группа модуля TeleCart'" v-tooltip.top="'Официальная Telegram группа модуля MegaPay'"
as="a" as="a"
target="_blank" target="_blank"
href="https://t.me/ocstore3" href="https://t.me/ocstore3"

View File

@@ -8,7 +8,7 @@ import StoreView from "@/views/StoreView.vue";
import MainPageView from "@/views/MainPageView.vue"; import MainPageView from "@/views/MainPageView.vue";
import FormBuilderView from "@/views/FormBuilderView.vue"; import FormBuilderView from "@/views/FormBuilderView.vue";
import CustomersView from "@/views/CustomersView.vue"; import CustomersView from "@/views/CustomersView.vue";
import TeleCartPulseView from "@/views/TeleCartPulseView.vue"; import MegaPayPulseView from "@/views/MegaPayPulseView.vue";
import CronView from "@/views/CronView.vue"; import CronView from "@/views/CronView.vue";
const router = createRouter({ const router = createRouter({
@@ -20,7 +20,7 @@ const router = createRouter({
{path: '/mainpage', name: 'mainpage', component: MainPageView}, {path: '/mainpage', name: 'mainpage', component: MainPageView},
{path: '/metrics', name: 'metrics', component: MetricsView}, {path: '/metrics', name: 'metrics', component: MetricsView},
{path: '/orders', name: 'orders', component: OrdersView}, {path: '/orders', name: 'orders', component: OrdersView},
{path: '/pulse', name: 'pulse', component: TeleCartPulseView}, {path: '/pulse', name: 'pulse', component: MegaPayPulseView},
{path: '/store', name: 'store', component: StoreView}, {path: '/store', name: 'store', component: StoreView},
{path: '/telegram', name: 'telegram', component: TelegramView}, {path: '/telegram', name: 'telegram', component: TelegramView},
{path: '/texts', name: 'texts', component: TextsView}, {path: '/texts', name: 'texts', component: TextsView},

View File

@@ -1,10 +1,10 @@
export function getThumb(imageUrl) { export function getThumb(imageUrl) {
const url = new URL(`${window.TeleCart.shop_base_url}/admin/index.php`); const url = new URL(`${window.MegaPay.shop_base_url}/admin/index.php`);
url.searchParams.set('route', 'extension/module/tgshop/handle'); url.searchParams.set('route', 'extension/module/tgshop/handle');
url.searchParams.set('api_action', 'getImage'); url.searchParams.set('api_action', 'getImage');
url.searchParams.set('path', imageUrl); url.searchParams.set('path', imageUrl);
url.searchParams.set('size', '100x100'); url.searchParams.set('size', '100x100');
url.searchParams.set('user_token', window.TeleCart.user_token); url.searchParams.set('user_token', window.MegaPay.user_token);
return url.toString(); return url.toString();
} }

View File

@@ -1,11 +1,11 @@
import axios from 'axios'; import axios from 'axios';
/** /**
* Получает user_token из глобального объекта TeleCart * Получает user_token из глобального объекта MegaPay
*/ */
function getUserToken() { function getUserToken() {
if (typeof window !== 'undefined' && window.TeleCart?.user_token) { if (typeof window !== 'undefined' && window.MegaPay?.user_token) {
return window.TeleCart.user_token; return window.MegaPay.user_token;
} }
// Fallback: пытаемся получить из URL как запасной вариант // Fallback: пытаемся получить из URL как запасной вариант

View File

@@ -1,5 +1,5 @@
<template> <template>
<SettingsItem label="Режим работы планировщика" doc-href="https://docs.telecart.pro/features/cron/"> <SettingsItem label="Режим работы планировщика" doc-href="https://docs.megapay.pro/features/cron/">
<template #default> <template #default>
<SelectButton <SelectButton
v-model="settings.items.cron.mode" v-model="settings.items.cron.mode"

View File

@@ -76,7 +76,7 @@ import ItemSelect from "@/components/Settings/ItemSelect.vue";
import ItemInput from "@/components/Settings/ItemInput.vue"; import ItemInput from "@/components/Settings/ItemInput.vue";
const settings = useSettingsStore(); const settings = useSettingsStore();
const themes = JSON.parse(window.TeleCart.themes); const themes = JSON.parse(window.MegaPay.themes);
const aspectRatioOptions = { const aspectRatioOptions = {
'1:1': '1:1 - Квадрат (универсально, аксессуары, мелкие товары)', '1:1': '1:1 - Квадрат (универсально, аксессуары, мелкие товары)',

View File

@@ -26,7 +26,7 @@
<Button <Button
as="a" as="a"
href="https://telecart-labs.github.io/docs/analitycs/start/" href="https://megapay-labs.github.io/docs/analitycs/start/"
target="_blank" target="_blank"
variant="text" variant="text"
> >

View File

@@ -13,5 +13,5 @@ import {useSettingsStore} from "@/stores/settings.js";
import ItemSelect from "@/components/Settings/ItemSelect.vue"; import ItemSelect from "@/components/Settings/ItemSelect.vue";
const settings = useSettingsStore(); const settings = useSettingsStore();
const orderStatuses = JSON.parse(window.TeleCart.order_statuses); const orderStatuses = JSON.parse(window.MegaPay.order_statuses);
</script> </script>

Some files were not shown because too many files have changed in this diff Show More