Ícone Entre Equipistas
Entre Equipistas
Documentação do Projeto Privado
Poster Backend Marketplace Entre Equipistas
🔒 Código Fonte Privado — Exposição para Portfólio

Marketplace Entre Equipistas — Backend API

Arquitetura de API moderna, escalável e segura para o ecossistema privado do grupo religioso de Caruaru. Desenvolvida com Clean Architecture, princípios SOLID e controle de acesso baseado em cargos.

Node.js
TypeScript
Express
Prisma ORM
PostgreSQL
Supabase
Swagger
📌

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

Diagrama de Arquitetura Backend
⚙️

Etapas do Projeto & Módulos

🔐 Módulo de Autenticação e Controle de Acesso (auth)
Cadastro de Equipistas (signUp)

Permite o registro de novos membros na plataforma recebendo os dados estruturados do DTO (ICreateUserDTO).

Autenticação (signIn)

Valida credenciais do usuário e gera o token JWT para autenticação em rotas protegidas.

Segurança Global (shared/middlewares)

O middleware ensureAuthenticated.ts intercepta requisições, valida o token e injeta o ID do usuário no contexto da requisição Express.

👤 Módulo de Gestão de Usuário e Perfil (users)
Consulta e Alteração de Perfil (getUserProfile, updateUserProfile)

Obtenção e atualização das informações de perfil do equipista logado com IUpdateUserProfileDTO.

Mídia de Perfil e Capa (updateUserAvatar, updateUserCover, deleteUserAvatar, deleteUserCover)

Upload, atualização e deleção das imagens de perfil (avatar) e capa (cover) via integração com Supabase Storage.

Exclusão de Conta (deleteUserAccount)

Permite que o próprio equipista encerre e remova sua conta da plataforma.

🛍️ Módulo de Produtos (products)
Anúncio de Itens (createProduct)

Permite ao equipista cadastrar produtos vinculados à sua conta com validações do ICreateProductDTO e suporte a múltiplas imagens.

Catálogo Geral e do Vendedor (listAllUserProducts, listProductsByUser, listUserProducts)

Listagem completa do marketplace para compradores e visualização filtrada por vendedor ou por anúncios próprios.

Edição e Remoção (updateProduct, deleteProduct)

Gerenciamento completo dos anúncios pertencentes ao equipista logado.

⭐ Módulo de Favoritos (favorites)
Alternar Favorito (toggleFavorite)

Adiciona ou remove um produto da lista de desejos do equipista utilizando IToggleFavoriteDTO.

Listagem e Métrica (listUserFavorites, getProductFavoritesCount, getUserProductsFavoritesCount)

Exibe os itens favoritados pelo usuário e contabiliza a popularidade de produtos e de anúncios do vendedor.

🌟 Módulo de Avaliações e Qualificações (ratings)
Avaliação de Produtos (createRating, updateRating, deleteRating)

Criação, atualização e remoção de notas e comentários sobre os produtos comprados.

Estatísticas e Listagens (getProductRatingStats, getOwnerRatingStats, listUserRatings)

Cálculo de médias e exibição das estatísticas de avaliação de produtos e de vendedores.

🛒 Módulo de Produtos Comprados (purchasedProducts)
Registro de Compras (addPurchasedProduct, removePurchasedProduct)

Gerenciamento do histórico de itens adquiridos pelo equipista comprador.

Consultas e Métricas (listPurchasedProducts, getPurchasedProductDetails, getTotalPurchasedMetrics, countPurchasedProducts)

Relatórios detalhados, contagem e consolidação das métricas financeiras de compras do usuário.

💰 Módulo de Produtos Vendidos (soldProducts)
Registro de Vendas (addSoldProduct, removeSoldProduct)

Consolidação do histórico de saídas e vendas efetuadas pelos vendedores.

Consultas e Métricas (listSoldProducts, getSoldProductDetails, getTotalSalesMetrics)

Visão financeira com totais acumulados e detalhes históricos das negociações do vendedor.

📍 Módulo de Logística e Endereço (addresses)
Gestão de Endereço (createAddress, updateAddress, deleteAddress, getAddressByUserId, getAllAddresses)

Cadastro único de endereço físico por usuário (CEP, rua, bairro, número) para facilitar encontros e retiradas em Caruaru/PE.

👑 Módulo de Administração e Moderação (admin)
Moderação do Ecossistema (listAllUsers, changeUserStatus, updateUserByAdmin, deleteUserByAdmin)

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
idStringID único do usuário (Chave Primária).
emailStringE-mail único do equipista.
cpfStringCPF único do equipista.
nomeStringNome completo do equipista.
telefoneStringTelefone / WhatsApp de contato.
avatarUrlString?URL opcional da foto de perfil.
coverUrlString?URL opcional da imagem de capa.
statusStringStatus da conta (Default: INATIVO).
roleStringNível de acesso (Default: USER).
createdAt / updatedAtDateTimeTimestamps de criação e atualização.

Entidade: Produto (products)

Campo Tipo Descrição
idString (UUID)ID único do produto (Chave Primária).
nomeStringTítulo do anúncio.
precoFloatPreço de venda do item.
descricaoStringDescrição detalhada.
imagensString[]Lista de URLs de fotos do produto.
categoriaProductCategoryEnum (COMIDA, ROUPAS, COSMETICOS, ELETRONICOS, SAUDE, CASA, BRINQUEDOS, LIVROS, ESPORTES, AUTOMOTIVO, OUTROS).
userIdStringFK 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)

Tree View - Backend
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
Poster Frontend Marketplace Entre Equipistas
🔒 Interface Privada — Exposição para Portfólio

Marketplace Entre Equipistas — Front-end Web

Interface Web moderna e responsiva construída em Next.js 14 (App Router) e Tailwind CSS. Proporciona navegação rápida, componentes desacoplados, suporte nativo a temas (Light/Dark Mode) e painéis adaptativos por perfil de usuário.

Next.js 14
React 18
TypeScript
Tailwind CSS
Shadcn UI
Axios
🎥

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

Diagrama Front-end
⚙️

Módulos & Organização de Código

🖥️ Estrutura de Rotas (app)
Marketplace (/page.tsx)

Vitrine principal com filtros por categorias, busca, carrossel de destaques e exibição de cards de produtos.

Autenticação (/login)

Página de acesso à plataforma com tratamento de validação e gerenciamento de estado.

Painel do Vendedor (/vender & /vendedores/[id])

Gestão de anúncios, cadastro de produtos, histórico de vendas, produtos comprados, avaliações recebidas e dados de entrega.

Painel Administrativo (/admin)

Interface dedicada aos gestores do grupo para controle de contas, alteração de status e moderação.

🎨 Componentes Específicos (components)
marketplace/

Componentes reutilizáveis do catálogo: banner-carousel, header, product-card, product-grid e sidebar-filters.

seller/

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.

ui/ & theme-provider

Biblioteca de UI baseada em Radix/Shadcn UI e provedor de temas claro/escuro.

📡 Serviços de Integração HTTP (services)
Camada API Client

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)

Tree View - Frontend
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)