{"id":25703069,"url":"https://github.com/joschonarth/node-daily-diet-api","last_synced_at":"2026-04-12T06:34:06.518Z","repository":{"id":279286601,"uuid":"932431125","full_name":"joschonarth/node-daily-diet-api","owner":"joschonarth","description":"🥗 Daily Diet API is a RESTful application designed to help users track their daily meals, manage their diet, and generate nutritional statistics efficiently.","archived":false,"fork":false,"pushed_at":"2025-04-20T19:27:26.000Z","size":208,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-20T20:25:57.334Z","etag":null,"topics":["bcryptjs","docker","eslint","fastify","jwt","nodejs","postgresql","prisma","typescript","zod"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joschonarth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-13T22:40:48.000Z","updated_at":"2025-04-20T19:27:29.000Z","dependencies_parsed_at":"2025-02-24T20:20:19.708Z","dependency_job_id":"1ba65df4-507d-4bda-84f1-3c8ba6d05d23","html_url":"https://github.com/joschonarth/node-daily-diet-api","commit_stats":null,"previous_names":["joschonarth/node-daily-diet-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joschonarth/node-daily-diet-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-daily-diet-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-daily-diet-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-daily-diet-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-daily-diet-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joschonarth","download_url":"https://codeload.github.com/joschonarth/node-daily-diet-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-daily-diet-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31706764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T06:22:27.080Z","status":"ssl_error","status_checked_at":"2026-04-12T06:21:52.710Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bcryptjs","docker","eslint","fastify","jwt","nodejs","postgresql","prisma","typescript","zod"],"created_at":"2025-02-25T05:18:10.924Z","updated_at":"2026-04-12T06:34:06.509Z","avatar_url":"https://github.com/joschonarth.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🥗 Daily Diet API\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e🥗 Uma aplicação RESTful desenvolvida para auxiliar no controle da alimentação diária.\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003c!-- Último commit --\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/joschonarth/node-daily-diet-api?style=for-the-badge\u0026color=F28BA9\u0026labelColor=1C1E26\" alt=\"last-commit\"\u003e\n  \u003c!-- Linguagem principal --\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/top/joschonarth/node-daily-diet-api?style=for-the-badge\u0026color=B181F1\u0026labelColor=1C1E26\" alt=\"top-language\"\u003e\n  \u003c!-- Contador de linguagens --\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/count/joschonarth/node-daily-diet-api?style=for-the-badge\u0026color=61ffca\u0026labelColor=1C1E26\" alt=\"languages-count\"\u003e\n  \u003c!-- Licença --\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/joschonarth/node-daily-diet-api?style=for-the-badge\u0026color=F28BA9\u0026labelColor=1C1E26\" alt=\"license\"\u003e\n\u003c/p\u003e\n\n## 📑 Índice\n\n- [👀 Visão Geral](#-visão-geral)\n- [🛠️ Tecnologias Utilizadas](#️-tecnologias-utilizadas)\n- [⚙️ Funcionalidades](#️-funcionalidades)\n- [🔧 Instalação](#-instalação)\n- [🔗 Endpoints](#-endpoints)\n- [🔐 Autenticação](#-autenticação)\n- [🤝 Contribuições](#-contribuições)\n- [⭐ Apoie este Projeto](#-apoie-este-projeto)\n- [📜 Licença](#-licença)\n- [📞 Contato](#-contato)\n\n## 👀 Visão Geral\n\nO **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.\n\n## 🛠️ Tecnologias Utilizadas\n\n- 🟢 **Node.js**: Plataforma para execução do JavaScript no servidor.\n- 🟦 **TypeScript**: Superset do JavaScript com tipagem estática.\n- ⚡ **Fastify**: Framework web de alta performance para Node.js.\n- 🗄️ **PostgreSQL**: Banco de dados relacional utilizado no projeto.\n- 🛠️ **Prisma**: ORM moderno para interações com o banco de dados.\n- 🐳 **Docker**: Containerização para ambiente de desenvolvimento.\n- 💎 **Zod**: Validação de esquemas e dados.\n- 🔑 **JWT**: Autenticação baseada em tokens JSON Web Token.\n- 🔐 **bcryptjs**: Biblioteca para hashing e verificação de senhas.\n- 🌿 **Dotenv**: Gerenciamento de variáveis de ambiente.\n- ✨ **ESLint**: Linter para garantir a qualidade do código.\n\n## ⚙️ Funcionalidades\n\n- 👤 **Criar usuário**: Permite registrar um novo usuário com senha criptografada.\n- 🔑 **Login**: Autenticação via JWT.\n- 🍽️ **Adicionar uma refeição**: Registra uma nova refeição no sistema.\n- 🔍 **Retornar uma refeição específica**: Obtém detalhes de uma refeição.\n- ✏️ **Atualizar uma refeição**: Altera os dados de uma refeição específica.\n- ❌ **Deletar uma refeição**: Remove uma refeição do sistema.\n- 📄 **Listar todas as refeições**: Retorna todas as refeições registradas pelo usuário.\n- 📊 **Gerar resumo**: Calcula estatísticas das refeições do usuário.\n\n## 🔧 Instalação\n\n1. **Clone o repositório:**\n\n    ```bash\n    git clone https://github.com/joschonarth/node-daily-diet-api.git\n    cd node-daily-diet-api\n    ```\n\n2. **Crie um arquivo `.env` a partir do exemplo:**\n\n    ```bash\n    cp .env.example .env\n    ```\n\n    Edite o arquivo `.env` para configurar as variáveis de ambiente necessárias.\n\n3. **Instale as dependências:**\n\n    ```bash\n    npm install\n    ```\n\n4. Inicie o banco de dados **PostgreSQL** utilizando o container **Docker** com a imagem ``bitnami/postgresql``:\n\n   ```bash\n   docker-compose up -d\n   ```\n\n5. **Execute as migrações do banco de dados:**\n\n    ```bash\n    npx prisma migrate dev\n    ```\n\n6. **Inicie a aplicação:**\n\n    ```bash\n    npm run dev\n    ```\n\n    A API estará disponível em `http://localhost:3333`.\n\n## 🔗 Endpoints\n\n### 👤 Criar Usuário\n\n- **Método**: `POST`\n- **URL**: `/user`\n- **Corpo da Requisição:**\n\n    ```json\n    {\n        \"username\": \"username\",\n        \"email\": \"user@email.com\",\n        \"password\": \"password\"\n    }\n    ```\n\n### 🔑 Login\n\n- **Método**: `POST`\n- **URL**: `/login`\n- **Corpo da Requisição:**\n\n    ```json\n    {\n        \"email\": \"user@email.com\",\n        \"password\": \"password\"\n    }\n    ```\n\n- **Resposta:**\n\n    ```json\n    {\n        \"token\": \"your_token\"\n    }\n    ```\n\n### 🍽️ Adicionar uma Refeição\n\n- **Método**: `POST`\n- **URL**: `/meals`\n- **Corpo da Requisição:**\n\n    ```json\n    {\n        \"name\": \"Breakfast\",\n        \"description\": \"Scrambled eggs and bread\",\n        \"inDiet\": false\n    }\n    ```\n\n### 🔍 Retornar uma Refeição Específica\n\n- **Método**: `GET`\n- **URL**: `/meals/:id`\n- **Resposta:**\n\n    ```json\n    {\n        \"id\": \"de3bf9e0-b9bc-4730-b615-269382edfef3\",\n        \"name\": \"Breakfast\",\n        \"description\": \"Scrambled eggs and wholemeal bread\",\n        \"date\": \"2025-02-15T08:00:00\",\n        \"inDiet\": true,\n        \"userId\": \"f3c63f6b-9ece-4f4f-b812-e5f4dc9e0492\"\n    }\n    ```\n\n### ✏️ Atualizar uma Refeição\n\n- **Método**: `POST`\n- **URL**: `/meals:id`\n- **Corpo da Requisição:**\n\n    ```json\n    {\n        \"description\": \"Scrambled eggs and wholemeal bread\",\n        \"inDiet\": true\n    }\n    ```\n\n### ❌ Deletar uma Refeição\n\n- **Método**: `POST`\n- **URL**: `/meals/:id`\n- **Resposta:**\n\n    ```json\n    {\n        \"message\": \"Meal deleted successfully\"\n    }\n    ```\n\n### 📄 Listar Refeições\n\n- **Método**: `GET`\n- **URL**: `/meals`\n- **Resposta:**\n\n    ```json\n    [\n        {\n            \"id\": \"de3bf9e0-b9bc-4730-b615-269382edfef3\",\n            \"name\": \"Breakfast\",\n            \"description\": \"Scrambled eggs and wholemeal bread\",\n            \"date\": \"2025-02-15T08:00:00\",\n            \"inDiet\": true,\n            \"userId\": \"f3c63f6b-9ece-4f4f-b812-e5f4dc9e0492\"\n        },\n        {\n            \"id\": \"499ef8b4-7731-4615-ba34-86d8146e2ef9\",\n            \"name\": \"Lunch\",\n            \"description\": \"Grilled chicken and green salad\",\n            \"date\": \"2025-02-15T12:00:00\",\n            \"inDiet\": true,\n            \"userId\": \"f3c63f6b-9ece-4f4f-b812-e5f4dc9e0492\"\n        },\n    ]\n\n    ```\n\n### 📊 Gerar Resumo\n\n- **Método**: `GET`\n- **URL**: `/meals/summary`\n- **Resposta:**\n\n    ```json\n    {\n        \"totalMeals\": 5,\n        \"totalOnDiet\": 4,\n        \"totalOffDiet\": 1,\n        \"bestStreak\": 3\n    }\n    ```\n\n## 🔐 Autenticação\n\nAs 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.\n\n### Como se autenticar\n\n1. **Faça o login** com suas credenciais (email e senha) na rota `/login` para obter um token JWT:\n\n    - **Método**: `POST`\n    - **URL**: `/login`\n    - **Corpo da Requisição:**\n\n    ```json\n    {\n        \"email\": \"user@email.com\",\n        \"password\": \"password\"\n    }\n    ```\n\n    - **Resposta**:\n\n    ```json\n    {\n        \"token\": \"your_token\"\n    }\n    ```\n\n2. **Utilize o token** nas requisições às rotas protegidas, incluindo-o no Postman (ou outro API Client) da seguinte forma:\n\n    - No Postman, vá até a aba **Authorization**.\n    - Selecione o tipo **Bearer Token**.\n    - No campo **Token**, insira o valor do seu token JWT obtido no passo anterior.\n\nAgora você pode fazer requisições para as rotas protegidas com o **token JWT**.\n\n## 🤝 Contribuições\n\nContribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. ✨\n\n## ⭐ Apoie este Projeto\n\nSe 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! 🚀\n\n## 📜 Licença\n\nEste projeto está licenciado sob a [MIT License](LICENSE).\n\n## 📞 Contato\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/joschonarth/)\n[![Gmail](https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white)](mailto:joschonarth@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fnode-daily-diet-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoschonarth%2Fnode-daily-diet-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fnode-daily-diet-api/lists"}