🥗 Uma aplicação RESTful desenvolvida para auxiliar no controle da alimentação diária.
- 👀 Visão Geral
- 🛠️ Tecnologias Utilizadas
- ⚙️ Funcionalidades
- 🔧 Instalação
- 🔗 Endpoints
- 🔐 Autenticação
- 🤝 Contribuições
- ⭐ Apoie este Projeto
- 📜 Licença
- 📞 Contato
O Daily Diet API é uma aplicação RESTful desenvolvida com o objetivo de facilitar o controle da alimentação diária dos usuários. Através dela, é possível registrar e gerenciar refeições, acompanhar estatísticas nutricionais e obter um resumo com dados relevantes da dieta. Com autenticação via JWT, integração com PostgreSQL e arquitetura moderna baseada em Node.js, Fastify e Prisma, a API proporciona uma experiência segura, eficiente e escalável para quem deseja manter hábitos alimentares mais organizados e saudáveis.
- 🟢 Node.js: Plataforma para execução do JavaScript no servidor.
- 🟦 TypeScript: Superset do JavaScript com tipagem estática.
- ⚡ Fastify: Framework web de alta performance para Node.js.
- 🗄️ PostgreSQL: Banco de dados relacional utilizado no projeto.
- 🛠️ Prisma: ORM moderno para interações com o banco de dados.
- 🐳 Docker: Containerização para ambiente de desenvolvimento.
- 💎 Zod: Validação de esquemas e dados.
- 🔑 JWT: Autenticação baseada em tokens JSON Web Token.
- 🔐 bcryptjs: Biblioteca para hashing e verificação de senhas.
- 🌿 Dotenv: Gerenciamento de variáveis de ambiente.
- ✨ ESLint: Linter para garantir a qualidade do código.
- 👤 Criar usuário: Permite registrar um novo usuário com senha criptografada.
- 🔑 Login: Autenticação via JWT.
- 🍽️ Adicionar uma refeição: Registra uma nova refeição no sistema.
- 🔍 Retornar uma refeição específica: Obtém detalhes de uma refeição.
- ✏️ Atualizar uma refeição: Altera os dados de uma refeição específica.
- ❌ Deletar uma refeição: Remove uma refeição do sistema.
- 📄 Listar todas as refeições: Retorna todas as refeições registradas pelo usuário.
- 📊 Gerar resumo: Calcula estatísticas das refeições do usuário.
-
Clone o repositório:
git clone https://github.com/joschonarth/node-daily-diet-api.git cd node-daily-diet-api
-
Crie um arquivo
.env
a partir do exemplo:cp .env.example .env
Edite o arquivo
.env
para configurar as variáveis de ambiente necessárias. -
Instale as dependências:
npm install
-
Inicie o banco de dados PostgreSQL utilizando o container Docker com a imagem
bitnami/postgresql
:docker-compose up -d
-
Execute as migrações do banco de dados:
npx prisma migrate dev
-
Inicie a aplicação:
npm run dev
A API estará disponível em
http://localhost:3333
.
-
Método:
POST
-
URL:
/user
-
Corpo da Requisição:
{ "username": "username", "email": "user@email.com", "password": "password" }
-
Método:
POST
-
URL:
/login
-
Corpo da Requisição:
{ "email": "user@email.com", "password": "password" }
-
Resposta:
{ "token": "your_token" }
-
Método:
POST
-
URL:
/meals
-
Corpo da Requisição:
{ "name": "Breakfast", "description": "Scrambled eggs and bread", "inDiet": false }
-
Método:
GET
-
URL:
/meals/:id
-
Resposta:
{ "id": "de3bf9e0-b9bc-4730-b615-269382edfef3", "name": "Breakfast", "description": "Scrambled eggs and wholemeal bread", "date": "2025-02-15T08:00:00", "inDiet": true, "userId": "f3c63f6b-9ece-4f4f-b812-e5f4dc9e0492" }
-
Método:
POST
-
URL:
/meals:id
-
Corpo da Requisição:
{ "description": "Scrambled eggs and wholemeal bread", "inDiet": true }
-
Método:
POST
-
URL:
/meals/:id
-
Resposta:
{ "message": "Meal deleted successfully" }
-
Método:
GET
-
URL:
/meals
-
Resposta:
[ { "id": "de3bf9e0-b9bc-4730-b615-269382edfef3", "name": "Breakfast", "description": "Scrambled eggs and wholemeal bread", "date": "2025-02-15T08:00:00", "inDiet": true, "userId": "f3c63f6b-9ece-4f4f-b812-e5f4dc9e0492" }, { "id": "499ef8b4-7731-4615-ba34-86d8146e2ef9", "name": "Lunch", "description": "Grilled chicken and green salad", "date": "2025-02-15T12:00:00", "inDiet": true, "userId": "f3c63f6b-9ece-4f4f-b812-e5f4dc9e0492" }, ]
-
Método:
GET
-
URL:
/meals/summary
-
Resposta:
{ "totalMeals": 5, "totalOnDiet": 4, "totalOffDiet": 1, "bestStreak": 3 }
As rotas da API estão protegidas por autenticação JWT (JSON Web Token). Para acessar as rotas que requerem autenticação, é necessário obter um token de acesso.
-
Faça o login com suas credenciais (email e senha) na rota
/login
para obter um token JWT:- Método:
POST
- URL:
/login
- Corpo da Requisição:
{ "email": "user@email.com", "password": "password" }
- Resposta:
{ "token": "your_token" }
- Método:
-
Utilize o token nas requisições às rotas protegidas, incluindo-o no Postman (ou outro API Client) da seguinte forma:
- No Postman, vá até a aba Authorization.
- Selecione o tipo Bearer Token.
- No campo Token, insira o valor do seu token JWT obtido no passo anterior.
Agora você pode fazer requisições para as rotas protegidas com o token JWT.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. ✨
Se este projeto te ajudou ou te inspirou de alguma forma, não esqueça de deixar uma ⭐ no repositório! Isso faz toda a diferença! 🚀
Este projeto está licenciado sob a MIT License.