Skip to content

Esse projeto é uma API REST, onde podemos gerenciar dietas

Notifications You must be signed in to change notification settings

MoisesSantana/Daily-Diet-API

Repository files navigation

fastify

TypeScript version 5.2.2 Yarn version 1.22.19 NodeJs versuib 18.16.0 Fastify version 4.22.2 Knex version 2.5.1 zod version 3.22.2

💻 Projeto

Esse projeto é uma API REST, onde podemos gerenciar dietas. Podendo cadastrar um usuário que poderá:

  • Cadastrar suas refeições dizendo se estará ou não dentro da sua dieta;
  • Recuperar uma lista com todas suas refeições;
  • Recuperar apenas uma refeição;
  • Editar as informações de uma refeição;
  • Deletar uma refeição cadastrada;
  • Obter um resumo do seu progresso que trará as seguintes informações:
    • Total de refeições cadastradas;
    • Total de refeições dentro da dieta;
    • Total de refeições fora da dieta;
    • Melhor sequência de refeições dentro da dieta;

🧐 Diagramas

Funcionamento das requisições

sequenceDiagram
    participant client
    participant /users
    participant /meals
    participant database
    client->>/users: (POST) body: { name, email }
    /users->>database: { id, name, email }
    client->>/meals: (GET) cookies: { sessionId }
    /meals->>database: request meals where user_id = sessionId
    database->>/meals: [{ id, user_id, name, description, is_diet, created_at }, ...]
    /meals->>client: { meals: [{ id, name, description, is_diet, created_at }, ...] }
    client->>/meals: (GET) param: { mealId }, cookies: { sessionId }
    /meals->>database: request meals where user_id = sessionId and id = mealId
    database->>/meals: { id, user_id, name, description, is_diet, created_at }
    /meals->>client: { meal: { id, name, description, is_diet, created_at } }
    client->>/meals: (GET) path: /summary, cookies: { sessionId }
    /meals->>database: request meals where user_id = sessionId
    database->>/meals: [{ id, user_id, name, description, is_diet, created_at }, ...]
    /meals->>client: { totalMeals, totalDietMeals, totalCheatMeals, bestSequence }
    client->>/meals: (POST) cookies: { sessionId }, body: { name, description, isDiet }
    /meals->>database: { id, user_id, name, description, is_diet }
    client->>/meals: (PUT) cookies: { sessionId }, body: { name, description, isDiet }, param: { mealId }
    /meals->>database: update meals where user_id = sessionId and id = mealId
    client->>/meals: (DELETE) cookies: { sessionId }, param: { mealId }
    /meals->>database: delete meals where user_id = sessionId and id = mealId
Loading

Sistema de autorização

flowchart TD
  A[request to /meals] --> B{request.cookies.sessionId?};
  B -- yes --> C[make request]
  B -- no --> D[Status Code: 401 message: 'Unauthorized']

Loading

💻 Tecnologias

Para a realização desse projeto foi utilizado o microframework Fastify assim foi possível cadastrar rotas e utilizar o potencial de seus plugins. A escolha do Fastify no lugar do Express foi devido ao seu desempenho, baixa sobrecarga, suporte a async/await e ecosistema em crescente. Além do Fastify, também instalamos o @fastify/cookie pela simplicidade de trabalhar com cookies em um sistema Fastify. O zod foi a escolha para lidar com validações de dados, essa escolha se deu por ter uma ótima integração com TypeScript, deixando o trabalho mais eficiênte. Já para lidar com consultas ao banco de dados foi utilizado o query builder knexjs, dessa forma podemos deixar a sintaxe mais próxima das querys dos banco de dados, com uma simplicidade comparada a um ORM.

✍️ Instrução

Pré configuração.

Para executar esse projeto será necessário ter o node e yarn instalados, de preferência para as versões apresentadas nas tags do início desse readme.

Para conseguir transitar bem entre as versões sugiro o uso do nvm

Configuração

Após acessar o diretório do projeto, crie seu arquivo .env na raiz do projeto seguindo o arquivo .env.example.

Agora você deve executar os seguintes passos no seu terminal:

# instalação dos pacotes
$ yarn

# Execução das migrations
$ yarn run knex -- migrate:latest

# execução do servidor
$ yarn dev

Agora você poderá testar com a utilização de uma ferramenta como por exemplo: insomnia ou postman

About

Esse projeto é uma API REST, onde podemos gerenciar dietas

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published