Pau Garcia -> Promoções do catálogo
Feito com
- PHP 8.1
- DDD
- Arquitetura Hexagonal (Portas e Adaptadores)
- CQRS
- Docker
- Testando com PHPUnit
Instruções principais
- Inicie contêineres docker:
docker-compose up -d
- Na primeira execução, instale as dependências:
docker-compose exec php-fpm bash
e depois composer install
ROTAS API
- http://localhost:33000/api/products-with-discounts (todos os produtos)
- http://localhost:33000/api/products-with-discounts?filterByCategory=boots (filtrar por categoria)
TESTES
- Para testes de lançamento,
docker-compose exec php-fpm bash
e depois vendor/bin/phpunit --testdox
EXPLICAÇÕES SOBRE DECISÕES
- Eu usei o Symfony para desenvolver produtos/descontos de API simples, e a resposta deles é uma lista de produtos com descontos aplicados.
- Eu uso um docker simples (webserver nginx/php-fpm/mongo) para executar o projeto.
- Eu decido usar o banco de dados "em memória" simplesmente pela funcionalidade deste exercício, mas no projeto desenvolvi repositórios Mongo, pois no exercício digo "Você deve levar em consideração. Eu decido usar o banco de dados "em memória" simplesmente pela funcionalidade deste exercício, mas no projeto desenvolvi repositórios mongo, pois no exercício digo "Você deve levar em conta que esta lista pode crescer para ter 20.000 produtos." e o mongoDB talvez seja uma boa opção nesta posição. poderia crescer para ter 20.000 produtos." e o mongoDB talvez seja uma boa opção nessa possibilidade.
- Criei toda estrutura com Arquitetura Hexagonal e DDD, com esta técnica separe nossas regras de negócio do restante do código.
- Um contexto de limite "Catálogo" dentro dele possui 3 entidades (Product, ProductDiscount e ProductPriceSummary).
- Eu usei o padrão CQRS em nossos casos de uso (comandos e consultas), isso nos ajuda a testá-los.