Este projeto representa uma API construída com o Node.js usando o framework Express e a ORM Prisma para gerenciar o banco de dados.
- Sobre o Projeto
- Características Recentes
- Tecnologias Usadas
- Pré-requisitos
- Instalação
- Estrutura de Diretórios
- Uso
- Endpoints
- Segurança e Autenticação
- Tratamento de Erros
- Validações
- Contribuições
- Licença
- Autor
O projeto é uma API RESTful designada para gerenciar usuários, oferecendo operações CRUD básicas. Utiliza-se o Prisma como ORM, facilitando o gerenciamento do banco de dados e as operações realizadas nele.
-
Configuração do servidor: O arquivo
server.js
é o ponto de entrada principal da aplicação. Ele configura e inicia o servidor Express. -
Modelo Prisma: O projeto utiliza o Prisma como ORM, com um modelo de usuário definido em
prisma/schema.prisma
. -
Erros Personalizados: Há uma série de classes de erros personalizados em
userErrors.js
que ajudam no tratamento e na identificação específica de problemas relacionados ao usuário. -
Middleware de tratamento de erros: O projeto conta com um middleware centralizado para tratamento de erros (
errorHandlerMiddleware.js
), que responde a requisições com detalhes de erro apropriados. -
Validações: As validações para criação e atualização de usuários estão definidas em
userValidations.js
usandoexpress-validator
. -
Rotas de Usuário: As rotas relacionadas ao gerenciamento de usuários estão definidas em
userRoutes.js
.
-
Autenticação e Autorização: Introduzimos middlewares de autenticação (
authMiddleware.js
) e verificação de role (roleMiddleware.js
) para aprimorar a segurança na gestão dos usuários. -
Middleware UUID e ID: Adicionamos um novo middleware (
uuidAndIdMiddleware.js
) que verifica o UUID e ID do usuário ao realizar determinadas ações, garantindo que a ação seja executada por usuários autorizados. -
Controle de Roles: Estabelecemos um controle de roles que permite que somente usuários com determinados roles (MOD e ADMIN) tenham acesso a rotas sensíveis, como a de deleção de usuários.
- Node.js
- Express.js
- Prisma
- JWT (JSON Web Tokens) para autenticação
- MySQL (como banco de dados escolhido para o Prisma)
node-cache
para implementação de mecanismos de cache.express-rate-limit
para proteção contra ataques de força bruta.bcrypt
para hash e verificação de senhas.cors
para habilitar CORS na aplicação.dotenv
para gerenciamento de variáveis de ambiente.
- Node.js v20.4.0 ou superior.
- MySQL instalado e configurado.
- Clone este repositório:
git clone https://github.com/lucasffa/api-nodejs-express-prisma.git
- Entre no diretório do projeto:
cd api-nodejs-express-prisma
- Instale as dependências:
npm install
-
Configure sua URL de banco de dados no arquivo
.env
. -
Execute as migrações do Prisma:
npx prisma migrate dev
.
├───prisma
├───src
│ ├───config
│ ├───controllers
│ ├───errors
│ ├───logs
│ ├───middlewares
│ ├───repositories
│ ├───routes
│ ├───services
│ ├───tests
│ ├───utils
│ └───validations
└── server.js
Para iniciar o servidor, execute:
node server.js
O servidor será iniciado na porta definida no seu arquivo .env
ou, caso não esteja definida, na porta 3000.
Incorporando as rotas fornecidas ao README.md, a seção Endpoints ficaria assim:
- POST
/create/
: Cria um novo usuário. - GET
/get/:id
: Retorna um usuário específico baseado no ID. (Acesso restrito a MOD e ADMIN) - GET
/get-uuid/
: Retorna um usuário específico pelo UUID. (Autenticação requerida) - GET
/get/
: Retorna todos os usuários. (Autenticação requerida) - PUT
/update/:id
: Atualiza informações de um usuário pelo ID. (Acesso restrito a MOD e ADMIN) - PUT
/update-uuid/
: Atualiza informações de um usuário pelo UUID. (Autenticação requerida e verificação de UUID/ID) - DELETE
/delete/:id
: Deleta um usuário pelo ID. (Acesso restrito a MOD e ADMIN) - DELETE
/delete-uuid/
: Deleta um usuário pelo UUID. (Acesso restrito a MOD e ADMIN) - PATCH
/toggle/useractivity/:id
: Altera o status de atividade de um usuário pelo ID. (Acesso restrito a MOD e ADMIN) - PATCH
/toggle-uuid/useractivity/
: Altera o status de atividade de um usuário pelo UUID. (Acesso restrito a MOD e ADMIN)
- POST
/login
: Autentica um usuário e retorna um token JWT. (Protegido contra força bruta utilizando express-rate-limit)
-
JWT Autenticação: Utilizamos tokens JWT para autenticação de usuários e proteção de rotas.
-
Middleware de Autenticação: Assegura que apenas usuários autenticados e com a role correta tenham acesso a determinados endpoints.
O projeto utiliza um middleware centralizado para tratamento de erros. As classes de erro customizado permitem uma resposta consistente e estruturada para os clientes da API.
O projeto faz uso da biblioteca express-validator
para validar os dados de entrada dos usuários nas rotas.
- Faça um Fork do projeto.
- Crie sua Feature Branch (
git checkout -b feature/AmazingFeature
). - Commit suas mudanças (
git commit -m 'Add some AmazingFeature'
). - Faça Push para a Branch (
git push origin feature/AmazingFeature
). - Abra um Pull Request.
Distribuído sob a licença MIT. Veja LICENSE
para mais informações.
Lucas de Almeida
- Github: lucasffa
- LinkedIn: Lucas de Almeida