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 - 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
- Vitest - Framework de testes moderno
- SuperTest - Testes de integração HTTP
- TSX - Executor TypeScript para desenvolvimento
- TSUP - Bundler TypeScript ultra-rápido
- 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
- Registro de novos usuários com nome e email único
- Sistema de sessões baseado em cookies
- Autenticação automática via middleware
- 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
- 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
- Validação de dados com Zod
- Middleware de autenticação
- Sessões seguras com cookies HTTPOnly
- Validação de UUIDs nos parâmetros
- Node.js (versão 18 ou superior)
- npm ou yarn
- Clone o repositório
git clone <url-do-repositorio>
cd api-daily-diet- Instale as dependências
npm install- 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- Execute as migrations
npm run knex migrate:latest- Inicie o servidor de desenvolvimento
npm run devA API estará disponível em http://localhost:3333
# 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 testesPOST /users- Criar novo usuário
POST /foods- Criar nova refeiçãoGET /foods- Listar todas as refeições do usuárioGET /foods/:id- Buscar refeição específicaPUT /foods/:id- Atualizar refeiçãoDELETE /foods/:id- Excluir refeiçãoGET /foods/metrics- Obter métricas do usuário
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
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
- 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