Esta aplicação segue o padrão MVC (Model-View-Controller), garantindo uma arquitetura organizada, modular e escalável.
O projeto oferece uma API REST completa para gerenciar usuários e seus pets, com CRUD total, validação de dados e controle de regras de negócio, conectada a PostgreSQL via Knex.
O foco principal é praticar o desenvolvimento de APIs com boas práticas, incluindo:
- Estruturação de projetos em TypeScript.
- Boas práticas em APIs RESTful.
- Persistência de dados em banco de dados relacional (PostgreSQL ou MySQL).
- Validação de dados, tratamento de erros e restrições de negócio.
- Separação clara de responsabilidades (Data, Business, Controller, Routes, Types).
- Node.js: Ambiente de execução JavaScript no servidor.
- TypeScript: Tipagem estática para maior segurança.
- Express: Framework para criação de servidores e APIs.
- Knex.js: Query builder SQL para Node.js.
- PostgreSQL: Banco de dados relacional.
- Git/GitHub: Controle de versão e colaboração.
- Dotenv: Gerenciamento de variáveis de ambiente.
trabalho-dev-api/
│
├─ src/
│ ├─ business/
│ │ ├─ userBusiness.ts # Lógica de negócio de usuários
│ │ └─ petBusiness.ts # Lógica de negócio de pets
│ │
│ ├─ controller/
│ │ ├─ userController.ts # Controladores de usuários
│ │ └─ petController.ts # Controladores de pets
│ │
│ ├─ data/
│ │ ├─ userData.ts # Acesso e manipulação de dados de usuários
│ │ └─ petData.ts # Acesso e manipulação de dados de pets
│ │
│ ├─ routes/
│ │ ├─ userRoutes.ts # Rotas de usuários
│ │ └─ petRoutes.ts # Rotas de pets
│ │
│ ├─ types/
│ │ ├─ User.ts # Tipos/interfaces de usuários
│ │ └─ Pet.ts # Tipos/interfaces de pets
│ │
│ ├─ dbConnection.ts # Configuração e conexão com o banco
│ ├─ app.ts # Configuração do Express, middlewares e rotas
│ └─ server.ts # Inicialização do servidor
│
├─ .env # Variáveis de ambiente (não versionar)
├─ package.json # Dependências e scripts do Node
├─ tsconfig.json # Configurações do TypeScript
└─ README.md # Documentação do projeto- GET /users → Lista todos os usuários.
- GET /users/:id → Busca usuário por ID. Retorna 404 se não existir.
- POST /users → Cria um usuário. Campos obrigatórios:
nameeemail. Valida duplicidade de email (409 se já existir). Retorna 201 com o usuário criado. - PUT /users/:id → Atualiza completamente um usuário existente. Valida ID e duplicidade de email. Retorna 200 com o usuário atualizado.
- DELETE /users/:id → Remove usuário apenas se não houver pets vinculados. Caso exista algum pet, retorna 409. Retorna 204 sem conteúdo.
- GET /pets → Lista todos os pets.
- GET /pets/:id → Busca pet por ID. Retorna 404 se não existir.
- POST /pets → Cria um pet. Campos obrigatórios:
nameeuser_id. Valida seuser_idexiste em usuários. Retorna 201 com o pet criado. - PUT /pets/:id → Atualiza completamente um pet existente. Valida ID e
user_idexistente. Retorna 200 com o pet atualizado. - DELETE /pets/:id → Remove pet. Retorna 404 se não existir. Retorna 204 sem conteúdo.
ideuser_iddevem ser números inteiros → 400 se inválidos.nameobrigatório (string não vazia) → 400 se inválido.emailobrigatório, válido e único → 400 ou 409 se inválido/duplicado.user_iddeve existir para criar ou atualizar pets → 400 se inválido.
Para acessar a documentação completa da API, incluindo detalhes sobre todos os endpoints disponíveis e exemplos de uso, acesse o link abaixo:
Você pode usar ferramentas como Postman, Thunder Client ou qualquer cliente HTTP para testar os endpoints da API.
Exemplo de requisição para criar um usuário na API:
POST /users
Content-Type: application/json
{
"name": "Arthur Steiner",
"email": "arthur@teste.com"
}Exemplo de requisição para criar um pet associado a um usuário:
POST /pets
Content-Type: application/json
{
"name": "Rex",
"user_id": 1
}Exemplo de requisição para listar todos os usuários cadastrados:
GET /usersExemplo de requisição para listar todos os pets cadastrados:
GET /petsArthur Steiner Estudante de Análise e Desenvolvimento de Sistemas - FAMINAS (Muriaé) GitHub: @arthursteinerr
Esta API foi desenvolvida como Trabalho Acadêmico para a disciplina Desenvolvimento de APIs da FAMINAS, consolidando aprendizado em Node.js, TypeScript, Express, PostgreSQL e arquitetura MVC.
