https://github.com/yurilrodrigues/autocars-backend
O backend do AutoCars foi construído seguindo princípios de SOLID, DDD e Clean Architecture para garantir modularidade, escalabilidade e fácil manutenção. Utiliza Prisma ORM para acesso ao banco de dados e Autenticação JWT para segurança. No futuro, será expandida com integração de pagamentos e chat entre comprador e vendedor.
https://github.com/yurilrodrigues/autocars-backend
expressjs jwt minio nestjs nodemailer postgresql prisma vitest
Last synced: 3 months ago
JSON representation
O backend do AutoCars foi construído seguindo princípios de SOLID, DDD e Clean Architecture para garantir modularidade, escalabilidade e fácil manutenção. Utiliza Prisma ORM para acesso ao banco de dados e Autenticação JWT para segurança. No futuro, será expandida com integração de pagamentos e chat entre comprador e vendedor.
- Host: GitHub
- URL: https://github.com/yurilrodrigues/autocars-backend
- Owner: YuriLRodrigues
- Created: 2025-02-06T16:09:56.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-24T22:48:20.000Z (over 1 year ago)
- Last Synced: 2025-12-31T23:56:44.048Z (6 months ago)
- Topics: expressjs, jwt, minio, nestjs, nodemailer, postgresql, prisma, vitest
- Language: TypeScript
- Homepage:
- Size: 914 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)