Este projeto implementa uma API REST seguindo o padrão MVC (Model-View-Controller), organizada para facilitar a manutenção, escalabilidade e clareza do código.
A aplicação foca no desenvolvimento prático de operações básicas de um sistema CRUD (Criar, Ler, Atualizar, Deletar), utilizando TypeScript, e prezando por boas práticas como:
- Validação rigorosa dos dados de entrada.
- Tipagem forte para maior segurança e autocompletar durante o desenvolvimento.
- Controle de permissões de usuários.
- Separação clara das responsabilidades em camadas: dados, negócio, controle e rotas.
O projeto funciona com dados em memória, simulando um banco de dados, e aborda desafios reais que auxiliam a fixar conceitos essenciais para desenvolvimento de APIs modernas.
- Node.js: Ambiente de execução JavaScript no servidor.
- TypeScript: Para tipagem estática e maior robustez.
- Express: Framework para construção da API HTTP.
- Git & GitHub: Controle de versão e hospedagem do código-fonte.
trabalho-dev-api/
│
├─ src/ # Código-fonte da aplicação
│ ├─ business/ # Service: regras e lógica de negócio da aplicação
│ │ ├─ postBusiness.ts # Lógica de negócio relacionada a posts
│ │ └─ userBusiness.ts # Lógica de negócio relacionada a usuários
│ │
│ ├─ controllers/ # Controller: lida com requisições HTTP e respostas
│ │ ├─ postController.ts # Controladores para rotas de posts
│ │ └─ userController.ts # Controladores para rotas de usuários
│ │
│ ├─ data/ # Repository: acesso e manipulação dos dados (simulação do DB)
│ │ ├─ postData.ts # Funções para acessar/manipular dados dos posts
│ │ └─ userData.ts # Funções para acessar/manipular dados dos usuários
│ │
│ ├─ img/ # Imagem para branding e estilização do projeto
│ │ └─ IMGTDA.png # Imagem do Repositório
│ │
│ ├─ routes/ # Routes: definição dos endpoints da API
│ │ ├─ postRoutes.ts # Rotas relacionadas a posts
│ │ └─ userRoutes.ts # Rotas relacionadas a usuários
│ │
│ ├─ types/ # Models: tipos e interfaces TypeScript para tipagem forte
│ │ ├─ postTypes.ts # Tipos e interfaces para posts
│ │ └─ userTypes.ts # Tipos e interfaces para usuários
│ │
│ ├─ app.ts # Configura o Express, middlewares e rotas
│ ├─ db.ts # Simulação do banco de dados (dados em memória)
│ └─ server.ts # Entry point: inicializa o servidor Express
│
├─ .gitignore # Arquivos e pastas ignoradas pelo Git
├─ package.json # Gerenciador de dependências e scripts do projeto
├─ README.md # Documentação do projeto
└─ tsconfig.json # Configurações do compilador TypeScript
Endpoint: GET /users/:id
- Retorna um usuário pelo seu ID.
- Resposta 404 se não encontrado.
Endpoint: GET /users/age-range?min=X&max=Y
- Filtra usuários entre
min
emax
anos. - Valida os parâmetros para garantir que sejam números.
Endpoint: POST /posts
- Cria um post vinculado a um usuário existente (
authorId
no header). - Valida título (mínimo 3 caracteres) e conteúdo (mínimo 10 caracteres).
Endpoint: PUT /users/:id
- Atualização completa dos dados do usuário.
- Campos obrigatórios: nome, email, idade, role.
- Verifica conflito de email entre usuários.
Endpoint: PATCH /posts/:id
- Permite atualizar apenas
title
,content
epublished
. - Campos
id
,authorId
ecreatedAt
não podem ser alterados.
Endpoint: DELETE /posts/:id
- Só pode ser removido pelo autor ou por usuários com role
admin
. - Verificação feita pelo header
User-Id
.
Endpoint: DELETE /users/cleanup-inactive?confirm=true
- Remove usuários que não possuem posts.
- Não remove usuários com role
admin
. - Retorna a lista dos usuários removidos.
Você pode usar clientes HTTP como Postman, Thunder Client ou Insomnia.
-
Configure os endpoints conforme descrito nos exercícios acima.
-
Utilize o header
User-Id
nas requisições que exigem autenticação/autorização. -
Exemplos de payload e respostas estão descritos abaixo e podem ser usados para facilitar os testes.
Para executar a aplicação localmente, siga os passos abaixo:
-
Clone o repositório:
git clone https://github.com/arthursteinerr/trabalho-dev-api.git
-
Entre na pasta do projeto:
cd trabalho-dev-api
-
Instale as dependências:
npm install
-
Inicie o servidor em modo de desenvolvimento:
npm run dev
-
Acesse a API: A aplicação estará rodando em
http://localhost:3000
.
{
"success": true,
"data": {
"id": 1,
"name": "Arthur",
"email": "arthur@gmail.com",
"role": "admin",
"age": 20
}
}
{
"success": true,
"data": [
{
"id": 2,
"name": "Thiago",
"email": "thiago@gmail.com",
"role": "user",
"age": 35
},
{
"id": 4,
"name": "Flávio",
"email": "flavio@gmail.com",
"role": "user",
"age": 34
}
]
}
{
"success": true,
"data": {
"id": 3,
"title": "Meu Terceiro Post",
"content": "Conteúdo válido com mais de 10 caracteres",
"authorId": 1,
"createdAt": "2025-09-22T14:59:09.574Z",
"published": false
}
}
{
"success": true,
"data": {
"id": 1,
"name": "Arthur Steiner",
"email": "arthur@teste.com",
"role": "admin",
"age": 30
}
}
{
"id": 1,
"title": "Título Atualizado",
"content": "Conteúdo válido com mais de 10 caracteres",
"authorId": 1,
"createdAt": "2025-09-22T14:59:09.574Z",
"published": true
}
{
"message": "Post removido com sucesso"
}
[
{
"id": 2,
"name": "Thiago",
"email": "thiago@gmail.com",
"role": "user",
"age": 35
},
{
"id": 3,
"name": "Thais",
"email": "thais@gmail.com",
"role": "user",
"age": 19
}
]
Arthur Steiner, Estudante de Análise e Desenvolvimento de Sistemas — FAMINAS Muriaé
GitHub: @arthursteinerr
Este projeto foi desenvolvido para a disciplina de Desenvolvimento de APIs da FAMINAS, como parte do Trabalho Acadêmico.