Backend da aplicacao Web RunX, implementado com Node.js, Express, Prisma e PostgreSQL.
- Estrutura de backend por camadas concluida.
- Modulos de autenticacao, utilizadores, corridas, feed social, temas, metas semanais e grupos implementados.
- Integracoes externas (tempo real e sugestao de rotas por IA) nao sao requisito obrigatorio desta fase e estao tratadas como opcional/stub.
- Node.js + TypeScript
- Express (API REST)
- Prisma ORM + PostgreSQL
- Zod (validacao)
- JWT + bcrypt (autenticacao)
- Swagger UI (documentacao interativa)
Separacao em camadas:
src/routes- definicao de endpoints e middlewares por rotasrc/controllers- adaptacao HTTP (request/response)src/services- regras de negociosrc/models- acesso a dados via Prismasrc/schemas- validacao de inputs com Zodsrc/middlewares- autenticacao, validacao e tratamento de erro
- Node.js 20+
- PostgreSQL 14+
- npm
- Instalar dependencias.
npm install- Criar
.envcom base no exemplo.
cp .env.example .env- Atualizar credenciais no
.env.
DATABASE_URL="postgresql://USER:PASSWORD@localhost:5432/runx_fase2?schema=public"
PORT=3000
JWT_ACCESS_SECRET="change_me_access"
JWT_REFRESH_SECRET="change_me_refresh"
JWT_ACCESS_EXPIRES_IN="1h"
JWT_REFRESH_EXPIRES_IN="7d"
OPENWEATHER_API_KEY=""- Criar base de dados (exemplo).
createdb runx_fase2- Gerar Prisma Client e aplicar migracoes.
npm run prisma:generate
npm run prisma:migrate- Arrancar servidor em dev.
npm run devnpm run dev- modo desenvolvimento com watchnpm run build- compilacao TypeScriptnpm run start- executar build emdistnpm run prisma:generate- gerar Prisma Clientnpm run prisma:migrate- aplicar migracoesnpm run prisma:studio- abrir Prisma Studio
- API:
http://localhost:3000 - Health:
http://localhost:3000/health - Swagger:
http://localhost:3000/api-docs
GET /health
POST /auth/registerPOST /auth/loginPOST /auth/refreshPOST /auth/logout
GET /users/mePUT /users/meDELETE /users/mePOST /users/me/avatar
GET /runsPOST /runsGET /runs/weekGET /runs/:idPUT /runs/:idDELETE /runs/:idGET /runs/:id/suggest-route(stub para fases seguintes)
GET /themesGET /themes/:idPOST /themesDELETE /themes/:id
GET /weekly-goalsGET /weekly-goals/currentPUT /weekly-goalsDELETE /weekly-goals/:id
GET /feedPOST /postsGET /posts/:idDELETE /posts/:idPOST /posts/:id/reactionsDELETE /posts/:id/reactionsPOST /posts/:id/commentsDELETE /posts/comments/:idGET /notifications
GET /groupsPOST /groupsGET /groups/:idPUT /groups/:idDELETE /groups/:idPOST /groups/:id/membersDELETE /groups/:id/members/:uidGET /groups/:id/eventsPOST /groups/:id/eventsPUT /groups/:id/events/:eidDELETE /groups/:id/events/:eidPOST /groups/:id/events/:eid/join
- Guia de autenticacao:
docs/auth-tests.md - Guia de grupos e eventos:
docs/groups-tests.md
- Ver
docs/relatorio-final-fase2.md - Versao TeX:
docs/relatorio-final-fase2.tex
- User
- Run
- Theme
- Group
- GroupMember
- GroupEvent
- EventParticipation
- Post
- PostReaction
- PostComment
- WeeklyGoal
- Notification
- RouteSuggestion
- WeeklyReport
- RefreshToken