Skip to content

ma-molinari/m-feed-api

Repository files navigation

Image Feed API — backend do portfólio

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).

Stack

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)

Funcionalidades

  • 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

Rotas (resumo)

  • Públicas (/public/*): POST /public/login, POST /public/register
  • Privadas (/api/*, header Authorization: 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.

Variáveis de ambiente

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=3600

Como rodar localmente

git 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 dev

Outros 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

docker-compose up

Sobe 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.

Documentação no repositório

Detalhes de arquitetura, convenções, integrações e testes estão em docs/ (por exemplo docs/ARCHITECTURE.md, docs/STRUCTURE.md, docs/TESTING.md).

Scripts utilitários

  • src/scripts/backfill-social.ts — utilitário para sincronizar dados sociais (ex.: follows) com o banco; executar com ts-node e variáveis carregadas (mesmo padrão do .env).

Autor: Matheus Molinari

About

Backend de alta performance para feed social utilizando Fastify 5, Prisma (PostgreSQL) e Redis. Implementa autenticação JWT, notificações em tempo real via SSE e arquitetura escalável em TypeScript 5.6.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors