Skip to content

melloxyz/api-daily-diet

Repository files navigation

🍎 Daily Diet API

Uma API REST robusta para controle de dieta diária, desenvolvida com TypeScript, Fastify e SQLite. A aplicação permite aos usuários registrar suas refeições, acompanhar se estão dentro da dieta e visualizar métricas detalhadas do seu progresso alimentar.

TypeScript Fastify SQLite Knex

🚀 Tecnologias Utilizadas

Backend

  • TypeScript - Tipagem estática para JavaScript
  • Fastify - Framework web rápido e eficiente
  • Knex.js - Query builder para SQL
  • SQLite - Banco de dados relacional leve
  • Zod - Validação de schemas TypeScript

Desenvolvimento

  • Vitest - Framework de testes moderno
  • SuperTest - Testes de integração HTTP
  • TSX - Executor TypeScript para desenvolvimento
  • TSUP - Bundler TypeScript ultra-rápido

Arquitetura

  • RESTful API - Padrão arquitetural
  • Migrations - Controle de versão do banco de dados
  • Middleware - Sistema de autenticação
  • Cookie-based Sessions - Gerenciamento de sessões

⚡ Funcionalidades

👤 Gerenciamento de Usuários

  • Registro de novos usuários com nome e email único
  • Sistema de sessões baseado em cookies
  • Autenticação automática via middleware

🍽️ Controle de Refeições

  • Criar refeição - Registrar nova refeição com nome, descrição, data e status da dieta
  • Listar refeições - Visualizar todas as refeições do usuário ordenadas por data
  • Visualizar refeição - Detalhes específicos de uma refeição
  • Editar refeição - Atualizar informações de refeições existentes
  • Excluir refeição - Remover refeições do histórico

📊 Métricas e Analytics

  • Total de refeições registradas
  • Refeições dentro da dieta vs fora da dieta
  • Melhor sequência de refeições dentro da dieta
  • Dashboard personalizado por usuário

🔒 Segurança

  • Validação de dados com Zod
  • Middleware de autenticação
  • Sessões seguras com cookies HTTPOnly
  • Validação de UUIDs nos parâmetros

🛠️ Como Executar o Projeto

Pré-requisitos

  • Node.js (versão 18 ou superior)
  • npm ou yarn

Instalação

  1. Clone o repositório
git clone <url-do-repositorio>
cd api-daily-diet
  1. Instale as dependências
npm install
  1. Configure o ambiente
# Crie o arquivo .env na raiz do projeto
echo "NODE_ENV=development" > .env
echo "DATABASE_URL=./db/app.db" >> .env
echo "PORT=3333" >> .env
  1. Execute as migrations
npm run knex migrate:latest
  1. Inicie o servidor de desenvolvimento
npm run dev

A API estará disponível em http://localhost:3333

Comandos Disponíveis

# Desenvolvimento
npm run dev          # Inicia servidor em modo watch

# Produção
npm run build        # Compila para produção
npm start           # Inicia servidor de produção

# Banco de dados
npm run knex migrate:latest    # Executa migrations
npm run knex migrate:rollback  # Desfaz última migration

# Testes
npm test            # Executa todos os testes

📚 Endpoints da API

Usuários

  • POST /users - Criar novo usuário

Refeições

  • POST /foods - Criar nova refeição
  • GET /foods - Listar todas as refeições do usuário
  • GET /foods/:id - Buscar refeição específica
  • PUT /foods/:id - Atualizar refeição
  • DELETE /foods/:id - Excluir refeição
  • GET /foods/metrics - Obter métricas do usuário

🎯 Aprendizados e Desafios

💡 Principais Aprendizados

Arquitetura Backend Moderna

  • Implementação de APIs RESTful seguindo boas práticas
  • Estruturação modular de rotas e middlewares
  • Gerenciamento de estado com sessões baseadas em cookies

TypeScript Avançado

  • Tipagem estática em projetos Node.js
  • Interfaces customizadas para requests autenticados
  • Validação de schemas com Zod

Banco de Dados e Migrations

  • Modelagem relacional com Knex.js
  • Sistema de migrations para versionamento do schema
  • Queries otimizadas e relacionamentos entre tabelas

Testes Automatizados

  • Testes de integração com Vitest e SuperTest
  • Configuração de ambiente de testes isolado
  • Cobertura completa dos endpoints da API

🔥 Desafios Superados

1. Sistema de Autenticação

  • Desafio: Implementar autenticação stateful sem JWT
  • Solução: Desenvolvido sistema de sessões com cookies seguros
  • Aprendizado: Compreensão profunda de diferentes estratégias de autenticação

2. Cálculo de Métricas Complexas

  • Desafio: Calcular a melhor sequência de refeições na dieta
  • Solução: Algoritmo eficiente usando reduce para iterar uma única vez
  • Aprendizado: Otimização de algoritmos e manipulação de arrays

3. Validação de Dados Robusta

  • Desafio: Garantir integridade dos dados em todos os endpoints
  • Solução: Schemas Zod para validação consistente
  • Aprendizado: Importância da validação em APIs públicas

4. Estrutura de Testes Abrangente

  • Desafio: Testar fluxos completos com autenticação
  • Solução: Setup de testes com cookies e reset de database
  • Aprendizado: Estratégias de teste para aplicações stateful

🚀 Competências Desenvolvidas

  • Backend Development: API REST, autenticação, middleware
  • TypeScript: Tipagem avançada, interfaces, generics
  • Database Management: Migrations, relacionamentos, queries
  • Testing: Testes de integração, mocking, isolamento
  • DevOps: Build pipeline, environment configuration
  • Code Quality: ESLint, estrutura modular, clean code

About

Backend completo para registo de refeições e monitorização de métricas de dieta, desenvolvido com foco em performance e boas práticas de código.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages