add architect file
This commit is contained in:
parent
f985bfedd3
commit
afea76b053
141
architect.md
Normal file
141
architect.md
Normal file
@ -0,0 +1,141 @@
|
||||
## Подробная карта проекта
|
||||
|
||||
Этот проект представляет собой веб-приложение, разработанное на фреймворке Laravel, с использованием Vue.js для некоторых компонентов фронтенда. Он функционирует как "Многоцелевой генератор форм" (Multi-Purpose Form Generator), как указано в [`config/app.php`](config/app.php).
|
||||
|
||||
### 1. Обзор файловой структуры
|
||||
|
||||
Проект имеет стандартную структуру Laravel, которая хорошо организована и следует принципам MVC (Model-View-Controller). Основные директории:
|
||||
|
||||
* **[`app/`](app/)**: Содержит основной код приложения, включая модели, контроллеры, исключения, консольные команды, посредники и поставщики услуг.
|
||||
* **[`bootstrap/`](bootstrap/)**: Содержит файлы, которые загружают фреймворк и настраивают автозагрузку.
|
||||
* **[`config/`](config/)**: Содержит все файлы конфигурации приложения.
|
||||
* **[`database/`](database/)**: Содержит миграции базы данных, сидеры и фабрики моделей.
|
||||
* **[`public/`](public/)**: Корневая директория веб-сервера, содержащая общедоступные ресурсы, такие как скомпилированные активы (CSS, JavaScript), изображения и файл [`index.php`](public/index.php).
|
||||
* **[`resources/`](resources/)**: Содержит необработанные активы (LESS, SASS, JavaScript) и файлы представлений (Blade-шаблоны).
|
||||
* **[`routes/`](routes/)**: Определяет все маршруты приложения (веб, API, консоль, каналы).
|
||||
* **[`storage/`](storage/)**: Содержит скомпилированные шаблоны Blade, файловые сессии, кэш и другие файлы, генерируемые фреймворком.
|
||||
* **[`tests/`](tests/)**: Содержит автоматизированные тесты.
|
||||
* **[`vendor/`](vendor/)**: Содержит зависимости Composer.
|
||||
|
||||
### 2. Назначение каждого файла/директории
|
||||
|
||||
* **[`app/`](app/)**:
|
||||
* **[`app/UserForm.php`](app/UserForm.php)**: Модель Eloquent, представляющая связь между пользователями и формами, а также управляющая разрешениями для назначенных форм.
|
||||
* **[`app/Console/`](app/Console/)**:
|
||||
* **[`app/Console/Kernel.php`](app/Console/Kernel.php)**: Ядро консоли, определяющее расписание команд Artisan и загружающее пользовательские консольные команды.
|
||||
* **[`app/Console/Commands/`](app/Console/Commands/)**: Содержит пользовательские команды Artisan. Например, [`Template.php`](app/Console/Commands/Template.php) (строка 6, [`app/Console/Kernel.php`](app/Console/Kernel.php:6)) используется для команд, связанных с шаблонами.
|
||||
* **[`app/Enums/`](app/Enums/)**: Содержит перечисления, такие как [`User/RoleEnum.php`](app/Enums/User/RoleEnum.php) (строка 5, [`database/seeders/UsersTableSeeder.php`](database/seeders/UsersTableSeeder.php:5)), используемые для определения ролей пользователей.
|
||||
* **[`app/Exceptions/`](app/Exceptions/)**:
|
||||
* **[`app/Exceptions/Handler.php`](app/Exceptions/Handler.php)**: Централизованный обработчик исключений, который регистрирует и отображает ошибки. В режиме "demo" он также отправляет уведомления по электронной почте об исключениях (строки 48-50, [`app/Exceptions/Handler.php`](app/Exceptions/Handler.php:48)).
|
||||
* **[`app/Http/`](app/Http/)**:
|
||||
* **[`app/Http/helpers.php`](app/Http/helpers.php)**: Содержит набор глобальных вспомогательных функций, таких как `pos_boot` (для проверки лицензии), `is_saas_enabled` (для проверки включения SaaS-модуля) и `isAppInstalled` (для проверки установки приложения).
|
||||
* **[`app/Http/Controllers/`](app/Http/Controllers/)**: Содержит контроллеры, обрабатывающие логику запросов.
|
||||
* **[`app/Http/Controllers/Controller.php`](app/Http/Controllers/Controller.php)**: Базовый контроллер, предоставляющий общие методы для обработки HTTP-ответов (успех, ошибка, несанкционированный доступ), проверки подписки и квоты пользователя, управления посетителями и разрешениями форм.
|
||||
* **[`app/Http/Controllers/FormController.php`](app/Http/Controllers/FormController.php)**: Обрабатывает логику, связанную с формами (создание, редактирование, копирование, генерация виджетов, загрузка кода, управление глобальными шаблонами).
|
||||
* **[`app/Http/Controllers/FormDataController.php`](app/Http/Controllers/FormDataController.php)**: Управляет данными, отправленными через формы (сохранение, просмотр, редактирование, загрузка PDF, отчеты).
|
||||
* **[`app/Http/Controllers/HomeController.php`](app/Http/Controllers/HomeController.php)**: Контроллер для домашней страницы и связанных функций (например, получение шаблонов, назначенных форм, тестирование SMTP).
|
||||
* **[`app/Http/Controllers/UploadController.php`](app/Http/Controllers/UploadController.php)**: Обрабатывает загрузку и удаление файлов.
|
||||
* **[`app/Http/Controllers/Auth/`](app/Http/Controllers/Auth/)**: Содержит контроллеры для аутентификации пользователей (вход, регистрация, сброс пароля, подтверждение).
|
||||
* **[`app/Http/Controllers/form_bundle_libraries/`](app/Http/Controllers/form_bundle_libraries/)**: Содержит сторонние библиотеки, такие как PHPMailer, используемые для отправки электронной почты.
|
||||
* **[`app/Http/Controllers/Superadmin/`](app/Http/Controllers/Superadmin/)**: Контроллеры для функций супер-администратора (управление пользователями, пакетами, подписками).
|
||||
* **[`app/Http/Middleware/`](app/Http/Middleware/)**: Содержит посредники HTTP, которые фильтруют HTTP-запросы, входящие в приложение. Примеры включают [`Authenticate.php`](app/Http/Middleware/Authenticate.php) (для проверки аутентификации), [`IsInstalled.php`](app/Http/Middleware/IsInstalled.php) (для проверки установки приложения), [`VerifyCsrfToken.php`](app/Http/Middleware/VerifyCsrfToken.php) (для защиты от CSRF-атак).
|
||||
* **[`app/Mail/`](app/Mail/)**: Содержит классы для отправки электронной почты, например, [`ExceptionOccured.php`](app/Mail/ExceptionOccured.php) (строка 6, [`app/Exceptions/Handler.php`](app/Exceptions/Handler.php:6)).
|
||||
* **[`app/Notifications/`](app/Notifications/)**: Содержит классы для отправки уведомлений.
|
||||
* **[`app/Providers/`](app/Providers/)**: Содержит поставщиков услуг, которые регистрируют привязки контейнера служб, обработчики событий, посредники и маршруты.
|
||||
* **[`app/Traits/`](app/Traits/)**: Содержит трейты, которые могут быть повторно использованы в различных классах.
|
||||
* **[`bootstrap/`](bootstrap/)**:
|
||||
* **[`bootstrap/cache/`](bootstrap/cache/)**: Содержит файлы кэша, генерируемые Laravel для оптимизации производительности.
|
||||
* **[`config/`](config/)**:
|
||||
* **[`config/app.php`](config/app.php)**: Основной файл конфигурации приложения, определяющий название приложения, среду, режим отладки, URL, часовой пояс, локаль, ключ шифрования, поставщиков услуг и псевдонимы классов.
|
||||
* **[`config/auth.php`](config/auth.php)**: Конфигурация аутентификации.
|
||||
* **[`config/database.php`](config/database.php)**: Конфигурация подключения к базе данных, включая настройки для MySQL, SQLite, PostgreSQL и SQL Server, а также настройки Redis.
|
||||
* Другие файлы конфигурации (например, `barcode.php`, `mail.php`, `paypal.php`, `permission.php`, `session.php`, `webhook-server.php`) настраивают различные аспекты приложения и сторонние интеграции.
|
||||
* **[`database/`](database/)**:
|
||||
* **[`database/factories/`](database/factories/)**: Содержит фабрики моделей для генерации фиктивных данных.
|
||||
* **[`database/migrations/`](database/migrations/)**: Содержит файлы миграций базы данных, которые определяют структуру таблиц базы данных. Например, [`2014_10_12_000000_create_users_table.php`](database/migrations/2014_10_12_000000_create_users_table.php) создает таблицу `users`.
|
||||
* **[`database/seeders/`](database/seeders/)**: Содержит сидеры базы данных для заполнения базы данных начальными данными. Например, [`UsersTableSeeder.php`](database/seeders/UsersTableSeeder.php) создает пользователя-администратора по умолчанию.
|
||||
* **[`public/`](public/)**:
|
||||
* **[`public/index.php`](public/index.php)**: Точка входа в приложение.
|
||||
* **[`public/css/`](public/css/)**, **[`public/js/`](public/js/)**: Содержат скомпилированные файлы CSS и JavaScript.
|
||||
* **[`public/img/`](public/img/)**: Содержит изображения.
|
||||
* **[`public/plugins/`](public/plugins/)**: Содержит сторонние плагины и библиотеки.
|
||||
* **[`resources/`](resources/)**:
|
||||
* **[`resources/js/`](resources/js/)**: Содержит исходные файлы JavaScript.
|
||||
* **[`resources/js/app.js`](resources/js/app.js)**: Основной файл JavaScript, который инициализирует Vue.js, регистрирует компоненты Vue, включает сторонние библиотеки (AdminLTE, Ladda, easyqrcodejs, accounting-js) и определяет глобальные функции и правила валидации.
|
||||
* **[`resources/js/bootstrap.js`](resources/js/bootstrap.js)**: Инициализирует общие библиотеки JavaScript, такие как Axios и Lodash.
|
||||
* **[`resources/js/components/`](resources/js/components/)**: Содержит компоненты Vue.js, используемые в приложении (например, `CreateForm.vue`, `FieldConfigurator.vue`, `Mailchimp.vue`, `Webhook/`).
|
||||
* **[`resources/sass/`](resources/sass/)**: Содержит исходные файлы Sass/SCSS для стилей.
|
||||
* **[`resources/views/`](resources/views/)**: Содержит шаблоны Blade для представлений.
|
||||
* **[`resources/views/welcome.blade.php`](resources/views/welcome.blade.php)**: Начальное представление для корневого URL.
|
||||
* **[`resources/views/auth/`](resources/views/auth/)**: Представления для аутентификации (вход, регистрация, сброс пароля).
|
||||
* **[`resources/views/form/`](resources/views/form/)**: Представления, связанные с формами.
|
||||
* **[`resources/views/form_data/`](resources/views/form_data/)**: Представления для отображения и управления данными форм.
|
||||
* **[`resources/views/layouts/`](resources/views/layouts/)**: Содержит основные макеты приложения.
|
||||
* **[`resources/views/superadmin/`](resources/views/superadmin/)**: Представления для интерфейса супер-администратора.
|
||||
* **[`resources/views/user/`](resources/views/user/)**: Представления, связанные с профилем и настройками пользователя.
|
||||
* **[`routes/`](routes/)**:
|
||||
* **[`routes/web.php`](routes/web.php)**: Определяет веб-маршруты для пользовательского интерфейса приложения. Включает маршруты для аутентификации, домашней страницы, управления формами, данными форм, профилем пользователя, настройками и подписками. Также содержит маршруты для функций супер-администратора.
|
||||
* **[`routes/api.php`](routes/api.php)**: Определяет маршруты API.
|
||||
* **[`routes/console.php`](routes/console.php)**: Определяет консольные команды Artisan.
|
||||
* **[`routes/channels.php`](routes/channels.php)**: Определяет каналы широковещания для событий Laravel Echo.
|
||||
|
||||
### 3. Ключевые компоненты и их взаимодействие
|
||||
|
||||
* **Маршруты (`routes/`)**: Определяют, как HTTP-запросы направляются к соответствующим контроллерам. [`routes/web.php`](routes/web.php) является основным файлом для веб-интерфейса, а [`routes/api.php`](routes/api.php) - для API.
|
||||
* **Контроллеры (`app/Http/Controllers/`)**: Обрабатывают входящие HTTP-запросы, взаимодействуют с моделями для получения или сохранения данных и возвращают представления или JSON-ответы. Например, `FormController` обрабатывает запросы, связанные с формами, а `FormDataController` - с данными форм.
|
||||
* **Модели (`app/` и другие директории)**: Представляют таблицы базы данных и обеспечивают интерфейс для взаимодействия с ними. Примеры включают [`App\UserForm`](app/UserForm.php) (строка 7, [`app/UserForm.php`](app/UserForm.php:7)), `App\Form` (строка 5, [`app/Http/Controllers/Controller.php`](app/Http/Controllers/Controller.php:5)), `App\PackageSubscription` (строка 6, [`app/Http/Controllers/Controller.php`](app/Http/Controllers/Controller.php:6)) и `App\Visitor` (строка 8, [`app/Http/Controllers/Controller.php`](app/Http/Controllers/Controller.php:8)).
|
||||
* **Представления (`resources/views/`)**: Содержат HTML-код и логику отображения данных. Используют шаблонизатор Blade. Компоненты Vue.js (например, [`resources/js/components/CreateForm.vue`](resources/js/components/CreateForm.vue)) встраиваются в эти представления для создания интерактивного фронтенда.
|
||||
* **Посредники (`app/Http/Middleware/`)**: Выполняют задачи до или после обработки запроса контроллером. Например, `IsInstalled` проверяет, установлено ли приложение, а `Authenticate` проверяет аутентификацию пользователя.
|
||||
* **Вспомогательные функции (`app/Http/helpers.php`)**: Предоставляют общие утилиты, доступные по всему приложению.
|
||||
* **Консольные команды (`app/Console/Commands/`)**: Позволяют выполнять задачи через командную строку.
|
||||
* **Поставщики услуг (`app/Providers/`)**: Регистрируют и загружают различные компоненты и сервисы приложения.
|
||||
|
||||
**Взаимодействие:**
|
||||
Пользователь отправляет HTTP-запрос, который обрабатывается маршрутом ([`routes/web.php`](routes/web.php)). Маршрут направляет запрос к соответствующему контроллеру ([`app/Http/Controllers/`](app/Http/Controllers/)). Контроллер взаимодействует с моделями ([`app/UserForm.php`](app/UserForm.php), `App\Form` и т.д.) для выполнения операций с базой данных. После обработки данных контроллер возвращает представление ([`resources/views/`](resources/views/)) или JSON-ответ. Посредники могут перехватывать запросы до или после их обработки контроллером для выполнения таких задач, как аутентификация или проверка установки. Фронтенд, построенный на Vue.js ([`resources/js/app.js`](resources/js/app.js) и [`resources/js/components/`](resources/js/components/)), взаимодействует с бэкендом через AJAX-запросы к маршрутам, определенным в [`routes/web.php`](routes/web.php) и [`routes/api.php`](routes/api.php).
|
||||
|
||||
### 4. Общая архитектура проекта
|
||||
|
||||
Проект следует архитектурному паттерну **MVC (Model-View-Controller)**, который является стандартным для Laravel.
|
||||
|
||||
* **Модели**: Представлены классами Eloquent ORM в директории [`app/`](app/) (например, [`UserForm.php`](app/UserForm.php)). Они отвечают за взаимодействие с базой данных и бизнес-логику, связанную с данными.
|
||||
* **Представления**: Находятся в директории [`resources/views/`](resources/views/) и используют шаблонизатор Blade. Они отвечают за отображение данных пользователю. Кроме того, компоненты Vue.js в [`resources/js/components/`](resources/js/components/) также служат частью уровня представления, обеспечивая интерактивность на стороне клиента.
|
||||
* **Контроллеры**: Расположены в [`app/Http/Controllers/`](app/Http/Controllers/). Они действуют как посредники между моделями и представлениями, обрабатывая пользовательский ввод, взаимодействуя с моделями и выбирая соответствующее представление для отображения.
|
||||
|
||||
Дополнительно, проект включает в себя:
|
||||
* **Посредники (Middleware)**: Для фильтрации HTTP-запросов.
|
||||
* **Маршрутизация (Routing)**: Для определения конечных точек приложения.
|
||||
* **Консоль (Console)**: Для выполнения задач командной строки.
|
||||
* **Сидеры и Миграции (Seeders & Migrations)**: Для управления схемой базы данных и начальными данными.
|
||||
* **Система аутентификации и авторизации**: Встроенная в Laravel, с дополнительными ролями через `spatie/laravel-permission`.
|
||||
* **SaaS-функциональность**: Присутствуют проверки подписки и квоты, что указывает на возможность использования проекта в качестве SaaS-платформы.
|
||||
|
||||
### 5. Используемые технологии/фреймворки
|
||||
|
||||
* **Бэкенд**:
|
||||
* **PHP**: Основной язык программирования.
|
||||
* **Laravel (v9.52)**: Веб-фреймворк (подтверждено `readme.md` и `composer.json`).
|
||||
* **MySQL**: Предполагаемая база данных по умолчанию (на основе [`config/database.php`](config/database.php)).
|
||||
* **Composer**: Менеджер зависимостей PHP.
|
||||
* **Spatie/laravel-permission**: Для управления ролями и разрешениями пользователей.
|
||||
* **Srmklive/paypal**: Для интеграции с PayPal.
|
||||
* **Stripe/stripe-php**: Для интеграции со Stripe.
|
||||
* **Intervention/image**: Для обработки изображений.
|
||||
* **Milon/barcode**: Для генерации штрих-кодов.
|
||||
* **Carlos-meneses/laravel-mpdf**: Для генерации PDF.
|
||||
* **Spatie/laravel-newsletter**: Для интеграции с Mailchimp (или аналогичными сервисами рассылки).
|
||||
* **Spatie/laravel-webhook-server**: Для обработки веб-хуков.
|
||||
* **Yajra/laravel-datatables-oracle**: Для работы с таблицами данных.
|
||||
* **PHPMailer**: Сторонняя библиотека для отправки электронной почты (найдена в [`app/Http/Controllers/form_bundle_libraries/PHPMailer/`](app/Http/Controllers/form_bundle_libraries/PHPMailer/)).
|
||||
|
||||
* **Фронтенд**:
|
||||
* **JavaScript**: Основной язык сценариев.
|
||||
* **Vue.js (v2.5.17)**: Прогрессивный фреймворк JavaScript для построения пользовательских интерфейсов (подтверждено `package.json` и [`resources/js/app.js`](resources/js/app.js)).
|
||||
* **NPM/Yarn**: Менеджер пакетов JavaScript (используется `package.json`).
|
||||
* **Laravel Mix (v4.0.7)**: API для определения шагов сборки Webpack для приложений Laravel.
|
||||
* **Sass**: Препроцессор CSS.
|
||||
* **AdminLTE (v3.0.0-beta.2)**: Шаблон панели администратора (подтверждено `package.json` и [`resources/js/app.js`](resources/js/app.js)).
|
||||
* **Accounting.js**: Для форматирования валюты.
|
||||
* **Easyqrcodejs**: Для генерации QR-кодов.
|
||||
* **Ladda**: Для кнопок с индикаторами загрузки.
|
||||
* **Particles.js**: Для интерактивного фона на странице приветствия ([`resources/views/welcome.blade.php`](resources/views/welcome.blade.php)).
|
||||
* **VueDraggable**: Для функциональности перетаскивания.
|
Loading…
Reference in New Issue
Block a user