CLAUDE_MAP.md 6.0 KB

Карта проекта 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.phpwithMiddleware() → 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)

Команды для запуска

php artisan migrate          # применить миграции
php artisan db:seed          # создать admin + заполнить справочники
php artisan storage:link     # доступ к фото через /storage/...
php artisan serve            # запуск сервера (http://localhost:8000)
./vendor/bin/pint            # форматирование PHP-кода