Introdução & Objetivos
Este projeto consiste no desenvolvimento do back-end de uma aplicação moderna de marketplace privado. A plataforma funciona como um espaço seguro e exclusivo onde os membros do grupo religioso em Caruaru podem anunciar, vender e gerenciar seus produtos.
🔒 Ambiente Seguro & Privado
Acesso exclusivo para membros autenticados e validados, utilizando JWT e validação de permissões.
🧱 Arquitetura Modular (Use Cases)
Clean Architecture com regras de negócio totalmente isoladas em casos de uso, facilitando testes e manutenções.
🗄️ Persistência Relacional com Migrations
Prisma ORM integrado ao PostgreSQL (Supabase) para modelagem estruturada, integridade referencial e versionamento do banco.
🛡️ Controle Administrativo
Painel de moderação para administradores gerenciarem status de contas, ativação e remoção de usuários.
Diagrama de Arquitetura do Back-end
Etapas do Projeto & Módulos
Permite o registro de novos membros na plataforma recebendo os dados estruturados do DTO (ICreateUserDTO).
Valida credenciais do usuário e gera o token JWT para autenticação em rotas protegidas.
O middleware ensureAuthenticated.ts intercepta requisições, valida o token e injeta o ID do usuário no contexto da requisição Express.
Obtenção e atualização das informações de perfil do equipista logado com IUpdateUserProfileDTO.
Upload, atualização e deleção das imagens de perfil (avatar) e capa (cover) via integração com Supabase Storage.
Permite que o próprio equipista encerre e remova sua conta da plataforma.
Permite ao equipista cadastrar produtos vinculados à sua conta com validações do ICreateProductDTO e suporte a múltiplas imagens.
Listagem completa do marketplace para compradores e visualização filtrada por vendedor ou por anúncios próprios.
Gerenciamento completo dos anúncios pertencentes ao equipista logado.
Adiciona ou remove um produto da lista de desejos do equipista utilizando IToggleFavoriteDTO.
Exibe os itens favoritados pelo usuário e contabiliza a popularidade de produtos e de anúncios do vendedor.
Criação, atualização e remoção de notas e comentários sobre os produtos comprados.
Cálculo de médias e exibição das estatísticas de avaliação de produtos e de vendedores.
Gerenciamento do histórico de itens adquiridos pelo equipista comprador.
Relatórios detalhados, contagem e consolidação das métricas financeiras de compras do usuário.
Consolidação do histórico de saídas e vendas efetuadas pelos vendedores.
Visão financeira com totais acumulados e detalhes históricos das negociações do vendedor.
Cadastro único de endereço físico por usuário (CEP, rua, bairro, número) para facilitar encontros e retiradas em Caruaru/PE.
Painel administrativo restrito para listagem completa de membros, alteração de status (ativo/inativo/suspenso), edição e exclusão de contas.
Estrutura do Banco de Dados (PostgreSQL via Prisma)
Entidade: Usuário (users)
| Campo | Tipo | Descrição |
|---|---|---|
id | String | ID único do usuário (Chave Primária). |
email | String | E-mail único do equipista. |
cpf | String | CPF único do equipista. |
nome | String | Nome completo do equipista. |
telefone | String | Telefone / WhatsApp de contato. |
avatarUrl | String? | URL opcional da foto de perfil. |
coverUrl | String? | URL opcional da imagem de capa. |
status | String | Status da conta (Default: INATIVO). |
role | String | Nível de acesso (Default: USER). |
createdAt / updatedAt | DateTime | Timestamps de criação e atualização. |
Entidade: Produto (products)
| Campo | Tipo | Descrição |
|---|---|---|
id | String (UUID) | ID único do produto (Chave Primária). |
nome | String | Título do anúncio. |
preco | Float | Preço de venda do item. |
descricao | String | Descrição detalhada. |
imagens | String[] | Lista de URLs de fotos do produto. |
categoria | ProductCategory | Enum (COMIDA, ROUPAS, COSMETICOS, ELETRONICOS, SAUDE, CASA, BRINQUEDOS, LIVROS, ESPORTES, AUTOMOTIVO, OUTROS). |
userId | String | FK do equipista anunciante (Cascade deletion). |
Entidades Complementares e Relacionamentos
| Tabela | Campos Principais | Restrições / Regras |
|---|---|---|
addresses |
cep, rua, numero, bairro, cidade, estado, complemento, userId |
Garante no máximo 1 endereço por usuário (@unique [userId]). |
favorites |
userId, productId, createdAt |
Chave única composta para evitar múltiplos favoritos no mesmo item (@unique([userId, productId])). |
ratings |
nota, comentario, userId, productId |
Uma avaliação por produto por usuário (@unique([userId, productId])). |
purchased_products |
userId, productId, quantidade |
Consolidação de histórico de compras do usuário. |
sold_products |
userId, productId, quantidade |
Registro único de vendas por produto para o vendedor. |
Estrutura de Repositório (Back-end)
MARKETPLACE-ENTRE-EQUIPISTAS/
├── prisma/
│ ├── migrations/ # Histórico de migrations do PostgreSQL
│ └── schema.prisma # Schemas Prisma (User, Product, Address, Favorite, Rating, PurchasedProduct, SoldProduct)
├── src/
│ ├── @types/ # Tipagens globais do Express (Ex: user.id na requisição)
│ ├── modules/ # Módulos da aplicação desacoplados em Use Cases
│ │ ├── addresses/ # Gerenciamento de endereços
│ │ ├── admin/ # Moderação e controle de usuários
│ │ ├── auth/ # Autenticação (signIn, signUp)
│ │ ├── favorites/ # Favoritamento e contagem de itens
│ │ ├── products/ # Anúncios, catálogo e gestão de produtos
│ │ ├── purchasedProducts/ # Registro e métricas de produtos adquiridos
│ │ ├── ratings/ # Sistema de qualificações, notas e comentários
│ │ ├── soldProducts/ # Métricas e relatórios de produtos vendidos
│ │ └── users/ # Perfil de usuário, avatares e capa
│ ├── shared/ # Recursos compartilhados e infraestrutura
│ │ ├── docs/ # Especificação da API (swagger.json)
│ │ ├── errors/ # Tratamento global de exceções (AppError.ts)
│ │ ├── infra/ # Configuração de rotas, cliente Prisma e cliente Supabase
│ │ └── middlewares/ # Middlewares (ensureAuthenticated.ts)
│ └── server.ts # Inicialização do servidor Express
Demonstração Interativa das Telas
Selecione o perfil de uso e o modo de exibição para visualizar a experiência do usuário:
Introdução & Objetivos Front-end
O front-end fornece uma experiência de uso simples, intuitiva e altamente eficiente para os equipistas. Permite a negociação, gerenciamento de catálogo, acompanhamento de reputação e moderação dentro da comunidade com suporte nativo a personalização visual (Light/Dark).
🚀 Navegação Otimizada
Utilização do Next.js App Router para renderização veloz, rotas dinâmicas e transições fluidas.
🧩 Componentização Modular
Organização desacoplada em componentes de marketplace (cards, filtros, carrosséis) e componentes do vendedor/admin.
🔌 Camada de Serviços Unificada
Requisições HTTP fortemente tipadas e centralizadas na pasta services/, separando a lógica da interface.
👤 Autenticação & Contexto Global
Gerenciamento de sessão e contexto do usuário autenticado integrado via AuthContext.
Diagrama de Módulos do Front-end
Módulos & Organização de Código
Vitrine principal com filtros por categorias, busca, carrossel de destaques e exibição de cards de produtos.
Página de acesso à plataforma com tratamento de validação e gerenciamento de estado.
Gestão de anúncios, cadastro de produtos, histórico de vendas, produtos comprados, avaliações recebidas e dados de entrega.
Interface dedicada aos gestores do grupo para controle de contas, alteração de status e moderação.
Componentes reutilizáveis do catálogo: banner-carousel, header, product-card, product-grid e sidebar-filters.
Aba e métricas do vendedor: my-ratings-tab, product-image-carousel, product-ratings-dialog, seller-addresses-tab, seller-favorites-tab, seller-products-tab, seller-purchased-tab e seller-stats-cards.
Biblioteca de UI baseada em Radix/Shadcn UI e provedor de temas claro/escuro.
Integração com o back-end via Axios distribuída por módulos: addressesService, adminService, authService, favoritesService, productsService, purchasedProductsService, ratingsService, soldProductsService e userService.
Estrutura do Repositório (Front-end)
MARKETPLACE-EQUIPISTAS/
├── app/ # App Router (Páginas e Rotas)
│ ├── admin/ # Gestão e moderação administrativa
│ ├── login/ # Tela de autenticação
│ ├── vendedores/[id]/ # Perfil público do vendedor
│ ├── vender/ # Painel do Vendedor e publicação de itens
│ ├── layout.tsx / page.tsx # Layout raiz e vitrine do marketplace
│ └── globals.css # Estilos globais e variáveis de tema
├── components/ # Componentização da interface
│ ├── marketplace/ # Cards, vitrines, filtros e busca
│ ├── seller/ # Abas do vendedor, estatísticas, fotos e qualificações
│ ├── ui/ # Componentes atômicos de UI
│ └── theme-provider.tsx # Gerenciamento de Tema (Light / Dark)
├── contexts/ # Contextos React (AuthContext.tsx)
├── hooks/ # Custom Hooks (use-mobile.ts, use-toast.ts)
├── lib/ # Utilitários (utils.ts)
├── services/ # Serviços desacoplados para chamadas HTTP da API
└── types/ # Contratos de tipagem TypeScript (addresses, admin, auth, products, etc)