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.propertiescom 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.