Skip to content

esdrasoliveira5/cyber-wallet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

141 Commits
 
 
 
 

Repository files navigation

cyber-wallet

Sumário


Descrição

Objetivo: Neste projeto foi desenvolvido uma CRUD api para gerenciar uma carteira digital utilizando o banco de dados MongoDB aplicando conceitos de POO e SOLID.

  • Arquitetura REST;
  • Banco de Dados MongoDB;
  • TypeScript;
  • Express;
  • Mongoose;
  • Bcrypt;
  • JsonWebToken;
  • Testes Automatizados com Mocha, Chai e Sinnon;
  • Docker;
  • Docker compose;
  • Swagger;

Pré-requisitos

  • npm version 6.14.13
  • node version 14.17.0
  • docker version 20.10.13
  • docker-compose version 1.29.2

Instalação

  • Clone o repositório
      git clone git@github.com:esdrasoliveira5/cyber-wallet.git
    
  • Vá para a pasta da aplicação
      cd cyber-wallet/project 
    
  • Instale as dependencias
      npm install 
    
    

Instruções para iniciar o projeto


  • Comando para iniciar com docker

    sudo docker-compose up
    
  • Acesse pelo navegador

      http://localhost:3001/
    
  • Comando para iniciar pelo node

    npm run start
    
  • Acesse pelo navegador

      http://localhost:3001/
    

Instruções para testar o projeto


  • Testes unitarios

    npm run test:unit
    
  • Testes de integração

      npm run test:integration
    
  • Verificar cobertura dos testes

    npm run test:coverage
    

Documentação


Abre a documentação com Swagger

GET /api-docs

Esse endpoint permite testar a api com o Swagger;


Cadastra um novo usuario

POST /user

Esse endpoint retorna status 201 e o usuario cadastrado.

  • Exemplo request body

        {
            "name": "Luisa",
            "lastName": "Oliveira",
            "email": "luisa@email.com",
            "contact": "+5511987654321",
            "password": "maria_password",
            "address": {
                "street": "Av. Azaleia",
                "number": "1050A",
                "district": "Florestal",
                "zipcode": "01001000",
                "city": "Caetanopolis",
                "state": "MG",
                "country": "Brasil"
            }
        }
  • Exemplo response body

      {
          "name": "Luisa",
          "lastName": "Oliveira",
          "email": "luisa@email.com",
          "contact": "+5511987654321",
          "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.",
          "address": {
              "street": "Av. Azaleia",
              "number": "1050A",
              "district": "Florestal",
              "zipcode": "01001000",
              "city": "Caetanopolis",
              "state": "MG",
              "country": "Brasil"
          },
          "balance": 0,
          "transactions": [],
          "_id": "6264bfcebab4601fd42c7181"
      }

Loga um usuário

POST /user/login

Esse endpoint retorna status 200 e o usuario com um token.

  • Exemplo request body

        {
            "email": "luisa@email.com",
            "password": "maria_password"
        }
  • Exemplo response body

      {
          "user": {
              "_id": "6264bfcebab4601fd42c7181",
              "name": "Luisa",
              "lastName": "Oliveira",
              "email": "luisa@email.com",
              "contact": "+5511987654321",
              "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.",
              "address": {
                  "street": "Av. Azaleia",
                  "number": "1050A",
                  "district": "Florestal",
                  "zipcode": "01001000",
                  "city": "Caetanopolis",
                  "state": "MG",
                  "country": "Brasil"
              },
              "balance": 0,
              "transactions": []
          },
          "token": "bearer token"
      }

Lista todos usuarios

GET /user

Retorna status 200 e todos os usuarios cadastrados.

  • Exemplo request headers

        {
            "Authorization": "bearer token",
        }
  • Exemplo response body

        [
          {
              "_id": "6264bfcebab4601fd42c7181",
              "name": "Luisa",
              "lastName": "Oliveira",
              "email": "luisa@email.com",
              "contact": "+5511987654321",
              "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.",
              "address": {
                  "street": "Av. Azaleia",
                  "number": "1050A",
                  "district": "Florestal",
                  "zipcode": "01001000",
                  "city": "Caetanopolis",
                  "state": "MG",
                  "country": "Brasil"
              },
              "balance": 0,
              "transactions": []
          },
            ...
        ]

Lista um usuario pelo seu id

GET /user/:id

Retorna status 200 e o usuario cadastrado com o id especificado.

  • Exemplo request headers

        {
            "Authorization": "bearer token",
        }
  • Exemplo response body

        {
            "_id": "6264bfcebab4601fd42c7181",
            "name": "Luisa",
            "lastName": "Oliveira",
            "email": "luisa@email.com",
            "contact": "+5511987654321",
            "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO3u0r4kxA253wg/OfvzQgBAfyKuIFX7.",
            "address": {
                "street": "Av. Azaleia",
                "number": "1050A",
                "district": "Florestal",
                "zipcode": "01001000",
                "city": "Caetanopolis",
                "state": "MG",
                "country": "Brasil"
            },
            "balance": 0,
            "transactions": []
        }

Atualiza um usuario pelo id

PUT /user/:id

Retorna status 200 e o usuario atualizado.

  • Exemplo request headers

        {
            "Authorization": "bearer token",
        }
  • Exemplo request body

        {
            "name": "Luisa",
            "lastName": "Oliveira",
            "email": "luisa@email.com",
            "contact": "+5511987654321",
            "password": "luisa_password",
            "address": {
                "street": "Av. Azaleia",
                "number": "1050A",
                "district": "Florestal",
                "zipcode": "01001000",
                "city": "Caetanopolis",
                "state": "MG",
                "country": "Brasil"
            }
        }
  • Exemplo response body

        {
            "_id": "6264bfcebab4601fd42c7181",
            "name": "Luisa",
            "lastName": "Oliveira",
            "email": "luisa@email.com",
            "contact": "+5511987654321",
            "password": "$2b$10$/GolCC1IhMuhc4RCReOBdOHMcG3/0qAD2TLVgflxH.T3gcJ0nGRaq",
            "address": {
                "street": "Av. Azaleia",
                "number": "1050A",
                "district": "Florestal",
                "zipcode": "01001000",
                "city": "Caetanopolis",
                "state": "MG",
                "country": "Brasil"
            },
            "balance": 0,
            "transactions": []
        }

Atualiza o saldo adiciona a transação

PUT /user/transaction

Retorna status 200 e o usuario com o saldo e as transações atualizadas. Obs: Apenas 3 tipos de transações estao disponiveis, sao elas "payment", "transfer" e "deposit" Obs2: Ambos usuarios precisam estar cadastrados para essa operação Obs3: Caso nao haja saldo na conta para as operaçoes "transfer" e "payment" o usuario fica em debito e com saldo negativo

  • Exemplo request headers

        {
            "Authorization": "bearer token",
        }
  • Exemplo request body

        {
            "type": "transfer",
            "receiver": {
                "name": "Maria",
                "lastName": "Oliveira",
                "email": "maria@email.com",
                "contact": "+5511987654321"
            },
            "transmitter": {
                "name": "Pedro",
                "lastName": "Pereira",
                "email": "pedro@email.com",
                "contact": "+5511963852741"
            },
            "amount": 100
        }
  • Exemplo request body

        {
            "type": "deposit",
            "receiver": {
                "name": "Pedro",
                "lastName": "Pereira",
                "email": "pedro@email.com",
                "contact": "+5511963852741"
            },
            "transmitter": {
                "name": "Pedro",
                "lastName": "Pereira",
                "email": "pedro@email.com",
                "contact": "+5511963852741"
            },
            "amount": 60
        }
  • Exemplo request body

        {
            "type": "payment",
            "receiver": {
                "name": "Pedro",
                "lastName": "Pereira",
                "email": "pedro@email.com",
                "contact": "+5511963852741"
            },
            "transmitter": {
                "name": "Maria",
                "lastName": "Oliveira",
                "email": "maria@email.com",
                "contact": "+5511987654321"
            },
            "amount": 500
        }
  • Exemplo response body

        {
            "_id": "6264c85fbab4601fd42c718d",
            "name": "Pedro",
            "lastName": "Pereira",
            "email": "pedro@email.com",
            "contact": "+5511963852741",
            "password": "$2b$10$/GolCC1IhMuhc4RCReOBdO0eFeos76KTfw8Huxtkx4CYUTRLW7.GG",
            "address": {
                "street": "Rua das Flores",
                "number": "500",
                "district": "Santo Agostinho",
                "zipcode": "01001000",
                "city": "Belo Horizonte",
                "state": "MG",
                "country": "Brasil"
            },
            "balance": 200,
            "transactions": [
                {
                    "type": "deposit",
                    "receiver": {
                        "name": "Pedro",
                        "lastName": "Pereira",
                        "email": "pedro@email.com",
                        "contact": "+5511963852741"
                    },
                    "transmitter": {
                        "name": "Pedro",
                        "lastName": "Pereira",
                        "email": "pedro@email.com",
                        "contact": "+5511963852741"
                    },
                    "amount": 50,
                    "date": "2022-04-24T04:29:02.860Z"
                },
                {
                    "type": "transfer",
                    "receiver": {
                        "name": "Maria",
                        "lastName": "Oliveira",
                        "email": "maria@email.com",
                        "contact": "+5511987654321"
                    },
                    "transmitter": {
                        "name": "Pedro",
                        "lastName": "Pereira",
                        "email": "pedro@email.com",
                        "contact": "+5511963852741"
                    },
                    "amount": 50,
                    "date": "2022-04-24T04:46:56.840Z"
                },
            ]
        }

Deletar um usuario

DELETE /user/:id

  • Exemplo request headers
        {
            "Authorization": "bearer token",
        }

Retorna status 204 sem body.

  • Exemplo response body
    []

About

CRUD api para gerenciar uma carteira digital utilizando o banco de dados MongoDB aplicando conceitos de POO e SOLID

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages