# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Overview TeleCart — коммерческий модуль для OpenCart, превращающий магазин в Telegram Mini App. Это монорепозиторий из трёх частей: - **PHP-модуль OpenCart** — `module/oc_telegram_shop/upload/` (вся бизнес-логика и собственный фреймворк). - **SPA** — `frontend/spa/` (Telegram Mini App, витрина для покупателей). - **Admin** — `frontend/admin/` (панель управления настройками модуля). `src/` в корне — это распакованная установка OpenCart (генерируется скриптами, **не редактировать**; код модуля «линкуется» в неё через `make link`). ## Где живёт код модуля Сердце проекта — `module/oc_telegram_shop/upload/oc_telegram_shop/` (далее «корень модуля»). Его структура: | Каталог | Namespace | Назначение | |------------------------|-------------------------------|-----------------------------------------------------------------------------------------------------------------------------| | `framework/` | `Openguru\OpenCartFramework\` | Собственный Laravel-подобный фреймворк: Container (DI), Router, QueryBuilder, Cache, Migrations, Telegram, Http, Translator | | `src/` | `App\` | API витрины/SPA (catalog). Handlers, Services, Models, DTO, Filters, ServiceProviders | | `bastion/` | `Bastion\` | API админ-панели. Handlers, Services, Tasks, ScheduledTasks | | `console/` | `Console\` | CLI-команды (Symfony Console), точка входа `upload/cli.php` | | `database/migrations/` | — | Миграции БД | | `configs/` | — | `app.php`, `maintenance.php`, `schedule.php` | | `tests/` | `Tests\` | `Unit/`, `Integration/`, `Telegram/` | **Маршрутизация.** Запросы приходят через action-параметр и резолвятся по двум картам: - `src/routes.php` — действия SPA (`products`, `getCart`, `checkout`, `webhook`, …) - `bastion/routes.php` — действия админки (`getSettingsForm`, `getTelegramCustomers`, `getDashboardStats`, …) Каждая запись — `'actionName' => [HandlerClass::class, 'method']`. **Точки входа OpenCart** (тонкие обёртки, грузят autoload и поднимают `App\ApplicationFactory`): - `module/.../upload/catalog/controller/extension/tgshop/handle.php` — SPA API - `module/.../upload/admin/controller/extension/module/tgshop.php` — админка В продакшене модуль собирается в `oc_telegram_shop.phar` и подключается из `system/library/oc_telegram_shop/`; в dev — из исходников через `vendor/autoload.php`. ## Архитектурные правила (бэкенд) Паттерн — MVC-L поверх собственного фреймворка. Соблюдай строго: - **Совместимость с PHP 7.4.** Минимальные требования OpenCart и модуля — PHP 7.4 (`composer.json`: `^7.4`). Не используй синтаксис и функции PHP 8.0+ (named arguments, `match`, constructor property promotion, `enum`, `readonly`, nullsafe `?->`, union types и т.п.). - **Dependency Injection через конструктор.** Никогда не создавай зависимости через `new` внутри классов — внедряй их. Регистрация сервисов идёт в Service Providers (`src/ServiceProviders/`) через `$this->app->singleton(...)`. - **Query Builder вместо сырого SQL.** Используй `$this->builder->newQuery()->from(...)->where(...)->get()`. Прямой SQL — только в крайних случаях; никогда не конкатенируй значения в запрос (SQL injection). - **Слои:** Handler (валидация + вызов сервиса + `JsonResponse`) → Service (бизнес-логика) → Model (доступ к данным). Не смешивай. - **Строгая типизация:** `declare(strict_types=1)`, типы аргументов и возвращаемых значений, nullable где нужно. PSR-12. - **Безопасный доступ к массивам:** `Arr::get($data, 'key', $default)` вместо `$data['key']`. - **Таблицы:** префикс OpenCart (`oc_`) + собственные таблицы модуля. ## Архитектура фронтенда Оба приложения — Vue 3, **только `