Skip to content

Latest commit

 

History

History
433 lines (319 loc) · 9.59 KB

README.md

File metadata and controls

433 lines (319 loc) · 9.59 KB

Logo OW Interactive

Desafio Back-End - OW Interactive 21/22

Tabela de conteúdos


Como execultar o projeto

# Clone este repositório
$ git clone [email protected]:askagi/desafio-backend.git

# Acesse a pasta do projeto no terminal/cmd
$ cd desafio_backend

# Instale as dependências
$ npm install

# Execute a aplicação em modo de desenvolvimento
$ npm run dev

# O servidor inciará na porta:3333 - acesse http://localhost:3000 

No diretório em seu banco de dado execulte os scripts SQL na seguinte ordem

Para testes deve ser instalado o Insomnia, em seguida baixe a coleção

Run in Insomnia


Tecnologias

As seguintes ferramentas foram usadas na construção do projeto:

Server (NodeJS)

Veja o arquivo package.json

Utilitários


Usuários

Criar usuário

POST /users

  • Requisição

    • Body

      // Interface
      {
          "name": string,
          "email": string,
          "birthday": date
      }
  • Exemplo de Retorno

    // POST /user
    {
        "name": "Folano de Tal",
        "email": "[email protected]",
        "birthday": "1995-08-10"
    }

Listar todos os usuários

GET /users

  • Resposta

    • listagem de todos so usuários existentes, ordernados por ordem de cadastro decrescente (mais novo para mais antigo)
  • Exemplo de resposta

    // HTTP Status 200
    [
        {
    "id": 3,
    "name": "Regiane Teixeira",
    "email": "[email protected]",
    "birthday": "1995-09-06T03:00:00.000Z",
    "created_at": "2022-09-20T17:43:32.000Z",
    "updated_at": "2022-09-21T07:41:43.000Z",
    "opening_balance": 0
    },
    {
    "id": 2,
    "name": "Maria Das Graças",
    "email": "[email protected]",
    "birthday": "1971-05-30T03:00:00.000Z",
    "created_at": "2022-09-20T06:51:26.000Z",
    "updated_at": null,
    "opening_balance": 0
    },
    {
    "id": 1,
    "name": "José Costa",
    "email": "[email protected]",
    "birthday": "1991-08-10T03:00:00.000Z",
    "created_at": "2022-09-19T22:57:36.000Z",
    "updated_at": null,
    "opening_balance": 300000
    }
    ]
    
    // nenhum usuário encontrado
    []

Listar um usuário

GET /user/:user_id

  • Requisição

    • URL Params - ID do usuário (passado como parâmetro na rota)

          GET/user/1
      
  • Exemplo de Retorno

    // GET /user/1
    {
        "id": 1,
        "name": "José Costa",
        "email": "[email protected]",
        "birthday": "1991-08-10T03:00:00.000Z",
        "created_at": "2022-09-19T22:57:36.000Z",
        "updated_at": null,
        "opening_balance": 900000
    }

Alterar saldo inicial

PATCH /user/:user_id

  • Requisição

    • Body

      // Interface
      {
          opening_balance: number
      }
    • URL Params - ID do usuário (passado como parâmetro na rota)

          GET/user/1
      
  • Exemplo de Retorno

    // PATCH /user/1
    {
        "opening_balance": 300000
    }

Excluir usuário

DELETE /user/:user_id

  • Requisição
    • URL Params - ID do usuário (passado como parâmetro na rota)

      DELETE/user/1
      

Transações

Criar transação

POST /transaction/:user_id

  • Requisição

    • Body

          // Interface
          {
              type: "debit" | "credit" | "reversal",
              amount: number,
              description?: string
          }
    • URL Params - ID do usuário (passado como parâmetro na rota)

      POST/transaction/1
      
  • Exemplo de Retorno

    // POST /transaction/1
    {
        "type": "debit",
        "amount": 1050,
        "description": "Descrição..."
    }

Listar transações

GET /transactions/user/:user_id

  • Requisição

    • URL Params - ID do usuário (passado como parâmetro na rota)

      GET/transactions/user/1
      
    • URL Query Params - Paginção: por padão a primeira pagina é 0, cada página retorna no maximo 5 transações (opicional)

        GET/transaction/user/1?page=1
      
  • Exemplo de Retorno

    // GET /transaction/user/1
    
    {
        "id": 1,
        "name": "José Costa",
        "email": "[email protected]",
        "birthday": "1991-08-10T03:00:00.000Z",
        "created_at": "2022-09-19T22:57:36.000Z",
        "updated_at": null,
        "opening_balance": 300000,
        "page": 0,
        "transactions": [
            {
            "id": 25,
            "user_id": 1,
            "type": "reversal",
            "amount": 12000,
            "description": "Compra duplicada de vestido",
            "moment": "2022-09-20T16:56:47.000Z"
            },
            {
            "id": 24,
            "user_id": 1,
            "type": "reversal",
            "amount": 12000,
            "description": "Compra duplicada de vestido",
            "moment": "2022-09-20T16:56:47.000Z"
            },
            {
            "id": 19,
            "user_id": 1,
            "type": "reversal",
            "amount": 12000,
            "description": "Compra duplicada de vestido",
            "moment": "2022-09-20T16:56:46.000Z"
            }
        ]
    }

Resumo das transações

GET /transactions/user/:user_id/summary

  • Requisição

    • URL Params - ID do usuário (passado como parâmetro na rota)

      GET/transactions/user/1/summary
      
  • Exemplo de Retorno

    /// GET/transactions/user/1/summary
    
    {
        "opening_balance": 300000,
        "debit": 4300,
        "credit": 1800,
        "reversal": 228000
    }

Emitir transações em CSV

GET /transactions/user/:user_id/csv

  • Requisição

    • URL Params - ID do usuário (passado como parâmetro na rota)

      GET/transactions/user/1/csv
      
    • URL Query Params

      • filtros para as transações:

            {
                last_days: number //Retorna transaçoẽs referente a quantidade de dias informado
                month_year: date //Retorna transações no mês e ano informado. Ex: 02/22
            }
      • Exemplos de requisição

        GET/transaction/user/1/csv
        
        GET/transaction/user/1/csv?laste_day=30
        
        GET/transaction/user/1/csv?month_year=02/22
        
  • Exemplo de Retorno

    • Retorna uma arquivo no formato CSV com as transações do usuário

Excluir transação

DELETE /transactions/:transaction_id

  • Requisição
    • URL Params - ID da transação (passado como parâmetro na rota)

      DELETE/transactions/1
      

🦸 Autor


🎧 José Costa

Linkedin Badge Gmail Badge