Skip to content

LucasVince/tsc-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Documentação da API CRUD Básica para Estudo de Arquitetura

📌 Visão Geral

Esta é uma API REST básica desenvolvida como estudo de arquitetura e boas práticas, implementando operações CRUD (Create, Read, Update, Delete) para usuários usando Node.js, Express e MongoDB.

🏗️ Arquitetura do Projeto

Estrutura de Diretórios
   
 app/
 ├── src/
 │   ├── controllers/          # Lógica de tratamento de requisições HTTP
 │   │   ├── delete-user/      # Controller para deletar usuários
 │   │   ├── get-users/        # Controller para listar usuários
 │   │   ├── post-user/        # Controller para criar usuários
 │   │   ├── update-user/      # Controller para atualizar usuários
 │   │   ├── protocols.ts      # Tipos e interfaces compartilhados
 │   │   └── helpers.ts        # Funções auxiliares para respostas HTTP
 │   ├── database/
 │   │   └── mongo.ts          # Configuração da conexão com MongoDB
 │   ├── factories/            # Fábricas para injetar dependências
 │   │   ├── delete-user-factory/
 │   │   ├── get-users-factory/
 │   │   ├── post-user-factory/
 │   │   └── update-user-factory/
 │   ├── models/               # Modelos de dados
 │   │   └── user.ts           # Modelo de usuário
 │   ├── repositories/         # Camada de acesso a dados
 │   │   ├── delete-user-repository/
 │   │   ├── get-users-repository/
 │   │   ├── post-user-repository/
 │   │   └── update-user-repository/
 │   └── index.ts              # Ponto de entrada da aplicação
 ├── .gitignore
 ├── eslint.config.mjs         # Configuração do ESLint
 ├── package.json
 ├── tsconfig.json             # Configuração do TypeScript
 └── yarn.lock
   
 

🔧 Tecnologias Utilizadas

  • Node.js: Ambiente de execução JavaScript
  • Express: Framework para construção da API
  • TypeScript: Tipagem estática para JavaScript
  • MongoDB: Banco de dados NoSQL
  • Bcrypt: Para hash de senhas
  • Validator: Para validação de e-mails
  • ESLint: Padronização de código

🚀 Rotas da API

GET /users

Descrição: Lista todos os usuários cadastrados

Resposta de Sucesso:

   
 {
   "statusCode": 200,
   "body": [
     {
       "id": "123",
       "name": "João Silva",
       "email": "joao@example.com"
     }
   ]
 }
   
 

Post /users

Descrição: Cria um novo usuário

Parâmetros:

  • Nome: Nome do usuario
  • Senha: Senha de acesso
  • Email: email do usuario
Corpo da Requisição:
   
 {
   "name": "Maria Souza",
   "email": "maria@example.com",
   "password": "senha123"
 }
   
 

Resposta de Sucesso:

   
 {
   "statusCode": 201,
   "body": "Usuário criado com sucesso"
 }
   
 

PATCH /users/id:

Descrição: Atualiza um usuário existente Parâmetros:
  • id: ID do usuário a ser atualizado

Corpo da Requisição:

   
 {
   "name": "Maria Souza Silva"
 }
   
 

Resposta de Sucesso:

   
 {
   "statusCode": 200,
   "body": "Usuário atualizado com sucesso"
 }
   
 

DELETE /users/id:

Descrição: deleta um usuário no banco Parâmetros:
  • id: ID do usuário a ser deletado
Resposta de Sucesso:
   
 {
   "statusCode": 200,
   "body": "Usuário removido com sucesso"
 }
   
 

🧩 Padrões de Projeto Implementados

1. Injeção de Dependências Factories: Usadas para criar instâncias de controllers com suas dependências
   
 export const getUsersFactory = () => {
   const MongoGetusersRepository = new mongoGetusersRepository();
   const GetUsersController = new getUsersController(MongoGetusersRepository);
   return GetUsersController;
 };
   
 
  1. Separação de Responsabilidades Controllers: Tratam a lógica HTTP
  • Controllers: Tratam a lógica HTTP
  • Repositories: Gerenciam o acesso ao banco de dados
  • Models: Definem a estrutura dos dados
  • Helpers: Funções utilitárias compartilhadas
  1. Padronização de Respostas Helpers padronizam as respostas HTTP:
   
 export const ok = (message: string | user[]) => {
   return {
     statusCode: HttpStatusCode.OK,
     body: message
   };
 };
   
 

🔄 Fluxo de Requisição

  • Rota (index.ts) recebe requisição
  • Factory cria controller com repositório injetado
  • Controller processa requisição
  • Repository interage com o banco de dados
  • Controller retorna resposta padronizada

⚙️ Configurações Importantes

Banco de Dados (MongoDB)

no arquivo src/database/mongo.ts
   
 const url = process.env.MONGO_URL || "localhost:27017";
 const username = process.env.MONGO_USERNAME;
 const password = process.env.MONGO_PASSWORD;
   
 

Variáveis de Ambiente

.env necessário (não versionado):
   
 MONGO_URL=
 MONGO_USERNAME=
 MONGO_PASSWORD=
   
 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published