Skip to content

Repository files navigation

Company API з універсальною версійністю даних

Реалізовано REST API для керування даними компаній з автоматичним збереженням історії змін (версійністю).

Ключові особливості

  • Універсальний модуль версійності: реалізовано через Trait та Polymorphic Relations. Це дозволяє додати версійність будь-якій моделі (наприклад, Product або User) одним рядком коду.
  • Автоматизація: нові версії створюються автоматично при події saved моделі (Eloquent Events), якщо дані були змінені.
  • Чистий код: використання PHP 8.3+ Enums для статусів відповіді та Form Requests для валідації.
  • REST стандарти: коректні HTTP-статуси (201 для створення/оновлення, 200 для дублікатів).

Технічний стек

  • Framework: Laravel 12
  • PHP: 8.4 (Alpine image)
  • Database: MySQL 8.4
  • Web Server: Nginx
  • Environment: Docker

Установка та запуск

Проєкт повністю підготовлений для розгортання через Docker за допомогою Laravel Sail.

  1. Клонуйте репозиторій:
    git clone <repository_url>
    cd company-api
    
  2. Запустіть Docker-контейнери:
    docker compose up -d --build
    
  3. Встановіть залежності та налаштуйте БД
    docker compose exec app composer run setup
    
    

API Ендпоінти

  1. Створення / Оновлення компанії POST /api/company

    Приклад запиту:

    Приклад запиту:

    {
      "name": "ТОВ Українська енергетична біржа",
      "edrpou": "37027819",
      "address": "01001, Україна, м. Київ, вул. Хрещатик, 44"
    }

    Логіка статусів у відповіді:

     *   **`201 Created`** (status: `created`) — нова компанія, створена перша версія.
     *   **`200 OK`** (status: `updated`) — дані змінено, створена нова версія.
     *   **`200 OK`** (status: `duplicate`) — дані ідентичні поточним, запис у базу не проводився.
    
  2. Історія версій GET /api/company/{edrpou}/versions

    Повертає повну історію змін для вказаної компанії (від нових до старих).

Тестування

Проєкт містить Feature-тести, що покривають основну логіку. Для запуску виконайте:

    docker compose exec app php artisan test

Тести перевіряють:

* Створення нових записів.
* Коректність інкременту версій при зміні полів.
* Виявлення дублікатів.
* Валідацію (EDRPOU до 10 символів, обов'язкові поля).

Архітектурне рішення

Версійність винесена в окремий App\Traits\HasVersions. Дані версії зберігаються в таблиці versions у форматі JSON. Це забезпечує гнучкість: при зміні структури таблиці companies схема таблиці версій залишається незмінною, що дозволяє легко масштабувати функціонал на інші моделі.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages