Skip to content

Essa desafio vai testar seus conhecimentos em desenvolvimento entre outras tecnologias. Está preparado(a)?

Notifications You must be signed in to change notification settings

askagi/desafio-backend

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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


About

Essa desafio vai testar seus conhecimentos em desenvolvimento entre outras tecnologias. Está preparado(a)?

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 99.3%
  • Shell 0.7%