Так же тестовое задание с переписанным кодом для ABCP
- Нестандартная Laravel структура файлов
- Контроллеры, ресурсы и тд разделены по сущностям. Например UserController следует искать в
app/User/Controller. - Общие абстрактные классы/контракты или хелперы находятся в
app/Common- Все основные файлы фреймворка вынесены в
app/Common/Framework
- Все основные файлы фреймворка вынесены в
- Контроллеры, ресурсы и тд разделены по сущностям. Например UserController следует искать в
- Глубокие ресурсы, если в обычном проекте нужно делать
return CarResource::collection($cars)то тут можно вернутьreturn new ResponseResource($cars)- Это дает стандартизацию ответов
- Если $cars - это
Paginatorто в таком случае автоматически прокинется информация оcurrent_page,last_page,limit,total - Если у Car есть relation, то он также будет завернут в свой ресурс, например Car->user будет завернут в UserResource.
- Архитектура драйверов
- У каждой фичи есть контракт и описание
- У каждого драйвера свой набор фич
- Все фичи по умолчанию должны вызываться в CarDriverOrchestrator, в нем менеджмент фичами. Например у драйвера может быть фича
OpenDoorиOpenDoors, в зависимости от зависимого API. В таком случае в DriverOrchestrator у нас есть функцияopenDoors(array $doorNumbers)и внутри проверка на сущестование фичей.
- Пример оптимизации ресурсивной функции
- Дан массив бесконечной глубины дерева файлов, на выходе плоский массив путей файлов
- Пример оптимизации через ссылки, указатели и стек.
- 2x быстрее, ~2x меньше памяти
Упростить DeepJsonResourceРефакторинг на упрощение
- Дописать
CarDriverOrchestratorдля текущих фич - Дописать borrow/release для Car
- Использовать
Semaphore - Использовать
DB::transaction - Юзер может вызывать фичи только если он занял машину
- Список машин юзера
- Проверка занятых юзером машин
- Использовать
- Добавить ещё пару фич для демонстрации, например
ApiFeature - Сделать Unit тесты
На DeepJsonResource- На Car
- На драйвер
- Добавить
Actionsв Car и демки для них - Добавить работу с валютами, кошельками, деньгами у юзера
- Создание кошельков RUB/USD
- Передача денег между кошельками
- ? Блокчейн с историей либо обычный баланс + логи
- Динамический курс, пересчет раз в сутки пн-пт
- Во избежания багов следуется сделать все валютные сделки через main валюту, например USD. Если по какой-то причине RUB => USD => AMD => RUB выдаст не тоже количество денег из-за float ошибок или ещё чего-то, будет плохо.