https://github.com/felipstein/fotodozinho-backend
https://github.com/felipstein/fotodozinho-backend
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/felipstein/fotodozinho-backend
- Owner: Felipstein
- Created: 2023-01-08T00:25:13.000Z (over 3 years ago)
- Default Branch: dev
- Last Pushed: 2023-04-03T13:00:16.000Z (about 3 years ago)
- Last Synced: 2024-04-23T22:52:40.648Z (about 2 years ago)
- Language: TypeScript
- Size: 17.2 MB
- Stars: 16
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Foto do Zinho
**Foto do Zinho é uma aplicação baseada nos serviços de uma empresa de fotografia e outros serviços relacionados. A aplicação oferece rotas para manipulação e uso desses serviços, registro de usuários, sistema de administração, rotas autenticadas e mais.**
## Tecnologias e Termos Usados
- Manipulação/CRUD das entidades completo por meio dos padrões **REST** e **RESTful**
- **Banco de dados SQL Postgres** para relações mais complexas
- **ORM Prisma** para manipualação do banco de dados
- Desenvolvido com **Node** e **Typescript** para aumentar a robustez e clareza do código
- Segurança de senhas aprimoradas atráves da **criptografia**
- Code Style com **ESLint**
- *>**Testes unitários** e **testes integrais** garantindo a qualidade do software com **Jest*** (Feature congelada no momento)
- Autenticação segura de usuários com **Tokens JWT**, **Refresh Tokens**, **Tokens Revogados/Invalidados**, e outros tokens, como **Recuperação de senha** e **Validação de E-mail**
- Suporte ao upload de imagens (tanto local quanto no **Amazon S3** da **AWS**) usando **Multer**
- Sistema de administração para usuários com permissões especiais
- Uso do **.env** para armazenação de variáveis de ambientes sensíveis
- Tratamento de erros personalizados atráves de **middlewares**
- Verificação de usuário autenticado atráves de **middlewares**
- Envio automatizados de e-mails com o serviço **SES** da **AWS Amazon** para usuários com recuperação de senhas, notificações de compras, status de fotos para impressão, etc.
- *Atualização de notificações para os usuários em tempo real atráves de **WebSockets*** (Em breve)
- Código organizado e estruturado seguindo os princípios **SOLID** e **Clean Architecture**
- Utilizando **node-cron** para **agendamento** na deleção do banco de dados os tokens expirados
## Como Usar
Para começar a usar o Foto do Zinho, você precisará fazer o clone do repositório e instalar as dependências com o comando `npm install` ou `yarn`. Você também precisará criar um arquivo `.env` na raiz do projeto com as variáveis de ambiente necessárias. Você pode utilizar o arquivo `.env.example` para se basear nas variáveis.
## Rotas Disponíveis
Aqui estão as **principais** rotas disponíveis no Foto do Zinho:
### Autenticação
```
POST /auth/signin: usada para que o usuário faça login na aplicação. Ela é protegida pelo middleware preventAuthenticatedAccess, que impede o acesso à rota caso o usuário já esteja autenticado.
POST /auth/signup: usada para que um novo usuário se cadastre na aplicação. Ela também é protegida pelo middleware preventAuthenticatedAccess.
DELETE /auth/signout: usada para que o usuário faça logout da aplicação. Ela é protegida pelo middleware ensureAuth, que impede o acesso à rota caso o usuário não esteja autenticado.
GET /auth/validate: usada para validar se o token de acesso enviado na requisição é válido. Ela também é protegida pelo middleware ensureAuth.
POST /auth/refresh-token: usada para gerar um novo token de acesso a partir do refresh token. Ela não é protegida por nenhum middleware, mas requer um refresh token válido na requisição.
```
### Manipulação de usuários
```
GET /users: Lista todos os usuários cadastrados no sistema (para administradores apenas)
GET /users/inactive: Lista todos os usuários inativos (para administradores apenas)
GET /users/id/:id: Retorna informações sobre um usuário específico (apenas para o próprio usuário ou administradores)
GET /users/email/:email: Retorna informações sobre um usuário específico, identificado pelo seu endereço de email
POST /users: Cria um novo usuário no sistema (para administradores apenas)
PUT /users/:id: Atualiza informações do usuário com o ID especificado (apenas para o próprio usuário ou administradores)
PATCH /users/:id/password: Atualiza a senha do usuário com o ID especificado (apenas para o próprio usuário ou administradores)
DELETE /users/:id: Remove o usuário com o ID especificado (para administradores apenas)
DELETE /users/account/:id: Remove a conta do próprio usuário com o ID especificado (apenas para o próprio usuário ou administradores)
```
### Validações e recuperação de senha
```
/validate-email/:token: Valida o e-mail do usuário;
/set-password: Define uma nova senha para o usuário que utilizou da recuperação de senha (apenas se o token for válido);
/recovery-password: Envia um token para recuperação de senha no e-mail do usuário;
/validate-recovery-password-token/:token: Apenas verifica se o token para recuperação de senha é válido.
/send-new-validate-email Envia um novo token para validar o e-mail do usuário.
```
## Segurança
O Foto do Zinho utiliza tokens JWT para autenticação de usuários, e possui sistema de autenticação e autorização de rotas. A aplicação também utiliza criptografia para manter as senhas dos usuários seguras. O projeto também utiliza tokens para recuperação de senha e validação de e-mail, além de tokens refresh para evitar que os usuários tenham que fazer login frequentemente.
## Tratamento de Erros
O Foto do Zinho utiliza middleware para o tratamento de erros, fornecendo respostas claras e adequadas para os usuários em caso de erros na API.
## Envio de E-mails
O Foto do Zinho utiliza o SES da AWS da Amazon para enviar e-mails, com o uso do pacote Nodemailer.
Você precisa configurar os dados para autenticação do seu SES caso queira utilizar do serviço de envio de e-mails.
## Código Organizado
O código do Foto do Zinho segue os padrões SOLID e Clean Architecture, tornando-o mais organizado e fácil de manter.