Giter Site home page Giter Site logo

api-lancamento-java's Introduction

API de Lançamento de Transações Financeiras

Java CI with Maven

Este projeto é uma API desenvolvida utilizando Java 8 e Spring Boot 2.5.5. A API é responsável por lidar com lançamentos de transações financeiras.

Começando

Clone o repositório e execute mvn install para instalar as dependências do projeto.

Rotas da API

  • Conta

    • POST /account: cria uma nova conta. O corpo da solicitação deve ser um objeto JSON CreateAccountDTO.
    • GET /account/balance/{accountNumber}: retorna o saldo da conta com o número fornecido.
  • Transação

    • POST /transaction: faz o lançamento de uma transação. O corpo da solicitação deve ser um objeto JSON TransactionRequestDTO.

Modelos de Dados

  • CreateAccountDTO: um objeto que contém o nome do titular da conta.
  • CreatedAccountNumberDTO: um objeto que contém o número da conta recém-criada.
  • BalanceDTO: um objeto que contém o saldo da conta.
  • TransactionRequestDTO: um objeto que contém o número da conta e as transações a serem lançadas.
  • TransactionDTO: um objeto que contém a data, descrição, ID, tipo e valor de uma transação.

Documentação API

Para uma descrição mais detalhada de cada rota, incluindo parâmetros de consulta, corpo da solicitação e resposta, visite a documentação Swagger UI na URL http://localhost:8080/swagger-ui/ após iniciar o servidor.

Executando testes

Execute mvn test para rodar os testes unitários.

Informação de Contato

Para qualquer dúvida ou problema, por favor, entre em contato conosco em [email protected].

api-lancamento-java's People

Contributors

silva01 avatar

Watchers

 avatar  avatar

api-lancamento-java's Issues

User Story: Activate Client

User Story: Reativar Cliente

  • Nome: Como Cliente, desejo reativar meu cadastro para retomar o uso dos serviços de transações.

  • Descrição: Os clientes têm a opção de reativar seus cadastros para permitir o uso da plataforma novamente.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes reativarem seus cadastros na plataforma, fornecendo o seguinte campo obrigatório:

      • CPF
    2. Antes de processar a solicitação, o sistema deve validar se o cliente com o CPF fornecido existe no sistema. Se o cliente não for encontrado, o processo de reativação deve ser encerrado.

    3. O sistema deve verificar se o cliente já está ativado. Se o cliente já estiver ativado, o processo de reativação deve ser encerrado.

    4. Ao reativar o cadastro do cliente, nenhuma conta será reativada pois o cliente pode optar por criar uma nova conta ou reativar manualmente uma conta desativada.

Image

User Story: Edit Information of address at client

  • Nome: Como Cliente, desejo editar meus dados de endereço caso necessário.

  • Descrição: Os clientes tem a opção editar seus dados de endereço caso necessário.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita o cliente editar seus dados, os seguintes campos precisam ser enviados:

      • CPF
      • Rua
      • Numero
      • Complemento
      • Bairro
      • Estado
      • Cidade
      • Cep
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. API deve devolver a confirmação de que o processo foi concluído sem erros, retornando assim o status 200.

Image

User Story: Define new Password

  • Nome: Como Cliente, desejo trocar a senha provisória por minha própria senha.

  • Descrição: Os clientes têm a opção de substituir a senha provisória por uma senha definitiva.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes realizar a troca de senha, com os seguintes campos obrigatórios:

      • Número da Agência
      • Número da Conta
      • CPF
      • Senha Atual
      • Nova Senha
    2. Sistema deve validar se o CPF está cadastrado no sistema, caso não exista, o processo deve ser encerrado.

    3. Antes de processar a solicitação, o sistema deve verificar se a conta está ativa. Se a conta estiver desativada, o processo de troca de senha deve ser interrompido.

    4. O sistema deve validar se a senha atual fornecida pelo cliente corresponde à senha atual da conta. Se as senhas não coincidirem, o processo de troca de senha deve ser encerrado.

Image

Create Listener for Transaction

Listener para processamento de transações

Descrição

Eu como cliente, necessito processar minhas transações

Critérios de Aceitação

  • Como Cliente, eu quero registrar uma transação, para que minha compra seja confirmada
  • Como Cliente, eu quero registrar uma transação de estorno, para que uma compra errada não seja registrada

Tarefas

Notas Adicionais

Sem informações adicionais

User Story: Create a New Client

  • Nome: Como um cliente em potencial, desejo me cadastrar para obter uma conta e realizar transações de compras.

  • Descrição: Para permitir que os clientes realizem transações de compras, é essencial que eles se cadastrem no sistema e tenham uma conta corrente associada.

  • Critérios de Aceitação:

    1. O sistema deve fornecer um processo de cadastro que inclui a coleta de informações necessárias, esses campos são:

      • Nome do Cliente (Obrigatório)
      • CPF (Obrigatório)
      • Telefone (Obrigatório)
      • Agência
      • Endereço (Obrigatório)
        • Rua (Obrigatório)
        • Numero (Obrigatório)
        • Complemento (Opcional)
        • Estado (Obrigatório)
        • Cidade (Obrigatório)
        • Cep (Obrigatório)
    2. Após o cadastro, o sistema deve criar automaticamente uma conta corrente para o cliente.

    3. O cliente deve ter a opção de solicitar a emissão de um cartão de crédito no momento do cadastro.

    4. API irá devolver os seguintes dados:

      • Agência
      • Numero da Conta Corrente
      • Senha Provisória

Diagrama

Image

Refactor for creating response objects

Será necessário que seja criado uma espécie de strategy para converter o processo do caso de uso em um objeto de resposta que será devolvido para API.

Analisar como isso poderá ser feito

User Story: List Current client account

  • Nome: Como Cliente, desejo saber quais contas correntes estão vinculadas a mim.

  • Descrição: Os clientes tem a opção de listar todas as suas contas.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes obterem todas as contas correntes vinculadas a seu CPF, os seguintes campos precisam ser enviados:

      • CPF
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. API deve devolver uma lista com todas as contas do usuário com os seguintes campos:

      • Agencia
      • Conta
      • Status

Image

User Story: Deactivate Client

  • Nome: Como Cliente, desejo me desativar do sistema.

  • Descrição: Os cliente tem a opção de se desativar e não utilizar os serviços de transações.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes desativar seu cadastro na plataforma:

      • CPF
    2. Antes de processar a solicitação, o sistema valida se o usuário existe, caso não exista o processo de desativação do usuário deve ser encerrado.

    3. Sistema deve validar se o cliente já está desabilitado, caso esteja o sistema deve encerrar o processo.

    4. Ao desabilitar o cliente, sua conta ativa deve ser desabilitada de forma automatica.

Pensar no que fazer se alguma falha acontecer no meio do caminho deixando os dados divergentes

Image

Create API RestFull for Transaction

Transaction API

  1. Transaction API will have 2 endpoints, one to register transaction and other to refund transaction if necessary.
  2. Transaction API need register many transaction in one request for same account.
  3. The process to need asynchronous.
  4. It's can't register duplicate transactions.

Sub Tasks

User Story: Activate Current Account

  • Nome: Como Cliente, desejo reativar minha conta corrente para retomar o uso dos serviços de transações.

  • Descrição: Os clientes têm a opção de reativar sua conta corrente para permitir o processamento de transações novamente.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes reativarem sua conta corrente, os seguintes campos devem ser enviados:

      • Agencia
      • Conta
      • CPF
    2. Antes de processar a solicitação, o sistema deve validar se a conta pertence ao cliente solicitante, caso não pertença o processo deve ser encerrado.

    3. O sistema deve verificar se a conta está habilitada, caso esteja o processo deve ser encerrado.

    4. API deve devolver uma confirmação informando que a conta solicitada está habilitada.

*Lembrando que no momento de atualizar a flag, o dado precisa ser lockado

Image

Create Refund API for Transaction

Criar API de estorno de Transação

Descrição

Permite que clientes realizem estornos de transações previamente realizada de forma segura

Critérios de Aceitação

  • Eu como cliente, desejo realizar o estorno de uma transação de forma completa

Tarefas Relacionadas

  • Analisar os requisitos da funcionalidade
  • Implementar Endpoint para recebimento das solicitações de estorno
  • Retornar 200 caso consiga enviar a mensagem para fila com sucesso
  • Retornar Status 406 caso os dados passados não sejam validos
  • Retornar Status 404 caso o cliente informado não exista no sistema
  • Retornar status 409 caso o cliente informado esteja desativado
  • Retornar status 404 caso a conta informada não exista
  • Retornar status 409 caso a conta informada esteja desativada
  • Retornar status 404 caso a transação não exista - Removido da API, será validado no listener
  • Retornar status 409 caso a transação já tenha sido estornada - Removido da API, será validado no listener

Notas

Todas as requisições que chegarão neste endpoint, precisa ser enviado para uma fila de processamento logo após todas essas validações

Cenários de testes

Image

Conflict of Objects when find Account

Existe um problema ao realizar consulta de conta corrente, a interface ICpfParam está sendo implementada por IAccountParam, no gateway, ao validar se o objeto passado é instancia de IAccountParam, é gerado um resultado verdadeiro e uma exception é lancada pois o objeto não possui agencia e conta.

O input passado tem apenas 1 parametro que é o cpf, ele deveria usar apenas a interface ICpfParam

Create Listener of register transaction

Criar Listener para registrar transações

Descrição

Como cliente, necessito fazer minhas compras e pagar, para isso necessito registrar minhas transações

Critérios de Aceitação

  • Precisa receber uma mensagem via fila
  • O processamento das transações serão 1 por vez, 1 conta de origem para 1 de destino por vez
  • Para cada processamento, as contas precisam estar com lock.
  • O Listener precisa ser escalável.

Tarefas Relacionadas

  • Obter dados da fila de processamento
  • Validar se a conta de origem existe
  • Validar se a conta de destino existe
  • Validar se a conta de origem está ativa
  • Validar se a conta de destino está ativa
  • Validar se conta possui saldo
  • Validar se a transação já existe
  • Atualizar saldo das contas
  • Registrar Transação no banco de dados banco de dados

Notas

Qualquer informação adicional relevante para a tarefa.

Cenário de testes

Image

User Story: Reversal Transaction

  • Nome: Como Cliente, desejo estornar uma compra feita de maneira errada.

  • Descrição: Os clientes tem a opção de estornar transações realizadas.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita o cliente enviar as informações de compras, os seguintes campos devem ser enviados:

      • Id
      • IdempotencyId
    2. Antes de processar a solicitação, O sistema deve validar se o ID e o IdempotencyID existem, se não existirem o sistema deve encerrar o processo.

    3. Caso encontre a transação, o sistema deve registrar a transação de estorno com valor negativo e com o Tipo estorno e deve devolver o saldo para conta.

    4. O Sistema deve retornar uma resposta de sucesso caso a transação seja processada com sucesso, deve retornar um status HTTP 200.

Image

User Story: Get information about current account active

  • Nome: Como Cliente, desejo saber as informações da minha conta, tal como saldo, cartões de credito, status, etc.

  • Descrição: Os clientes tem a opção de consultar as informações de sua conta corrente ativa.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes consultar todas as informações sobre a conta corrente ativa:

      • CPF
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. API deve devolver informações da conta corrente ativa, os seguintes campos são devolvidos pela API:

      • Agencia
      • Conta
      • Status
      • Saldo
      • Cartão de credito
      • 10 ultimas transações paginadas

Image

User Story: Get Information about register at client

  • Nome: Como Cliente, desejo recuperar as informações que foram cadastrada por mim.

  • Descrição: Os clientes tem a opção de consultar as informações de seu cadastro.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes consultar todas as informações sobre seu cadastro, é preciso informar os seguintes campos:

      • CPF
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. API deve devolver informações do cadastro do cliente, os seguintes campos são devolvidos pela API:

      • Nome do Cliente
      • CPF
      • Telefone
      • Endereço
        • Rua
        • Numero
        • Complemento
        • Estado
        • Cidade
        • Cep

Image

Refactor source class for accept a input object instead of have a map of strings

Será necessário refatorar a classe source para que ele deixe de usar o Map para input e passe a usar objetos de valores específicos para entrada de dados, nesse cenário será necessário criar uma interface de marcação que indique que aquele objeto será para entrada de dados e o source deve utiliza-lo para armazenar o objeto especifico.

Analisar como isso será feito

User Story: Deactivate Credit Card

  • Nome: Como Cliente, desejo desativar meu cartão para não usa-lo.

  • Descrição: Os clientes tem a opção de solicitar a desativação do cartão de credito caso necessário.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita o cliente solicitar a desativação de um cartão de credito, as seguintes informações precisam ser enviadas:

      • CPF
      • Conta
      • Agencia
      • Numero do Cartão
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. Sistema deve validar se a conta informada é uma conta existente ou ativa do cliente solicitante. Caso não seja valida o processo deve ser encerrado.

    4. Sistema precisa validar se o cartão de credito existe e se de fato pertence as informações fornecidas, caso contrário o processo deve ser encerrado

    5. Sistema desativa o cartão de credito.

    6. API deve devolver a confirmação de que o processo foi concluído sem erros, retornando assim o status 200.

Image

User Story: Create new current Account

  • Nome: Como Cliente, desejo abrir uma nova conta corrente.

  • Descrição: Os clientes têm a opção de criar novas contas correntes, desde que não possuam uma conta corrente ativa.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita aos clientes enviar as seguintes informações necessárias para a abertura da conta:

      • CPF do Cliente (Obrigatório)
      • Agência (Obrigatório)
      • Senha da Conta (Obrigatório)
      • Desejo cartão de crédito (Opcional - Default false)
    2. Antes de processar a solicitação, o sistema deve realizar uma validação para verificar se o cliente já possui uma conta corrente ativa e válida. Se uma conta ativa for encontrada, o processo de abertura não pode ser concluído.

    3. O cliente deve ter a opção de indicar se deseja receber um cartão de crédito associado à nova conta corrente.

    4. Após a abertura da nova conta, o cliente receberá como resposta os seguintes campos:

      • Agência
      • Numero da Conta Corrente

Image

User Story: Register Transaction

  • Nome: Como Cliente, desejo fazer comprar e registrar em minha conta.

  • Descrição: Os clientes tem a opção de usar o saldo da conta ou cartão de credito para realizarem compras.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita o cliente enviar as informações de compras, os seguintes campos devem ser enviados:

      • Id
      • Descrição
      • Preco
      • Quantidade
      • Tipo
      • CPF
      • Conta Origem
      • Agencia Origem
      • Conta Destino
      • Agencia Destino
      • IdempotencyId
      • Numero do cartão de credito (apenas para compras no credito)
      • Segredo do cartão (apenas para compras no credito)
    2. O sistema deve validar se a conta de origem é valida, caso não seja o processo deve ser encerrado.

    3. Antes de processar a solicitação, O sistema deve validar a transação, caso a transação seja inválida, o processo deve ser encerrado.

    4. O Sistema deve somar o valor total das transações separando por tipo e validando se existe saldo para processamento. Se algum deles não tiver saldo, o processo deve ser encerrado.

    5. Se todas as validações forem válidas, o sistema deve registrar as transações na conta de origem e atualizar o saldo da conta.

    6. O Sistema deve retornar uma resposta de sucesso caso a transação seja processada com sucesso, deve retornar um status HTTP 200.

Image

Create listener of process refund

Criar Listener para estorno de transação

Descrição

Como Cliente, necessito estornar compras feitas de forma indevida ou errada e não faturar da minha conta.

Critérios de Aceitação

  • Precisa receber uma mensagem via fila
  • O processamento dos estornos serão realizados 1 por vez
  • Estorno só é permitido de forma completa, não vai existir estorno parcial.
  • Para cada processamento, as contas precisam estar com lock.
  • O Listener precisa ser escalável.

Tarefas Relacionadas

  • Obter dados da fila de processamento
  • Validar se conta origem existe
  • Validar se conta destino existe
  • Validar se a conta origem está ativa
  • Validar se a conta destino está ativa
  • Validar se transação existe
  • Validar se transação já não possui um estorno
  • Atualizar saldos das contas.
  • Registrar Transação no banco de dados

Notas

Qualquer informação adicional relevante para a tarefa.

Cenários de teste

Image

Create Steps in pepiline

Divide steps of pipeline in two steps, one step for test and one step for build without compile tests

User Story: Deactivate Current Account

  • Nome: Como Cliente, desejo desativar minha conta e não receber mais transações.

  • Descrição: Os clientes têm a opção de desativar suas contas, o que os impedirá de usar os serviços de transações.

  • Critérios de Aceitação:

    1. O sistema deve disponibilizar uma API que permita aos clientes desativarem suas contas na plataforma, fornecendo os seguintes campos obrigatórios:

      • Agência
      • Conta
      • CPF
    2. Antes de processar a solicitação, o sistema deve validar se a conta do cliente solicitante realmente existe. Se a conta não for encontrada, o processo de desativação deve ser encerrado.

    3. O sistema deve verificar se a conta informada já está desabilitada. Se a conta já estiver desativada, o processo de desativação deve ser encerrado.

    4. Após a desativação da conta, a API deve fornecer uma confirmação da operação bem-sucedida.

Esse Fluxo está incluído dentro da Issue #9

User Story: Modify Agency of Current Account

  • Nome: Como Cliente, desejo mudar a agencia da minha conta corrente caso necessário.

  • Descrição: Os clientes tem a opção alterar a agencia de suas contas correntes.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita o cliente editar seus dados, os seguintes campos precisam ser enviados:

      • CPF
      • Conta
      • Agencia Antiga
      • Agencia Nova
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. Sistema deve validar se a conta a ser alterada é uma conta existente ou ativa do cliente solicitante. Caso não seja valida o processo deve ser encerrado.

    4. Sistema deve validar se a agencia para qual o cliente deseja mudar a conta corrente existe. Caso não exista o sistema deve encerrar o processo.

    5. Sistema deve validar se já não existe um conta com o mesmo numero na agencia nova. Caso exista o processo deve ser encerrado

    6. API deve devolver a confirmação de que o processo foi concluído sem erros, retornando assim o status 200.

Image

User Story: Edit information at client

  • Nome: Como Cliente, desejo editar meus dados caso necessário.

  • Descrição: Os clientes tem a opção editar seus dados caso necessário.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita o cliente editar seus dados, os seguintes campos precisam ser enviados:

      • Nome do Cliente
      • CPF
      • Telefone
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. API deve devolver a confirmação de que o processo foi concluído sem erros, retornando assim o status 200.

Image

User Story: Solicitation of the credit card

  • Nome: Como Cliente, desejo solicitar um cartão de credito para realizar minhas compras.

  • Descrição: Os clientes tem a opção de solicitar um cartão de credito via API no qual podem realizar transações financeiras.

  • Critérios de Aceitação:

    1. O sistema deve fornecer uma API que permita o cliente solicitar um cartão de credito, as seguintes informações precisam ser enviadas:

      • CPF
      • Conta
      • Agencia
    2. Antes de processar a solicitação, o sistema deve validar se o CPF existe no sistema. Caso não exista o processo deve encerrar o processo.

    3. Sistema deve validar se a conta informada é uma conta existente ou ativa do cliente solicitante. Caso não seja valida o processo deve ser encerrado.

    4. Sistema deve validar se o cliente que solicitou já não possui um cartão vinculado, caso tenha o processo deve ser encerrado.

    5. Sistema gera um cartão e vincula a conta corrente.

    6. API deve devolver a confirmação de que o processo foi concluído sem erros, retornando assim o status 200.

Image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.