Skip to content

About

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.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Masterchef API

Status Node TypeScript Express MongoDB Docker

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.


Sobre o projeto

A aplicação foi organizada com foco em separação de responsabilidades:

  • program.ts é o ponto de entrada.
  • startUp.ts monta o Express e registra as rotas.
  • shared/container.ts concentra o container de DI.
  • controller/, services/ e repository/ 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.


Stack

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

Estrutura

api/src
├── contracts
├── controller
├── infra
├── mock
├── models
├── repository
├── routes
├── services
├── shared
├── program.ts
└── startUp.ts

Camadas

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

Rotas

Root

GET /

Retorno:

{ "versao": "0.0.1" }

News

GET /api/v1/news/:page/:qtd
GET /api/v1/news/:id

Videos

GET /api/v1/videos/:page/:qtd
GET /api/v1/videos/:id

Galeria

GET /api/v1/galeria/:page/:qtd
GET /api/v1/galeria/:id

Como rodar

Com Docker

Na raiz do projeto:

docker compose up -d

Logs da API:

docker compose logs -f api

Parar os containers:

docker compose down

Localmente

Dentro da pasta api/:

npm install
npm run dev

Outros scripts úteis:

npm run build
npm run start
npm run lint
npm run lint:fix
npm run format
npm run check-format

Variáveis de ambiente

O 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=admin

Banco de dados

O MongoDB trabalha com as collections:

  • news
  • videos
  • galeria

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.json
  • api/src/mock/videos.json
  • api/src/mock/galeria.json

Collections

Collections do MongoDB


Injeção de dependência

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.ts registra tudo de forma explícita.

Observação

O bootstrap atual não usa server.ts. A entrada real da aplicação é api/src/program.ts.

About

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.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages