https://github.com/joschonarth/node-daily-diet-api
🥗 Daily Diet API is a RESTful application designed to help users track their daily meals, manage their diet, and generate nutritional statistics efficiently.
https://github.com/joschonarth/node-daily-diet-api
bcryptjs docker eslint fastify jwt nodejs postgresql prisma typescript zod
Last synced: 2 months ago
JSON representation
🥗 Daily Diet API is a RESTful application designed to help users track their daily meals, manage their diet, and generate nutritional statistics efficiently.
- Host: GitHub
- URL: https://github.com/joschonarth/node-daily-diet-api
- Owner: joschonarth
- License: mit
- Created: 2025-02-13T22:40:48.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-20T19:27:26.000Z (about 1 year ago)
- Last Synced: 2025-04-20T20:25:57.334Z (about 1 year ago)
- Topics: bcryptjs, docker, eslint, fastify, jwt, nodejs, postgresql, prisma, typescript, zod
- Language: TypeScript
- Homepage:
- Size: 203 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
🥗 Daily Diet API
🥗 Uma aplicação RESTful desenvolvida para auxiliar no controle da alimentação diária.
## 📑 Índice
- [👀 Visão Geral](#-visão-geral)
- [🛠️ Tecnologias Utilizadas](#️-tecnologias-utilizadas)
- [⚙️ Funcionalidades](#️-funcionalidades)
- [🔧 Instalação](#-instalação)
- [🔗 Endpoints](#-endpoints)
- [🔐 Autenticação](#-autenticação)
- [🤝 Contribuições](#-contribuições)
- [⭐ Apoie este Projeto](#-apoie-este-projeto)
- [📜 Licença](#-licença)
- [📞 Contato](#-contato)
## 👀 Visão Geral
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.
## 🛠️ Tecnologias Utilizadas
- 🟢 **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.
## ⚙️ Funcionalidades
- 👤 **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.
## 🔧 Instalação
1. **Clone o repositório:**
```bash
git clone https://github.com/joschonarth/node-daily-diet-api.git
cd node-daily-diet-api
```
2. **Crie um arquivo `.env` a partir do exemplo:**
```bash
cp .env.example .env
```
Edite o arquivo `.env` para configurar as variáveis de ambiente necessárias.
3. **Instale as dependências:**
```bash
npm install
```
4. Inicie o banco de dados **PostgreSQL** utilizando o container **Docker** com a imagem ``bitnami/postgresql``:
```bash
docker-compose up -d
```
5. **Execute as migrações do banco de dados:**
```bash
npx prisma migrate dev
```
6. **Inicie a aplicação:**
```bash
npm run dev
```
A API estará disponível em `http://localhost:3333`.
## 🔗 Endpoints
### 👤 Criar Usuário
- **Método**: `POST`
- **URL**: `/user`
- **Corpo da Requisição:**
```json
{
"username": "username",
"email": "user@email.com",
"password": "password"
}
```
### 🔑 Login
- **Método**: `POST`
- **URL**: `/login`
- **Corpo da Requisição:**
```json
{
"email": "user@email.com",
"password": "password"
}
```
- **Resposta:**
```json
{
"token": "your_token"
}
```
### 🍽️ Adicionar uma Refeição
- **Método**: `POST`
- **URL**: `/meals`
- **Corpo da Requisição:**
```json
{
"name": "Breakfast",
"description": "Scrambled eggs and bread",
"inDiet": false
}
```
### 🔍 Retornar uma Refeição Específica
- **Método**: `GET`
- **URL**: `/meals/:id`
- **Resposta:**
```json
{
"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"
}
```
### ✏️ Atualizar uma Refeição
- **Método**: `POST`
- **URL**: `/meals:id`
- **Corpo da Requisição:**
```json
{
"description": "Scrambled eggs and wholemeal bread",
"inDiet": true
}
```
### ❌ Deletar uma Refeição
- **Método**: `POST`
- **URL**: `/meals/:id`
- **Resposta:**
```json
{
"message": "Meal deleted successfully"
}
```
### 📄 Listar Refeições
- **Método**: `GET`
- **URL**: `/meals`
- **Resposta:**
```json
[
{
"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"
},
]
```
### 📊 Gerar Resumo
- **Método**: `GET`
- **URL**: `/meals/summary`
- **Resposta:**
```json
{
"totalMeals": 5,
"totalOnDiet": 4,
"totalOffDiet": 1,
"bestStreak": 3
}
```
## 🔐 Autenticação
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.
### Como se autenticar
1. **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:**
```json
{
"email": "user@email.com",
"password": "password"
}
```
- **Resposta**:
```json
{
"token": "your_token"
}
```
2. **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
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. ✨
## ⭐ Apoie este Projeto
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! 🚀
## 📜 Licença
Este projeto está licenciado sob a [MIT License](LICENSE).
## 📞 Contato
[](https://www.linkedin.com/in/joschonarth/)
[](mailto:joschonarth@gmail.com)