Skip to content

About

API REST para consulta de materiais da FFA. Desenvolvida com Node.js, Express e TypeScript, expõe um endpoint paginado para listagem de materiais cadastrados no banco de dados.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

API Materiais

Tópicos

🔹 Descrição do projeto

🔹 Funcionalidades

🔹 Arquitetura

🔹 Endpoints

🔹 Pré-requisitos

🔹 Como rodar a aplicação

🔹 Variáveis de ambiente

🔹 Documentação interativa

🔹 Tecnologias utilizadas

🔹 Desenvolvedor


Descrição do projeto

API REST para consulta de materiais. Desenvolvida com Node.js, Express e TypeScript, expõe um endpoint paginado para listagem de materiais cadastrados no banco de dados PostgreSQL.

A API é hospedada no Railway e conta com documentação interativa via Swagger UI, CORS configurado por ambiente, health check e ready check para monitoramento de disponibilidade.


Funcionalidades

✔️ Listagem paginada de materiais com suporte a limit e page

✔️ Validação de parâmetros de query com retorno de erro 400 descritivo

✔️ Health check (/health) para verificar se a aplicação está viva

✔️ Ready check (/ready) com validação de conectividade com o banco

✔️ CORS configurado por ambiente via variável ALLOWED_ORIGINS

✔️ Middleware de tratamento de erros centralizado com AppError

✔️ Documentação interativa disponível em /api-docs (Swagger UI)


Arquitetura

O projeto segue separação por camadas (layered architecture), onde cada responsabilidade vive em seu próprio diretório dentro de src/.

src/
├── config/
│   ├── db.ts          # Pool de conexão PostgreSQL
│   ├── env.ts         # Validação e exposição de variáveis de ambiente
│   └── swagger.ts     # Spec OpenAPI 3.0 (schemas + paths)
│
├── routes/
│   └── materiais.ts   # Definição da rota GET /materiais com JSDoc @openapi
│
├── controllers/
│   └── materiaisController.ts   # Validação de query params e orquestração
│
├── services/
│   └── materiaisService.ts      # Regras de negócio e mapeamento para DTO
│
├── models/
│   └── Material.ts              # Acesso ao banco (queries SQL)
│
├── middlewares/
│   └── errorHandler.ts          # Tratamento centralizado de erros
│
├── types/
│   └── material.ts              # Interfaces Material e MaterialDTO
│
└── index.ts                     # Bootstrap da aplicação

Endpoints

Materiais

Método Rota Descrição
GET /materiais Lista materiais com paginação

Query params de /materiais:

Parâmetro Tipo Obrigatório Padrão Máximo Descrição
limit integer Não 50 100 Itens por página
page integer Não 1 — Número da página

Resposta 200:

{
  "data": [{ "id": 1, "nomeMaterial": "Cimento CP-II", "codigo": "CIM001" }],
  "total": 200,
  "limit": 50,
  "offset": 0
}

Resposta 400 (parâmetro inválido):

{ "error": "O parâmetro limit deve ser um número maior que 0" }

Infra

Método Rota Descrição
GET /health Retorna 200 se a aplicação está no ar
GET /ready Retorna 200 se o banco está acessível, 503 caso contrário

Pré-requisitos

⚠️ Node.js 18+

⚠️ PostgreSQL acessível (local ou Railway)


Como rodar a aplicação ▶️

1. Clone o repositório

git clone https://github.com/warlleyrocha/api-materiais.git
cd api-materiais

2. Instale as dependências

npm install

3. Configure as variáveis de ambiente

cp .env.example .env
# Edite o .env com sua DATABASE_URL e demais variáveis

4. Execute em modo desenvolvimento

npm run dev

5. Build para produção

npm run build
npm start

Scripts disponíveis

Script O que faz
npm run dev Inicia com nodemon + ts-node (hot reload)
npm run build Compila TypeScript para dist/
npm start Executa o build compilado

Variáveis de ambiente

Variável Obrigatória Padrão Descrição
DATABASE_URL Sim — String de conexão PostgreSQL
PORT Não 3000 Porta em que o servidor sobe
ALLOWED_ORIGINS Não * Origens permitidas no CORS, separadas por vírgula

Exemplo de .env:

DATABASE_URL=postgresql://usuario:senha@host:porta/database
PORT=3000
ALLOWED_ORIGINS=https://meuapp.com,https://outro.com

Documentação interativa

Com a aplicação rodando, acesse:

http://localhost:3000/api-docs

A documentação é gerada automaticamente via Swagger UI com base na spec OpenAPI 3.0 definida em src/config/swagger.ts e nas anotações @openapi das rotas.


Tecnologias utilizadas 📚

Tecnologia Uso
Node.js Runtime
TypeScript Tipagem estática
Express Framework HTTP
node-postgres (pg) Cliente PostgreSQL
dotenv Carregamento de variáveis de ambiente
cors Middleware de CORS
swagger-jsdoc Geração de spec OpenAPI a partir do código
swagger-ui-express Interface interativa da documentação
Railway Deploy e banco de dados em produção

Desenvolvedor:


Warlley Rocha

Licença

O arquivo de licença será adicionado posteriormente ao repositório.

About

API REST para consulta de materiais da FFA. Desenvolvida com Node.js, Express e TypeScript, expõe um endpoint paginado para listagem de materiais cadastrados no banco de dados.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages