Skip to content

toririo/organizations-api

Repository files navigation

Справочник организаций (REST API на Laravel 12)

Тестовое задание: REST API для справочника организаций, зданий и видов деятельности.

Функционал

  • Поиск организаций:

    • по названию
    • по координатам (радиус и прямоугольник)
    • по зданию
    • по виду деятельности (с учётом вложенности)
  • Хранение зданий с координатами

  • Древовидная структура видов деятельности (ограничена до 3 уровней)

  • Доступ через X-API-KEY

  • Документация через Swagger UI (openapi.yaml)

  • Контейнеризация через Docker

Стек

  • Laravel 12
  • PHP 8.2
  • Postgres
  • Docker / Docker Compose
  • Swagger UI / OpenAPI 3.0

Структура проекта

  • app/Models — модели Organization, Building, Activity, Phone
  • app/Http/Controllers — контроллеры: OrganizationController, ActivityOrganizationController и др.
  • app/Observers/ActivityObserver.php — ограничение глубины видов деятельности
  • routes/api.php — маршруты API
  • routes/web.php — маршруты документации
  • public/docs/openapi.yaml — спецификация OpenAPI 3.0
  • resources/views/swagger.blade.php — шаблон Swagger UI

Авторизация

Все запросы требуют заголовок:

X-API-KEY: ваш_секретный_ключ

Ключ указывается в .env:

API_KEY=123456

Установка

git clone https://github.com/toririo/organizations-api.git
cd organizations-api

cp .env.example .env
# Укажи API_KEY и настройки базы

docker compose up -d --build

docker compose exec app composer install
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate --seed

Документация

Swagger UI доступен по адресу:

http://localhost/api/documentation

Спецификация OpenAPI:

http://localhost/docs/openapi.yaml

Примеры запросов

Список организаций с фильтрами

GET /api/v1/organizations?name=мясо&lat=55.75&lng=37.61&radius=2

Организации в здании

GET /api/v1/buildings/1/organizations

Организации по виду деятельности

GET /api/v1/activities/2/organizations

Очистка

docker compose down -v

Дополнительно (если расширять)

  • Добавить CRUD через POST/PUT/DELETE
  • Вынести фильтрацию в отдельный сервис-класс
  • Покрыть feature-тестами API

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages