https://github.com/yurilrodrigues/autocars-backend
https://github.com/yurilrodrigues/autocars-backend
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/yurilrodrigues/autocars-backend
- Owner: YuriLRodrigues
- Created: 2025-02-06T16:09:56.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-02-18T20:30:33.000Z (4 months ago)
- Last Synced: 2025-02-18T20:31:44.348Z (4 months ago)
- Language: TypeScript
- Size: 885 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# đźš— AutoCars - Plataforma de AnĂşncios de Carros
Este projeto começou como um pequeno experimento há 8 meses, mas foi retomado e escalado com novos aprendizados, como arquitetura limpa, testes, desacoplamento e muito mais. Agora, Ă© uma plataforma robusta onde os usuários podem publicar anĂşncios de carros, incluindo envio de imagens, detalhes do veĂculo, histĂłrico de vendas, favoritar anĂşncios, deixar comentários e funcionalidades adicionais.Atualmente, o projeto segue a arquitetura monolĂtica. No entanto, em breve pretendo aprender sobre microsserviços para maior desacoplamento e facilidade de manutenção.
## 🚀 Tecnologias Utilizadas
As principais tecnologias usadas no projeto incluem:
-  - Framework para Node.js
-  - Utilizado internamente pelo NestJS
-  - Banco de dados
-  - ORM para interação com o banco
-  - Testes unitários e de integração
-  - Envio de emails
-  - Armazenamento de imagens## đź“‚ Estrutura de Pastas
```bash
prisma/
src/
├── core/
│ ├── domain/
│ ├── dto/
│ ├── errors/
│ ├── logic/
│
├── domain/
│ ├── application/
│ │ ├── cryptography/
│ │ ├── errors/
│ │ ├── repositories/
│ │ ├── use-cases/
│ ├── enterprise/
│ │ ├── entities/
│ │ ├── value-object/
│
├── infra/
│ ├── auth/
│ ├── cryptography/
│ ├── database/
│ ├── env/
│ ├── http/
│ ├── mailer/
│ ├── storage/
│
tests/ # Implementações InMemory para testes
```## 📜 Arquitetura
O projeto segue a **Arquitetura Limpa**, garantindo modularidade, baixo acoplamento e alta testabilidade. AlĂ©m disso, utilizamos os princĂpios **SOLID**, com forte aplicação de **InversĂŁo de DependĂŞncia** e **Injeção de DependĂŞncias** do NestJS.
### 📌 Camadas da Arquitetura
- **Core**: Contém elementos essenciais como DTOs, erros e lógica comum.
- **Domain**:
- `application`: Casos de uso, criptografia, repositĂłrios e erros.
- `enterprise`: Entidades e value objects do domĂnio.
- **Infra**:
- `auth`: Mecanismos de autenticação.
- `cryptography`: Módulos de hashing e tokenização.
- `database`: ConexĂŁo com o banco de dados via Prisma.
- `env`: Configuração de variáveis de ambiente.
- `http`: Controladores e interações com a API.
- `mailer`: Envio de emails usando Nodemailer.
- `storage`: Upload de imagens com MinIO.
- **Tests**: Implementações in-memory para testes unitários.---
## ⚙️ Instalação
```bash
$ npm install
```## 🚀 Rodando a Aplicação
```bash
# Desenvolvimento
$ npm run start# Modo Watch
$ npm run start:dev# Produção
$ npm run start:prod
```## đź§Ş Testes
```bash
# Testes unitários
$ npm run test# Modo Watch
$ npm run test:watch
```## 📦 Migrations
```bash
$ npx prisma migrate dev
```## 🔑 Variáveis de Ambiente
Crie um arquivo `.env` com as seguintes variáveis:
```ini
SERVICE=
PORT=
VERSION=APP_URL_AUTOCARS=
NODE_MAILER_HOST=
NODE_MAILER_USER=
NODE_MAILER_PORT=
NODE_MAILER_PASSWORD=
NODE_MAILER_FROM=DATABASE_URL=
MINIO_BUCKET_NAME=
MINIO_BUCKET_URL=
MINIO_ACCESS_KEY_ID=
MINIO_SECRET_ACCESS_KEY=JWT_PRIVATE_KEY=
JWT_PUBLIC_KEY=
```## ✉️ Envio de Emails
O envio de emails utiliza o [Nodemailer](https://nodemailer.com/) e requer um email próprio para funcionar (o serviço gratuito possui limitações).
### Funcionalidades disponĂveis:
- Envio de token para recuperação de senha
- Recuperação de senha com token válido⚠️ **Importante:** O **envio de token para recuperação de senha** e a **recuperação de senha com token válido** só podem ser executados pelo proprietário do serviço de email configurado no Nodemailer. Como o serviço gratuito exige um remetente próprio, essas funcionalidades funcionarão apenas para quem configurar corretamente as variáveis de ambiente (`.env`) com suas credenciais do Nodemailer.
---
## 🖼️ Upload de Imagens
O upload de imagens Ă© feito via MinIO, simulando o Amazon S3, permitindo armazenar e acessar imagens de anĂşncios de forma segura.
---
## 📬 Contato
- **Autor**: YuriLRodrigues
- **LinkedIn**: [Yuri Leite Rodrigues](https://www.linkedin.com/in/yuri-leite-rodrigues)