Backend API RESTful para a rede social Papacapim, desenvolvida com Node.js, TypeScript, Fastify e PostgreSQL.
💡 Projeto inspirado na API api.papacapim.just.pro.br. O objetivo deste repositório é reproduzir as funcionalidades e endpoints da API original para fins de aprendizado e desenvolvimento.
- Node.js 22 - Runtime JavaScript
- TypeScript - Superset tipado do JavaScript
- Fastify - Framework web rápido e leve
- Drizzle ORM - ORM TypeScript para PostgreSQL
- PostgreSQL - Banco de dados relacional
- Zod - Validação de schemas
- Swagger - Documentação da API
- Docker - Containerização
- bcrypt - Hash de senhas
- Vitest - Framework de testes unitários e E2E
- Supertest - Testes de integração HTTP
- Faker.js - Geração de dados aleatórios para testes
- ESLint - Padronização de código e linting
- Node.js v22+
- Docker & Docker Compose
- npm ou yarn
cd apinpm installCopie o arquivo .env.example para .env:
cp .env.example .envEdite o arquivo .env conforme necessário:
# Server
PORT=3333
# Database
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/papacapim
# JWT
JWT_SECRET=your-secret-key-change-this-in-productiondocker compose up -d postgresnpm run db:generate
npm run db:migratenpm run devA API estará disponível em http://localhost:3333
A documentação completa das rotas e esquemas está disponível através do Swagger UI.
Acesse em: http://localhost:3333/docs
O projeto utiliza Vitest para testes automatizados, Supertest para requisições HTTP e Faker.js para geração de massas de dados.
Certifique-se de criar um arquivo .env.test com as configurações do banco de dados de teste (diferente do desenvolvimento).
# Rodar suite de testes
npm run test
# Rodar em modo watch (desenvolvimento)
npm run test:watch
# Verificar cobertura de código
npm run test:coverageInicie todos os serviços:
docker compose up -dParar serviços:
docker compose downdocker compose up -d postgresnpm run dev- Inicia o servidor de desenvolvimentonpm run build- Compila o projeto para produçãonpm start- Inicia o servidor de produçãonpm run db:generate- Gera migrations do Drizzlenpm run db:migrate- Executa migrations
api/
├── src/
│ ├── drizzle/
│ │ ├── schema/ # Schemas do banco de dados
│ │ │ ├── users.ts
│ │ │ ├── sessions.ts
│ │ │ ├── posts.ts
│ │ │ ├── followers.ts
│ │ │ └── likes.ts
│ │ ├── migrations/ # Migrations Drizzle
│ │ └── index.ts # Conexão do banco
│ ├── functions/ # Funções utilitárias
│ │ ├── hash-password.ts
│ │ ├── verify-password.ts
│ │ └── generate-token.ts
│ ├── routes/ # Rotas da API
│ │ ├── sessions/
│ │ ├── users/
│ │ ├── followers/
│ │ ├── posts/
│ │ └── likes/
│ ├── env.ts # Validação de variáveis de ambiente
│ └── server.ts # Configuração do servidor Fastify
├── .env # Variáveis de ambiente
├── .env.example # Template de variáveis
├── docker-compose.yml # Configuração Docker
├── Dockerfile # Imagem Docker
├── drizzle.config.ts # Configuração Drizzle
├── tsconfig.json # Configuração TypeScript
├── tsup.config.ts # Configuração build
└── package.json
A API utiliza tokens de sessão para autenticação. Após fazer login via /sessions, utilize o token retornado no header x-session-token nas requisições que necessitam autenticação.
- users: Usuários do sistema
- sessions: Sessões de autenticação
- posts: Postagens e respostas
- followers: Relacionamento de seguidores
- likes: Curtidas em postagens
Todas as tabelas possuem relacionamentos com cascade delete para manter a integridade referencial.
ISC
Desenvolvido como réplica local da API Papacapim por Diogo Mascarenhas