──────▄▀▄─────▄▀▄
─────▄█░░▀▀▀▀▀░░█▄
─▄▄──█░░░░░░░░░░░█──▄▄
█▄▄█─█░░▀░░┬░░▀░░█─█▄▄█
Bem-vindo ao repositório iff-bsi-sistema-bancario-backend, um projeto desenvolvido durante minha faculdade visando proporcionar a mim e outros colegas uma experiência prática e educacional no uso de spring e outros recursos.
Este repositorio mantem o backend do sistema que funciona junto a um frontend separado. Essa parte se trata do backend e foi utilizada pelas materias de Projeto Orientado a Objetos e Administração de Banco de Dados com meu grupo @Micael e @Caike.
O Spring Boot utiliza o padrão MVC (Model-View-Controller) para separar a lógica de negócios, a apresentação e o controle de fluxo em diferentes componentes. Isso ajuda a manter o código organizado e torna mais fácil para os desenvolvedores trabalharem em diferentes partes do aplicativo. O modelo é responsável pela representação dos dados do aplicativo, a visão é responsável pela interface do usuário e o controlador é responsável por gerenciar as interações entre o modelo e a visão.
O padrão Singleton é usado para garantir que apenas uma instância de uma classe seja criada durante a execução do aplicativo. O Spring Boot usa o padrão Singleton em muitos de seus componentes principais, como o contêiner IoC e o gerenciador de sessão. Isso ajuda a economizar recursos e garantir que os componentes principais do aplicativo estejam sempre disponíveis.
O padrão Strategy é usado para definir um conjunto de algoritmos que podem ser intercambiáveis. No Spring Boot, o padrão Strategy é usado em muitos componentes, como serviços de autenticação e autorização. Os desenvolvedores podem escolher a estratégia apropriada para seu aplicativo, e o Spring Boot permite que eles mudem de estratégia sem afetar outros componentes.
O padrão Builder é usado para criar objetos complexos passo a passo. No Spring Boot, o padrão Builder é usado em muitos componentes, como os objetos de configuração. Os desenvolvedores podem criar objetos de configuração de forma programática, passo a passo, em vez de ter que lidar com XML ou JSON. Isso torna mais fácil criar objetos de configuração precisos e personalizados para cada aplicativo.
O padrão Template Method é usado para definir o esqueleto de um algoritmo em uma classe base, deixando os detalhes da implementação para subclasses. O Spring Boot usa o padrão Template Method em muitos de seus componentes, como os serviços de validação. Os desenvolvedores podem definir uma classe base que implementa a lógica geral de validação, mas deixar as validações específicas para as subclasses. Isso torna mais fácil reutilizar código e implementar novas funcionalidades sem precisar refatorar todo o código.
O padrão Chain of Responsibility é usado para criar uma cadeia de objetos, onde cada objeto é responsável por processar uma solicitação específica. O Spring Boot usa o padrão Chain of Responsibility em muitos componentes, como filtros HTTP e interceptadores. Isso permite que os desenvolvedores adicionem facilmente novas funcionalidades ao aplicativo, sem precisar modificar o código existente.
O padrão Observer é usado para notificar um conjunto de objetos quando um evento ocorre. No Spring Boot, o padrão Observer é usado em muitos componentes, como serviços de mensageria. Isso permite que os desenvolvedores definam um conjunto de observadores que serão notificados quando uma mensagem for recebida, por exemplo. Isso torna mais fácil para os desenvolvedores criar aplicativos escaláveis e resilientes.
É muito comum encontrarmos forte acoplamento entre componentes ou classes dentro de uma solução. Este termo se refere a situações onde um objeto depende de outro bem específico para existir. O forte acoplamento em softwares faz com que a manutenção se torne bastante complicada, pois geralmente a alteração de um elemento gera a necessidade de alteração em outros, devido a dependência entre eles.
Inversão de Controle é implementada utilizando um outro princípio chamado Injeção de Dependência. Basicamente, a Inversão de Controle é uma forma diferente que temos para manipular o controle sobre um objeto. Já a injeção de dependência é um padrão de desenvolvimento de programas de computadores utilizado quando é necessário manter baixo o nível de acoplamento entre diferentes módulos de um sistema.
Use the following commands (if there are commands) by CTRL+V where necessary
📌 IMPORT CODE THROUGH MAVEN INTO YOUR IDE
📌Criar uma conta individual : /account/individual-person/create
Cria uma conta de pessoa fisica
Body de request
{
"name" : Nome da pessoa (Em conta de pessoa fisica)/String,
"cpf" : CPF da pessoa (Em conta de pessoa fisica)/String,
"rg" : RG da pessoa (Em conta de pessoa fisica)/String,
"birth" : Data de nascimento da pessoa (Em conta de pessoa fisica)/String,
"accountType" : Tipo da conta/Enum(CORRENTE, POUPANCA, PAGAMENTOS, UNIVERSITARIA),
"password" : Senha da conta/String,
"agencyCode": Numero da agencia da conta/String,
}
Body de Response
{
"id" : ID da conta/String,
"name" : Nome da pessoa (Em conta de pessoa fisica)/String,
"cpf" : CPF da pessoa (Em conta de pessoa fisica)/String,
"rg" : RG da pessoa (Em conta de pessoa fisica)/String,
"birth" : Data de nascimento da pessoa (Em conta de pessoa fisica)/String,
"companyName" : Razão social da empresa (Em conta de pessoa juridica)/String,
"cnpj" : "CNPJ da empresa (Em conta de pessoa juridica)/String,
"agencyCode" : Numero da agencia da conta/String,
"number" :Numero da conta/String,
"balance" : Saldo da conta/Double,
"locked" : Bloqueio da conta/Boolean,
"legalPersonId" : ID da pessoa jurdica(Em conta de pessoa juridica)/String,
"individualPersonId" : ID da pessoa fisica(Em conta de pessoa fisica)/String,
}
📌Criar uma conta juridica : /account/legal-person/create
Cria uma conta de pessoa juridica
Body de request
{
"razaoSocial" : Nome da pessoa (Em conta de pessoa fisica)/String,
"cnpj" : CPF da pessoa (Em conta de pessoa fisica)/String,
"accountType" : Tipo da conta/Enum(CORRENTE, POUPANCA, PAGAMENTOS, UNIVERSITARIA),
"password" : Senha da conta/String,
"agencyCode" : Numero da agencia da conta/String,
}
Body de Response
{
"id" : ID da conta/String,
"name" : Nome da pessoa (Em conta de pessoa fisica)/String,
"cpf" : CPF da pessoa (Em conta de pessoa fisica)/String,
"rg" : RG da pessoa (Em conta de pessoa fisica)/String,
"birth" : Data de nascimento da pessoa (Em conta de pessoa fisica)/String,
"companyName" : Razão social da empresa (Em conta de pessoa juridica)/String,
"cnpj" : "CNPJ da empresa (Em conta de pessoa juridica)/String,
"agencyCode" : Numero da agencia da conta/String,
"number" :Numero da conta/String,
"balance" : Saldo da conta/Double,
"locked" : Bloqueio da conta/Boolean,
"legalPersonId" : ID da pessoa jurdica(Em conta de pessoa juridica)/String,
"individualPersonId" : ID da pessoa fisica(Em conta de pessoa fisica)/String,
}
📌Login : /account/login
Retorna uma conta já criada
Body de request
{
"number" : Numero da conta/String,
"password" : Senha da conta/String,
}
Body de Response
{
"id" : ID da conta/String,
"name" : Nome da pessoa (Em conta de pessoa fisica)/String,
"cpf" : CPF da pessoa (Em conta de pessoa fisica)/String,
"rg" : RG da pessoa (Em conta de pessoa fisica)/String,
"birth" : Data de nascimento da pessoa (Em conta de pessoa fisica)/String,
"companyName" : Razão social da empresa (Em conta de pessoa juridica)/String,
"cnpj" : "CNPJ da empresa (Em conta de pessoa juridica)/String,
"agencyCode" : Numero da agencia da conta/String,
"number" :Numero da conta/String,
"balance" : Saldo da conta/Double,
"locked" : Bloqueio da conta/Boolean,
"legalPersonId" : ID da pessoa jurdica(Em conta de pessoa juridica)/String,
"individualPersonId" : ID da pessoa fisica(Em conta de pessoa fisica)/String,
}
📌Deposito : /account/deposit
Realiza um deposito na conta
Body de request
{
"id" : ID da conta/String,
"balance" : Saldo da operacao/Double,
}
Body de Response
{
null
}
📌Saque : /account/withdraw
Realiza um saque na conta
Body de request
{
"id" : ID da conta/String,
"balance" : Saldo da operacao/Double,
}
Body de Response
{
null
}
📌Transferencia : /account/transfer (Em desenvolvimento) Realiza uma transferencia na conta
Body de request
{
"id" : ID da conta/String,
"number" : Numero da conta que vai receber a transferencia/String,
"balance" : Saldo da operacao/Double,
}
Body de Response
{
null
}