Symfony REST API для расчета цены продукта с учетом налогов и скидок, а также для осуществления покупки через платежные процессоры (PayPal или Stripe).
- PHP 8.3+
- Composer
- Docker
- PostgreSQL 16
- Redis (опционально - выключен по умолчанию)
-
Клонируйте репозиторий и перейдите в директорию:
git clone https://github.com/codefinecode/calculate-price.git cd calculate-price -
Соберите и запустите контейнеры:
make init
Это выполнит:- Сборку образов.
- Запуск контейнеров.
- Применение миграций.
- Загрузку фикстур.
-
Запустите тесты:
make test
по умолчанию приложение длоступно на порту 8337: http://localhost:8337/
- Метод:
POST
{
"product": 1,
"taxNumber": "DE123456789",
"couponCode": "D15"
}{
"product": "Iphone",
"base_price": 85,
"discount": 15,
"tax": 16.15,
"final_price": 101.15
}- Метод:
POST
{
"product": 1,
"taxNumber": "IT12345678900",
"couponCode": "D15",
"paymentProcessor": "paypal"
}{
"status": "success",
"message": "Payment of 103.7 processed via PayPal"
}{
"product": 1,
"taxNumber": "IT12345678900",
"couponCode": "D15",
"paymentProcessor": "stripe"
}{
"status": "success",
"message": "Payment of 103.7 processed via Stripe"
}Проект включает следующие контейнеры:
- PHP (
sio_test) : Основной контейнер с Symfony и Doctrine. - PostgreSQL (
database) : База данных для хранения продуктов и купонов. - Adminer (
adminer) : Интерфейс для администрирования базы данных. - Redis (
redis) : Опциональный сервис для кеширования результатов расчета цен. (в коде не реализован и закомментирован вdocker-compose.yml, хотя было бы целесообразно использовать)
Запустите все контейнеры:
make init
Запустите тесты:
make test
| Команда | Описание |
|---|---|
make init |
Инициализация и запуск проекта (сборка, запуск, миграции, фикстуры). |
make up |
Запуск контейнеров. |
make down |
Остановка и удаление контейнеров. |
make test |
Запуск PHPUnit-тестов с подготовкой тестового окружения. |
make console |
Подключение к консоли приложения. |
make drop-db |
Удаление базы данных. |
make drop-test-db |
Удаление базы данных для тестов. |
make db |
Создание основной и тестовой баз данных. |
- Добавление новых платежных процессоров :
- Создайте адаптер для нового процессора, реализующий интерфейс
PaymentProcessorInterface.
- Создайте адаптер для нового процессора, реализующий интерфейс
- Интеграция Redis :
- Раскомментируйте Redis в
docker-compose.yml. - Настройте кеширование в сервисах через
services.yaml.
- Раскомментируйте Redis в
- Добавление новых типов скидок :
- Создайте новую стратегию, реализующую интерфейс
DiscountStrategyInterface.
- Создайте новую стратегию, реализующую интерфейс
MIT License