https://github.com/devphde/authentication-api
Authentication-API
https://github.com/devphde/authentication-api
docker express-js nodejs postgresql redis sequelize-orm solid-principles typescript
Last synced: 3 months ago
JSON representation
Authentication-API
- Host: GitHub
- URL: https://github.com/devphde/authentication-api
- Owner: DevPhde
- License: mit
- Created: 2023-04-19T21:47:43.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-05-06T03:47:06.000Z (about 3 years ago)
- Last Synced: 2025-10-09T19:32:42.913Z (9 months ago)
- Topics: docker, express-js, nodejs, postgresql, redis, sequelize-orm, solid-principles, typescript
- Language: TypeScript
- Homepage:
- Size: 184 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Authentication-API
## :memo: Descrição do projeto
Este é um projeto criado utilizando as tecnologias Node e TypeScript, com o objetivo de demonstrar minhas habilidades em abstração, Programação Orientada a Objetos (POO), princípios SOLID, CLEAN CODE e Domain-Driven Design (DDD).
A API desenvolvida neste projeto tem como funcionalidades registrar usuários, autenticar (login) do usuário e recuperar senha do usuário. Para implementar essas funcionalidades, o projeto utiliza o Redis como um mecanismo temporário de armazenamento de tokens para a recuperação de senha do usuário e o PostgreSQL como banco de dados para persistência dos dados do usuário.
Também foi implementada uma funcionalidade de envio de e-mails utilizando a biblioteca Nodemailer.
Para facilitar o gerenciamento e a execução do projeto, foi utilizado o Docker, com a criação de imagens para o Redis e o PostgreSQL. O Docker Compose foi utilizado para rodar a aplicação de forma simples e rápida.
Com este projeto, busquei criar uma estrutura limpa e escalável, seguindo as melhores práticas de desenvolvimento e utilizando tecnologias modernas e confiáveis para garantir a qualidade e a segurança do software.
## :wrench: Tecnologias Utilizadas
Express.js, TypeScript, PostgreSQL, Redis e Docker.
## :rocket: Implementação futura
* Sem planos futuros para o mesmo.
## Como Rodar o Projeto
Observação: Para rodar o projeto é necessário ter o Docker instalado e configurado na máquina.
Observação²: Para que a funcionalidade de envio de emails funcione corretamente, é necessário configurar as variáveis de ambiente `MAILTRAP_USER`, `MAILTRAP_PASSWORD` e `MAILTRAP_MAIL` no arquivo `docker-compose.yml` com as credenciais da sua conta no Mailtrap. Dessa forma, você poderá visualizar os emails enviados na caixa de entrada da sua conta e testar essa funcionalidade.
```
environment:
NODE_ENV: development
JWT_SECRET: chavesecreta
PORT: 3002
MAILTRAP_HOST: sandbox.smtp.mailtrap.io
MAILTRAP_USER: SEU USUÁRIO
MAILTRAP_PASSWORD: SUA SENHA
MAILTRAP_MAIL: SEU EMAIL
REDIS_HOST: redis
POSTGRES_HOST: db
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres
```
Para executar o projeto, siga os passos abaixo:
1. Abra o terminal e navegue até a pasta raiz do projeto.
2. Execute o seguinte comando:
```
docker-compose up
```
Esse comando irá gerar as imagens do Redis e do PostgreSQL e inicializará o servidor na porta 3002.
Observação: É importante lembrar que a primeira execução do comando pode levar alguns minutos, pois o Docker precisa baixar as imagens necessárias para o projeto.
3. Acesse o servidor através do endereço `http://localhost:3002`.
Com esses passos, o projeto deverá estar rodando corretamente na sua máquina.
## Documentação dos Endpoints
(POST) /new/user
Responsável por criar novo usuário.
Request:
Body
```
JSON
{
"name": "nome completo",
"cpf": "123.456.789-01",
"email": "teste@teste.com",
"password": "123"
}
```
Response:
HTTP CODE: 201
Body
```
OK
```
HTTP CODE: 401
Caso CPF ou email já esteja cadastrado.
Body
```
JSON
{
"message": "CPF e Email Já cadastrado."
}
```
(POST) /user/login
Responsável por autenticar(fazer login) de usuário cadastrado.
Request:
Body
```
JSON
{
"email": "teste@teste.com",
"password": "123"
}
```
Response:
HTTP CODE: 200
Body
```
{
"jwt": HASH JWT
}
```
HTTP CODE: 401
Body
```
JSON
{
"message": "Email or Password Invalid"
}
```
(POST) /user/recoverypassword
1º Passo para recuperação de senha do usuário.
- Gera um token e envia para o email cadastrado.
Request:
Body
```
JSON
{
"email": "teste@teste.com",
}
```
Response:
HTTP CODE: 200
```
{
"jwt": HASH JWT
}
```
HTTP CODE: 401
```
JSON
{
"message": "Invalid Email"
}
```
(POST) /user/matchtoken
2º Passo para recuperação de senha do usuário.
- Verifica o token que foi enviado por email.
Request:
HEADER
```
authorization: HASH JWT
```
Body
```
JSON
{
"token": TOKEN RECEBIDO POR EMAIL
}
```
Response:
HTTP CODE: 200
Body
```
OK
```
HTTP CODE: 401
Body
```
JSON
{
"message": "Invalid Token"
}
```
(PUT) /user/recoverypassword/newpassword
3º Passo para recuperação de senha do usuário.
- Troca a senha antiga da conta por uma nova senha.
Request:
HEADER
```
authorization: HASH JWT
```
Body
```
JSON
{
"password": "1234"
}
```
Response:
HTTP CODE: 200
Body
```
OK
```
HTTP CODE: 401
Body
```
JSON
{
"message": "new password cannot be the same as the old one"
}
```
(GET) /user/recoverypassword/resendtoken
Faz parte do 2º passo para recuperação de senha.
- Reenvia o token para o email cadastrado.
Request:
HEADER
```
authorization: HASH JWT
```
Response:
HTTP CODE: 200
Body
```
OK
```
HTTP CODE: 401
Body
```
JSON
{
"message": "Invalid JWT"
}
```
## :dart: Status do projeto
Projeto finalizado.