API em laravel utilizando PHP. Consiste na transferência de saldo entre contas aplicando conceitos lock pessimista, unit of work e jobs/queues para envio de e-mail. Foco da aplicação é a consistência dos dados e transações.
A aplicação foi desenvolvida utilizando as Tecnologias abaixo, segue links para consultas de documentação:
- Laravel 10.x - Backend PHP Framework
- Docker - Aplicação Rodando em Container Docker
A arquitetura é de uma API, utilizando o framework Laravel, adicionando o Repository Pattern com uma camada de Services.
Responsável pela representação e manipulação dos dados no banco de dados
Faz o controle de autenticação da aplicação.
É a camada de entrada da aplicação. Nele são validados os parâmetros, os endpoints dos recursos e os serviços que serão utilizados para operação. O controller utiliza de FormRequests para validação dos parâmetros de entrada.
Local onde as regras de negócio da aplicação são desenvolvidas, estabelecendo a conexão entre o controlador e os repositórios.
Funciona como uma camada de abstração para operações de banco de dados.
São utilizados para envio de e-mails com o mock de confirmação.
São utilizados para envio de e-mails com o mock de confirmação.
Certifique-se de ter as seguintes ferramentas instaladas em sua máquina:
- Git
- Docker docker
- Docker Compose
git clone <url-do-repo>
cd nome-do-repo
Crie a .env a partir da .env.example
cd backend
cp .env.example .env
Na raiz do projeto, execute:
docker-compose build
docker-compose run --rm composer install --ignore-platform-reqs
docker-compose run --rm artisan key:generate
docker-compose run --rm artisan jwt:secret
docker-compose up -d
docker-compose run --rm composer init-db
Url padrão do backend:
Para a realização dos testes, é utilizado o PHPUnit. Foram desenvolvidos testes de integração para a API. Para consultar o funcionamento dos testes com laravel, basta acessar a documentação de Testes.
Para rodar os testes, basta executar dentro da pasta backend:
php artisan test
OU rodar com docker:
docker compose run --rm --entrypoint bash artisan
php artisan test
obs: bash pode ser trocado por 'sh' em caso de Sistemas diferentes.
- Melhoria da Unit of Work para as transações.
- Travar somente o usuário que está a enviar o dinheiro para melhoria de performance.
- Criar fila para processar o saldo a ser enviado na conta de destino.
- Disparar notificações baseados nas transações ocorridas.
- Construção de Load Balancer e Rate limiter para requisições.