API em Node.js + TypeScript para publicar e consultar conteúdos do portal Masterchef. O projeto expõe endpoints de leitura para news, videos e galeria, com Express, MongoDB, Mongoose e injeção de dependência via tsyringe.
A aplicação foi organizada com foco em separação de responsabilidades:
program.tsé o ponto de entrada.startUp.tsmonta o Express e registra as rotas.shared/container.tsconcentra o container de DI.controller/,services/erepository/dividem a lógica por camada.
A conexão com o banco é lida da variável DATABASE_URL, com fallback para mongodb://localhost:27017/db_portal quando a variável não estiver definida.
| Tecnologia | Uso no projeto |
|---|---|
| Node.js 22+ | Runtime da aplicação |
| TypeScript | Tipagem e organização do código |
| Express 5 | Servidor HTTP |
| MongoDB | Banco de dados |
| Mongoose 9 | Modelagem e acesso aos dados |
| tsyringe | Injeção de dependência |
| reflect-metadata | Suporte aos decorators |
| Docker / Docker Compose | Ambiente local |
api/src
├── contracts
├── controller
├── infra
├── mock
├── models
├── repository
├── routes
├── services
├── shared
├── program.ts
└── startUp.ts
program.ts: inicializa o container e sobe o servidor.startUp.ts: configura o Express e registra as rotas.routes/*: agrupam as rotas por domínio.controller/*: fazem a ponte entre HTTP e service.services/*: concentram as regras de leitura.repository/*: acessam o MongoDB.models/*: definem tipos e schemas.infra/db.ts: abre a conexão com o banco.
GET /Retorno:
{ "versao": "0.0.1" }GET /api/v1/news/:page/:qtd
GET /api/v1/news/:idGET /api/v1/videos/:page/:qtd
GET /api/v1/videos/:idGET /api/v1/galeria/:page/:qtd
GET /api/v1/galeria/:idNa raiz do projeto:
docker compose up -dLogs da API:
docker compose logs -f apiParar os containers:
docker compose downDentro da pasta api/:
npm install
npm run devOutros scripts úteis:
npm run build
npm run start
npm run lint
npm run lint:fix
npm run format
npm run check-formatO projeto usa a raiz do repositório e api/.env com os mesmos valores esperados pelo Docker e pela aplicação.
Exemplo de .env:
PORT=5000
NODE_ENV=development
TZ=America/Sao_Paulo
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=root
MONGO_DATABASE=db_portal
DATABASE_URL=mongodb://root:root@mongo:27017/db_portal?authSource=adminO MongoDB trabalha com as collections:
newsvideosgaleria
Os modelos e schemas estão separados em arquivos próprios dentro de api/src/models.
Há também mocks em:
api/src/mock/news.jsonapi/src/mock/videos.jsonapi/src/mock/galeria.json
O projeto usa tsyringe com tokens definidos em api/src/shared/tokens.ts.
Fluxo atual:
- controllers recebem services por DI;
- services recebem repositories por DI;
- repositories recebem os
Models do Mongoose por DI; shared/container.tsregistra tudo de forma explícita.
O bootstrap atual não usa server.ts. A entrada real da aplicação é api/src/program.ts.
