Skip to content

Guilherme-Santos08/daily-diet-api-solid-prisma

Repository files navigation

App

Daily Diet app.

RFs (Requisitos funcionais)

  • Deve ser possível se cadastrar;
  • Deve ser possível se autenticar;
  • Deve ser possível obter o perfil de um usuário logado;
  • Deve ser possível registrar uma refeição feita, com as seguintes informações; As refeições devem ser relacionadas a um usuário. - [x] Nome - [x] Descrição - [x] Data e Hora - [x] Está dentro ou não da dieta
  • Deve ser possível editar uma refeição, podendo alterar todos os dados acima;
  • Deve ser possível apagar uma refeição;
  • Deve ser possível listar todas as refeições de um usuário;
  • Deve ser possível visualizar uma única refeição;
  • Deve ser possível recuperar as métricas de um usuário; - [x] Quantidade total de refeições registradas - [x] Quantidade total de refeições dentro da dieta - [x] Quantidade total de refeições fora da dieta - [/] Melhor sequência por dia de refeições dentro da dieta
  • [/] O usuário só pode visualizar, editar e apagar as refeições o qual ele criou;

RNs (Regras de negócio)

  • O usuário não deve poder se cadastrar com um e-mail duplicado;

RNFs (Requisitos não-funcionais)

  • A senha do usuário precisa estar criptografada;
  • Os dados da aplicação precisam estar persistidos em um banco PostgreSQL;
  • Todas listas de dados precisam estar paginadas com 20 itens por página;
  • O usuário deve ser identificado por um JWT (JSON Web Token);

Documentação da API

Registra o usuário

  POST /users
Parâmetro Tipo Descrição
name Body - String Obrigatório. Nome do usuário.
email Body - String Obrigatório. Email do usuário.
password Body - String Obrigatório. Senha do usuário. Mínimo 6 caracteres.

Autentica o usuário

  POST /session
Parâmetro Tipo Descrição
email Body - String Obrigatório. Email do usuário.
password Body - String Obrigatório. Senha do usuário.

Realiza refresh do access token

  PATCH /token/refresh
Parâmetro Tipo Descrição
refreshToken Cookie - String Obrigatório. Refresh token do usuário.

Todas as rotas abaixo precisam que o usuário autentique

Retorna o perfil do usuário

  GET /me
Parâmetro Tipo Descrição
accessToken Cookie - String Obrigatório. Access token do usuário.

Retorna todos os lanches do usuário

  GET /snacks/get-all-user-snack/:userId
Parâmetro Tipo Descrição
accessToken Cookie - String Obrigatório. Access token do usuário.
id Query - Number Obrigatório. Id do usuário.

Retorna todas metricas do usuário

  GET /snacks/get-user-metrics/:userId
Parâmetro Tipo Descrição
accessToken Cookie - String Obrigatório. Access token do usuário.
id Query - Number Obrigatório. Id do usuário.

Retorna um lanche específico

  GET /snacks/get-only-snack/:snackId
Parâmetro Tipo Descrição
accessToken Cookie - String Obrigatório. Access token do usuário.
id Query - Number Obrigatório. Id do lanche.

Cria um novo lanche

  POST /snacks
Parâmetro Tipo Descrição
accessToken Cookie - String Obrigatório. Access token do usuário.
name Body - String Obrigatório. Nome do lanche.
description Body - String Obrigatório Descricão do lanche.
insideDiet Body - Boolean Obrigatório Esta dentro da dieta?.

Editar informação do lance

  put /snacks/edit/:snackId
Parâmetro Tipo Descrição
accessToken Cookie - String Obrigatório. Access token do usuário.
name Body - String Nome do lanche.
description Body - String Descricão do lanche.
insideDiet Body - Boolean Esta dentro da dieta?.
id Query - Number Obrigatório. Id do lanche.

Deletar um Lanche específico

  DELETE /snacks/delete/:snackId
Parâmetro Tipo Descrição
accessToken Cookie - String Obrigatório. Access token do usuário.
id Query - Number Obrigatório. Id do lanche.

Stack utilizada

Back-end: Node, Fastify, Vitest, zod, potergress, Prisma, bycript, supertest

Rodando localmente

  • Clone o projeto

      git clone https://github.com/Guilherme-Santos08/daily-diet-api-solid.git
  • Entre no diretório do projeto

      cd ignite-node/daily-diet-api-solid
  • Configuração do docker

      docker compose up -d
  • Instale as dependências

      npm install
  • Inicie o servidor

      npm run start:dev
  • Rodar os testes unitários

      npm run test
    
      # ou
    
      npm run test:watch
  • Rodar os testes e2e

      npm run test:e2e
    
      #ou 
    
      npm run test:e2e:watch
  • Rodar testes usando uma UI

      npm run test:ui
      npm run test:coverage

Crie um arquivo .env com as variaveis do .env.example