# Карта проекта tocha_app ## Что это Административная панель для каталога автомобилей. Laravel 13 + AdminLTE. Ориентировочно: авторынок / автосалон, продажа авто из Японии и других стран. --- ## История изменений ### 2026-05-06 — Начальная сборка скелета **Установлено:** - Laravel 13 (PHP 8.3+) - `jeroennoten/laravel-adminlte` — UI, опубликованы auth-вьюхи - Laravel Boost (dev) — MCP-сервер для AI-разработки - Vite + TailwindCSS v4, PHPUnit v12, Laravel Pint **Настроено:** - `APP_NAME`, `APP_URL`, MySQL-подключение (`tocha_app`, root, localhost:3306) --- ### 2026-05-06 — Авторизация и middleware **Создано:** - `app/Http/Controllers/Admin/LoginController.php` — вход/выход; авторизация по `name`, не email - `app/Http/Middleware/EnsureUserIsAdmin.php` — проверка `is_admin`; редирект на /admin/login - `database/migrations/2026_05_06_145556_add_is_admin_to_users_table.php` — флаг `is_admin` в users - `database/seeders/AdminSeeder.php` — создаёт пользователя admin/1234 - `resources/views/admin/login.blade.php` — форма входа (AdminLTE auth-page) **Изменено:** - `routes/web.php` — добавлена группа `/admin/*` с middleware 'admin' - `app/Models/User.php` — добавлен `is_admin` в Fillable **Регистрация middleware:** `bootstrap/app.php` → `withMiddleware()` → alias `'admin'` --- ### 2026-05-06 — Дашборд **Создано:** - `app/Http/Controllers/Admin/DashboardController.php` — GET /admin/ → admin.dashboard - `resources/views/admin/dashboard.blade.php` — приветствие с именем пользователя --- ### 2026-05-06 — Справочники (DictSection + DictValue) **Создано:** - `database/migrations/2026_05_06_151148_create_dict_sections_table.php` — разделы справочников: code, label, is_system, is_hierarchical, sort_order - `database/migrations/2026_05_06_151148_create_dict_values_table.php` — значения: section_id (FK cascade), parent_id (самоссылка, FK cascade), value, sort_order - `app/Models/DictSection.php` — values() (корневые), allValues() (все) - `app/Models/DictValue.php` — section(), parent(), children() - `app/Http/Controllers/Admin/ManualController.php` — CRUD разделов + CRUD значений - `database/seeders/DictionarySeeder.php` — 8 системных разделов, 30+ марок с моделями - `resources/views/admin/manuals/index.blade.php` — список разделов - `resources/views/admin/manuals/section_form.blade.php` — форма раздела (create/edit) - `resources/views/admin/manuals/values.blade.php` — список значений (плоский + иерархический) - `resources/views/admin/manuals/value_form.blade.php` — форма значения (create/edit) **Структура справочников:** ``` dict_sections: makes (иерархия), body_types, countries, cities, colors_ext, colors_int, engine_volumes, options dict_values: Toyota → [Camry, Corolla, ...], Nissan → [...], ... ``` --- ### 2026-05-06 — Каталог автомобилей (Car) **Создано:** - `database/migrations/2026_05_06_151148_create_cars_table.php` — полная схема: статус, марка/модель, технические характеристики, цены, фото (JSON-массив) - `app/Models/Car.php` — $fillable, $casts (boolean, array), акцессоры status_label/condition_label - `app/Http/Controllers/Admin/CarController.php` — полный CRUD: - `index()` — список с поиском + фильтрами + пагинация 20 - `create()/edit()` — форма с данными из справочников - `store()/update()` — validated() + handlePhotos() - `destroy()` — удаление записи + файлов с диска - `handlePhotos()` — загрузка/замена main-фото и галереи, удаление выбранных - `resources/views/admin/cars/index.blade.php` — таблица с фильтрами и превью фото - `resources/views/admin/cars/form.blade.php` — большая форма (6 секций), JS-фильтрация моделей --- ## Структура маршрутов ``` GET / → welcome GET /admin/login → LoginController::showLoginForm POST /admin/login → LoginController::login POST /admin/logout → LoginController::logout [middleware: admin] GET /admin/ → DashboardController::index (admin.dashboard) /admin/cars → CarController (resource) (admin.cars.*) /admin/manuals/ → ManualController::index (admin.manuals.index) /admin/manuals/sections/* → ManualController::section* (admin.manuals.section.*) /admin/manuals/{section}/values/* → ManualController::value* (admin.manuals.value.*) ``` ## Структура хранения файлов ``` storage/app/public/cars/{id}/main/ ← главное фото (1 файл) storage/app/public/cars/{id}/gallery/ ← галерея (N файлов) public/storage/ → symlink (php artisan storage:link) ``` ## Команды для запуска ```bash php artisan migrate # применить миграции php artisan db:seed # создать admin + заполнить справочники php artisan storage:link # доступ к фото через /storage/... php artisan serve # запуск сервера (http://localhost:8000) ./vendor/bin/pint # форматирование PHP-кода ```