API REST para o feed social do Image Feed (front-end). Monólito Fastify com PostgreSQL, Redis e armazenamento local de arquivos (posts estilo rede social).
| Camada | Tecnologia |
|---|---|
| Runtime | Node.js ≥ 20 |
| Framework | Fastify 5 |
| Linguagem | TypeScript 5.6 |
| Banco | PostgreSQL + Prisma |
| Cache | Redis (ioredis) |
| Auth | JWT + bcrypt |
| Validação | JSON Schema (AJV + ajv-formats) |
| Testes | Vitest |
| Logs | Winston |
| Container | Docker / docker-compose (opcional) |
- Autenticação: registro, login (JWT)
- Usuários: perfil, busca, sugestões, seguir / deixar de seguir, seguidores / seguindo
- Posts: CRUD, feed (quem você segue + você), explore, curtidas
- Comentários: CRUD por post
- Upload multipart → servido em
/static/* - Notificações em tempo real via SSE (
GET /api/notifications, com JWT) - Rate limiting global e limite mais restrito em login/registro
- Públicas (
/public/*):POST /public/login,POST /public/register - Privadas (
/api/*, headerAuthorization: Bearer <token>): demais endpoints de usuários, posts, comentários, upload e SSE
Servidor escuta em http://0.0.0.0:8080 por padrão.
Copie .env.example para .env e ajuste:
NODE_ENV=dev
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/m-feed
REDIS_HOST=localhost
REDIS_PORT=6379
JWT_KEY=change-me-to-a-strong-random-secret
JWT_EXPIRY_SECONDS=3600git clone https://github.com/ma-molinari/m-feed-api.git
cd m-feed-api
# dependências (o projeto usa yarn.lock)
yarn install
# aplicar migrações
yarn migrations
# ou: npx prisma migrate dev
# subir Postgres + Redis (ex.: Docker) antes do próximo passo
yarn devOutros scripts:
| Comando | Descrição |
|---|---|
yarn dev |
Servidor com nodemon + ts-node |
yarn build |
Compila TypeScript → build/ |
yarn start |
Build + executa build/index.js |
yarn lint |
ESLint |
yarn migrations |
prisma migrate dev |
yarn test |
Vitest (uma execução) |
yarn test:watch |
Vitest em modo watch |
Os testes em src/__tests__/ esperam .env com DATABASE_URL, REDIS_* e JWT_KEY válidos para o ambiente local.
docker-compose upSobe backend na porta 8080, Postgres 5432, Redis 6379 e (se a imagem existir) o front na 3000. Defina JWT_KEY (e opcionalmente JWT_EXPIRY_SECONDS) no ambiente ou em um .env na raiz do compose.
Detalhes de arquitetura, convenções, integrações e testes estão em docs/ (por exemplo docs/ARCHITECTURE.md, docs/STRUCTURE.md, docs/TESTING.md).
src/scripts/backfill-social.ts— utilitário para sincronizar dados sociais (ex.: follows) com o banco; executar comts-nodee variáveis carregadas (mesmo padrão do.env).
Autor: Matheus Molinari