Este repositório contém a solução para o desafio back end de uma plataforma de pagamentos. O projeto foi desenvolvido utilizando Spring Boot, Spring Data JPA, Docker, Docker Compose e MySQL. Também foram criados diagramas de arquitetura para melhor compreensão da solução.
- Spring Boot: 🚀 Framework principal para desenvolvimento do aplicativo.
- Spring Data JPA: 📊 Utilizado para persistência de dados.
- Docker: 🐳 Ferramenta de containerização para empacotar a aplicação.
- Docker Compose: 📦 Utilizado para orquestrar containers Docker.
- MySQL: 🗄️ Banco de dados relacional
A API possui documentação interativa gerada pelo Swagger, que facilita a visualização e teste dos endpoints.
Acesso à Documentação Após iniciar a aplicação, acesse http://localhost:8080/swagger-ui.html para visualizar a documentação da API.
- ✅ Validação na criação de contas: Implementação de regras de negócio para garantir que todas as contas criadas sejam válidas.
- 💸 Pagamentos: Sistema robusto para realizar pagamentos entre usuários, incluindo verificação e confirmação.
- 📧 Envio de e-mail pós-pagamento: Notificações por e-mail enviadas automaticamente após a realização de pagamentos.
- 🔒 Sistema autorizador externo de pagamentos: Integração com um sistema externo para autorização de pagamentos, garantindo segurança e confiabilidade.
- Docker instalado
- Docker Compose instalado
- Java 11 ou superior
- Maven instalado
-
Clone este repositório:
git clone https://github.com/Fioshi/picpay-simp.git
-
Configure o arquivo
application.properties
com as informações necessárias para conexão com o banco de dados. -
Compile o projeto:
mvn clean install
-
Execute a aplicação utilizando Docker Compose:
docker-compose up --build
-
A aplicação estará disponível em http://localhost:8080.
graph TD;
User[Usuário do PicPay];
BackendAPI["Simple PicPay System [Software]"];
EmailSystem["Sistema de envio de notificação externo [Software]"];
AuthSystem["Sistema autorizador externo [Software]"];
User -->|Realizará pagamentos via| BackendAPI;
BackendAPI -->|Envia notificação por| EmailSystem;
BackendAPI -->|Confirma ou não o pagamento| AuthSystem;
EmailSystem -->|Envia notificação para| User;
graph TD;
User[Usuário do projeto];
BackendAPI["API de Backend (Java + Springboot)"];
Database["Banco de Dados (MySQL)"];
EmailSystem["Sistema de envio de notificação por e-mail"];
AuthSystem["Sistema de autenticação"];
User -->|Requisição HTTP| BackendAPI;
BackendAPI -->|📧 Envia notificação usando| EmailSystem;
BackendAPI -->|🔐 Verifica pagamento usando| AuthSystem;
Database -.->|📂 Persiste e retorna dados| BackendAPI;
graph TD
User[Usuário do PicPay] -->|Solicitações HTTP| AccountController
User -->|Solicitações HTTP| UserController
User -->|Solicitações HTTP| PaymentController
AccountController[Account Controller] -->|Chama para processar dados| AccountService
UserController[User Controller] -->|Chama para processar dados| UserService
PaymentController[Payment Controller] -->|Chama para processar dados| PaymentService
AccountService[Account Service] -->|Chama para persistir e recuperar dados| AccountRepository
UserService[User Service] -->|Chama para persistir e recuperar dados| UserRepository
PaymentService[Payment Service] -->|Chama para persistir e recuperar dados| PaymentRepository
PaymentService -->|Envia pedido de autorização| ExternalAuthorizationSystem
PaymentService -->|Envia pedido de notificação| ExternalNotificationSystem
AccountRepository[Account Repository] -->|Persistência| Database[MySQL Database]
UserRepository[User Repository] -->|Persistência| Database[MySQL Database]
PaymentRepository[Payment Repository] -->|Persistência| Database[MySQL Database]
PaymentService --> PaymentValidators[Payment Validators]
ExternalNotificationSystem[Sistema de Envio de Notificação Externo]
ExternalAuthorizationSystem[Sistema Autorizador Externo]
subgraph API Backend [Java e Spring Boot]
AccountController
UserController
PaymentController
AccountService
UserService
PaymentService
AccountRepository
UserRepository
PaymentRepository
end
subgraph DatabaseSystem [Sistema de Banco de Dados]
Database
end
subgraph ExternalSystems [Sistemas Externos]
ExternalNotificationSystem
ExternalAuthorizationSystem
end
A aplicação possui os seguintes endpoints disponíveis:
POST /user
: Criação de um novo usuário e conta.POST /pagamentos
: Realização de um pagamento.GET /pagamentos/{payee}
: Obtenção de informações de um pelo recebedor do dinhero.GET /pagamentos/{payer}
: Obtenção de informações de um pagamento pelo pagador.