Skip to content

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.

Notifications You must be signed in to change notification settings

YuriLRodrigues/autocars-backend

Repository files navigation

🚗 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:

  • NestJS - Framework para Node.js
  • Express - Utilizado internamente pelo NestJS
  • PostgreSQL - Banco de dados
  • Prisma - ORM para interação com o banco
  • Vitest - Testes unitários e de integração
  • Nodemailer - Envio de emails
  • MinIO - Armazenamento de imagens

📂 Estrutura de Pastas

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

$ npm install

🚀 Rodando a Aplicação

# Desenvolvimento
$ npm run start

# Modo Watch
$ npm run start:dev

# Produção
$ npm run start:prod

🧪 Testes

# Testes unitários
$ npm run test

# Modo Watch
$ npm run test:watch

📦 Migrations

$ npx prisma migrate dev

🔑 Variáveis de Ambiente

Crie um arquivo .env com as seguintes variáveis:

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 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

About

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.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages