Демонстрационная реализация json API на symfony Используются следующие сущности:
- пользователи (AppUser)
- клиенты (Client)
- счета (Account)
У пользователя (AppUser) может быть роль или админа (ROLE_ADMIN), или менеджера (ROLE_MANAGER).
Админ может видеть всех пользователей, менеджер только пользователей с ролью ROLE_MANAGER.
Только админ может создавать, удалять пользователей и изменять параметры пользователей.
У менеджеров есть персональные клиенты (Client), которых они могут просматривать, создавать, изменять и удалять.
Админ может делать тоже самое, но с любым клиентом.
У каждого клиента есть счета (Account), которых может быть максимум 3 с предопределёнными типами: rub, usd, eur.
Менеджер может просматривать, создавать, изменять и удалять счета только своих клиентов.
Админ может делать тоже самое, но с счётами любого клиента.
Дополнительно есть метод ConvertCurrency
, который позволяет конвертировать деньги с одного счёт в другой,
обязательные условия для этого:
- оба счёта с нужным типом должны существовать
- сумма конвертация не должна превышать суммы исходного
Апи методы сформированы по логике CRUD. Все методы кроме логина требует JWT токен для авторизации
Используется:
- Symfony 7 (PHP 8.3)
- PostgreSQL 16
- Nginx 1.25
-
Разворачиваем тестовое окружение через докер, используя конфиг docker-compose.yml:
make up
билдим и запускаем сервисы (алиас дляdocker-compose up -d --build
)make attach-php
заходим в контейнер php (алиас дляdocker-compose exec php bash
)
-
Копируем
.env.local.example
в.env.local
-
Внутри контейнера устанавливем зависимости, создаём бд, миграции и загружаем тестовые данные
- внутри контейнера php запускаем
make set-up-all
(алиас дляmake deps jwt schema migration load-fixtures
) make jwt
для генерации ключей (алиас lexik:jwt:generate-keypair)
- внутри контейнера php запускаем
Запуск всех тестов make test
, только unit make test-u
, только функциональные make test-f
Используется NelmioApiDocBundle (OpenApi).
Адрес доументации /api/doc
make up
- на хосте сборка и запуск всех сервисов из docker-compose.ymlmake stop
- на хосте остановка всех сервисовmake attach-php
- на хосте вход в php контейнерmake lint-phpcs
- запуск линтера (PHP_CodeSniffer)make test
- запуск всех тестовmake test-u
- запуск только unit тестовmake test-f
- запуск только функциональных тестовmake schema
- создание основной бд и тестовойmake deps
- установка зависимостей через composermake jwt
- генерация JWT ключейmake load-fixtures
- загрузка фикстурmake migration
- создание миграции и миграция в бд
Если нет php и make на хосте, то делаем всё это внутри контейнера php кроме команд (up, stop, attach-php)