Описание реализации
Многослойная архитектура
- возможно оверинжиниринг в данном случае, но закладывает основу для дальнейшего развития проекта, потребность в котором всегда возникает внезапно
Немного дополнительной вёрстки, меню и фичей
- для придания минимальной законченности функционалу
Асинхронное создание заказа
- на предварительной беседе был вопрос про очереди
Хранилище
- mysql в контейнере; сущности: User, PriceList, Order; ORM - Doctrine
Тестирование
- по причине асинхронности основного функционала немного усложнились тесты;
конечно асинхронные приложения целесообразнее тестировать в полностью изолированной среде,
но в данном случае ограничился разделением создания заказа на две очереди для test и dev окружения
Функционал
- Чтобы войти - нужно зарегистрироваться, email можно ввести фейковый - верификация отсутствует
- После успешной регистрации пользователь получает флэш-сообщение, перенаправляется на форму входа
- Для создания заказа по дефолту используется email юзера для минимизации ошибок, email можно поменять
- Поле выбора услуги всегда заполнено, поэтому оно не проверяется, проверятся только поле email
- При некорректных данных на форме входа, регистрации, создания заказа пользователь получает сообщение об ошибке
- При успешном создании заказа пользователь получает флэш-сообщение и может посмотреть свои заказы в списке заказов
- Хранение атрибутов Order - title и price в дополнение к ссылке на PriceList сделано для того,
чтобы хранить существенные условия сделки с пользователем независимо от прайс-листа,
который гипотетически может измениться