README.md

Новая версия IT-системы для Карси-Хоровац

  • Это версия которую могу показывать работодателям, поэтому:
    • Здесь данные БД и пользователей удалены, перед запуском их нужно указать согласно инструкции.
    • В истории Гита будет скорее всего 1-2 коммита, а не вся история разработки, потому что я скопировал его из оригинального репозитория, чтобы скрыть оригинаьлные пароли и доступы.
    • Оригинальный репозиторий могу показать по запросу, доступы не могу показать даже по запросу.

Система реализует функционал:

  • Изменения и настройки меню (блюд в меню)
  • Создания новых заказов для кассира
  • Просмотр и управления заказами
  • Интерфейс для просмотра списка и статуса заказов посетителями
  • Интерфейс для просмотра заказов, их состава и нюансов приготовления поварами
  • Систему контроля доступа, для разделения доступа к различному функционалу для разных пользователей
  • Систему генерации отчетов по дням
  • Систему просмотра отчетов по дням
  • Требования

  • PHP 7.4+
  • Composer 2.0+
  • Любой сервер Apache или Nginx с поддержкой PHP

Установка

  1. Скопировать файлы приложения на серве в целевую папку
  2. Установить параметры вашей БД в файле /config/db.json
  3. Указать контакты отправителя в файле /config/params.json
  4. Указать пароли пользователей, а так-же сгенерировать accessToken’ы и authKey в файл /infrastructure/seeders/UsersSeeder.php
  5. (Для генерации accessToken и authKey можно воспользоваться Uuid-генератором с помощью команды: php yii uuid/get . Указать их надо вручную)
  6. Указать CookieValidationKey в файле /config/web
  7. Получить зависимости с composer’а коммандой: composer update –prefer-dist
  8. Настроить сервер на папку /web проекта
    • Примеры NGINX скрипта и htaccess иструкций для apache есть в папке /deploy
  9. Проверить работу сервера зайдя на целевую страницу через браузер
  10. Провести миграции командой: php yii migrate
  11. Заполнить базу первичными данными командой: php yii seed/all

Архитектура приложения

  • Приложение делится на 3 слоя:
    1. application - слой “приложения”:
      • Файловая структура:
        • assets - конфигурации наборов приложенных .js и .css файлов для различных типов страниц.
        • base - общие предки и абстрактные классы для объектов слоя
        • commands - контроллеры для CLI команд
        • controllers - контроллеры, содержащие в себе:
          • Usecase-инструкции на уровне ТакойТоКонтекст->СделайТоТо().
          • Скрипты получения и проверки входящих данных (со стороны пользователя).
          • Конфигурация VIEW файлов и виджетов.
        • contracts - Интерфейсы сервисов, которые необходимы для работы слоя.
        • forms - объекты отражающие бизнес-сущности в контексте конкретных задач создания I/O-интерфейсов для пользовтаеля:
          • генерация форм;
          • генерация таблиц;
          • настройка виджетов;
          • быстрая загрузка данных форм, полученных с помощью генерации.
        • rbac - настройки пользовательского доступа.
        • mail - VIEW-файля для оторисовки email’ов.
        • views - VIEW-файлы для отрисовкис траниц в браузере.
        • widgets - виджеты (повторяющиеся компоненты, включающие в себя собстввенную MVC структуру).
      • Использование доменных сервисов:
        • Каждый контролер должен содержать в себе в виде свойств свойства, необходимые для него сервисы соответствующие необходимым интерфейсам.
        • Контроллер может использователь любые доменные сервисы, даже в рамкаж одного action’а
        • Доменные сервисы из одной доменной области объединяются в ServiceKit’ы (объект типа “фасад”), откуда вызываются
        • Инициализация доменных сервисов в фасаде происходит посредством DI-контейнера
        • Доменные сервисы декорируют доступ к инфраструктуре - любой доступ к данным - только через них (исключение: использование сидеров)
    2. domains - Доменные области.
      • Каждая доменная область размещена в отдельной папке.
      • Доменные области не связаны между собой.
      • Доменные области состоят из:
        1. Доменных контекстов (название папки = название контекста):
          • Домен делится по контекстам по границам аггрегации сущностей и области применения.
          • Доменный контекст включает в себя:
            • Репозитории для используемых аггрегированных сущностей, с четко-заданными границами аггрегации
            • Доменный сервис который:
              • Включает методы упраления доменом в конкретном контексте, где сущности имею конкретное значение и конкретные границы аггрегации.
              • Методы доменного сервиса выполняют конкретную бизнес-задачу.
              • Доменный сервис представляет собой синглтон.
              • Доменный сервис представляет собой инфтрумент для решения бизнес-задач, должен выполнять контракт доменного сервиса, заданный в application-слое.
              • По этой-же причине публичные методы доменного сервиса принимают в качестве параметра и возвращают только:
                • Переменные базовых типов.
                • Объекты из слоя application.
        2. entities - папка с сущностями
          • В данной архитектура сущности анемичны, поэтому представленны только интерфейсами.
          • Сущности получаются из инфраструктурного слоя посредством репозиториев или фабрик
          • Контракт сущности выполняется в объекте тоже на уровне инфраструктурного слоя.
          • Фаблики сущностей так-же представленны интерфейсами.
        3. exceptions - доменно-спецефические ошибки
        4. helpers - Хелперы:
          • Т.е. все сущности анемичны все их свойства представленны переменными простых типов (кроме аггрегации)
          • По указанной выше причине требуется инструмент для реализации доменно-специфической логики, связынной со свойствами объектов (кроме аггрегации).
          • Каждый хелпер заменяет собой ValueObject конкретного типа, реализует соответствующую доменную логику.
          • Каждый хелпер является статическим, используется только в рамках доменного слоя.
        5. tools - Инструменты для частных доменных задач
          • Забирают в себя код более низкого уровня абстрацкии, чем уровень доменного сервиса.
          • Служат для выполнения частных доменных задач.
      • Список доменных областей:
        • menu - управление меню, блюда в меню, настройка ингредиентов
        • orders - управление заказами, блюда в заказах
        • summary - сводка по дням
        • users - пользователи, доступы и авторизация
      • Репозитории и фабрики объектов на данном уровне представленны как интерфейсы. Их равлизация лежит на “инфраструктурном” слое.
      • Фабрики и репозитории являются синглтонами
      • Фибрики и репозитории подключаются посредством DI-контейнера
    3. infrastructure - Инфраструктурный слой:
      • Содержит всю логику использования транспортов и хранилищ (в т.ч. БД)
      • Файловая структура:
        • activeRecords - Active Record’ы и в них реализация функционала бизнес-сущностей, которые требует от них доменный слой.
        • factories - фабрики этих объектов которые представляют собой Active records + entities для передачи в использование в доменый слой.
        • migrations - миграции
        • repositories - репозитории, используемые в доменах для получения сущностей из хранилищ (БД)
        • seeders - сидеры, для начальной инициализации БД.
  • Прочие директории приложения:
    • base - абстрактные классы, используемые в различных слоях
    • config - конфигурации для фреймфорка
    • deploy - скрипты и полезные файлы, которые могу использоваться в процессе развертывания
    • runtime - временные объекты текущего артефакта
    • tests - тесты
    • vendor - подгруженные сторонние зависимости
    • web - папка общего доступа. хранит в себе:
      • index-файл - являющийся тчной фвхода в веб-приложение
      • статическую графику
      • сгенерированные пакеты asset’ов
      • файлы css и js-скрипты
      • шрифты
      • robot-инструкцию для поисковиков

Лицензия

Любое использование ПО в коммерческих целях возможно только с разрешения разработчика и должно быть прекращено по первому требованию разработчика.

Контакты

Анатолй стародубцев E: Tostar74@mail.ru T: +7 999 586 5856

Конвейеры
0 успешных
0 с ошибкой