8000 GitHub - maxmishyn/autofleet
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

maxmishyn/autofleet

Repository files navigation

Auto Fleet

Установка и настройка

Проект для быстрого запуска вам понадобится docker и ddev. Можно запустить проект без ddev, но тогда вам придется самостоятельно настраивать окружение. Примечание В репозитарий включен файл .env с настройками для подключения к контейнерам внутри ddev. В реальном проекте, само собой, так делать не стоит.

Установка

  1. Установите ddev, следуя официальной документации.
  2. Клонируйте репозиторий:
git clone https://github.com/maxmishyn/autofleet
  1. Перейдите в директорию проекта и запустите ddev:
cd autofleet 
  1. Запустите ddev:
ddev start

Обратите внимание, что при запуске ddev автоматически все последующие операции с пункта 5 по поункт 9.

  1. Установите зависимости с помощью Composer:
ddev composer install
  1. Запустите миграции базы данных:
ddev artisan migrate
  1. Установите ресурсы для рендеринга API документации:
ddev artisan api-platform:install
  1. "Прогоните" тесты, чтобы убедиться, что всё работает:
ddev artisan test
  1. Компиляция фронтенда:
npm install
npm run build

На этом этапе проект должен быть готов к работе.

Вы можете открыть его в браузере по адресу https://plctest.ddev.site

Документация API доступна по адресу https://plctest.ddev.site/api/docs

Реализация API

Основные сущности

Автомобиль (Car)

Сущность, представляющая автомобиль в системе. Имеет следующие поля:

  • id: Уникальный идентификатор автомобиля. Выбранный тип - ULID позволяет использовать его в URL-ах также как и UUID не опосаясь риска подбора идентификатора. Но в отличие от UUID, ULID сохраняет сортировку по времени создания, что снижает нагрузку на индекс базы данных.
  • make: Марка автомобиля. В реальных проектах это поле и поле model скорее всего будет внешним ключом ссылающимся на другие таблицы, чтобы избежать дублирования данных и обеспечить гибкость при добавлении новых марок и моделей.
  • model: Модель автомобиля.
  • year: Год выпуска автомобиля. Для тестового задания используются ограничения диапазона от 2000 до 2025 года.
  • price: Цена автомобиля. Используется тип integer. Валидатор проверяет, что цена не меньше 100.

Методы API

Получение списка автомобилей

GET /api/cars

  • Возвращает список всех автомобилей в системе.
  • Содержимое разбивается на страницы. Размер страницы по умолчанию - 30 автомобилей. Текущая страница определяется параметром page.
  • Полное количество автомобилей возвращается в заголовке X-Total-Count для поддержки постраничного вывода. Размер страницы указан в заголовке X-Page-Count.

Получение информации об автомобиле

GET /api/cars/{id}

  • Возвращает информацию об автомобиле по его уникальному идентификатору.

Создание нового автомобиля

POST /api/cars

  • Создает новый автомобиль в системе.
  • Тело запроса должно содержать JSON с полями make, model, year и price.

Обновление информации об автомобиле

PUT /api/cars/{id}

  • Обн 764A овляет информацию об автомобиле по его уникальному идентификатору.

  • Тело запроса должно содержать JSON с полями make, model, year и price.

  • Примечание: тест этого метода отключен, т.к. случайно нашел, что в Laravel реализации API Platform есть баг, который не дает обновлять интексированные поля. (api-platform/core#7182). Тем не мении PUT не используется в SPA, поэтому это никак не ограничивает функционал.

Частичное обновление информации об автомобиле

PATCH /api/cars/{id}

  • Частично обновляет информацию об автомобиле по его уникальному идентификатору.
  • Тело запроса может содержать JSON с любым из полей make, model, year и price.
  • Если поле не указано, оно не будет изменено.

Удаление автомобиля

DELETE /api/cars/{id}

  • Удаляет автомобиль из системы по его уникальному идентификатору.

При ошибке валидации или других ошибках API возвращает HTTP статус 422 код и сообщение об ошибке в формате JSON.

Оптимизация

В качестве примера кеширования для выборки GET /api/cars внедрено кеширование результатов в Redis средствами Laravel. См. реализацию в app/Providers/CarDataProvider.php Следует обратить внимание, что в примере используется максимально упрощенная системв генерации идентификатора кешированного объекта. Фактически он завязан просто на номер страницы поле для сортировки.

Автоматизированные тесты

Проект содержит набор автоматизированных тестов, которые проверяют основные функции API. Тесты покрвают следующие аспекты:

  • CRUD операции для автомобилей включая обработку невалидных данных
  • тестрование кеша выборки автомобилей и его инвалидации
  • юнит тесты для Car

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0