Backend da aplicação da Lojinha do SAECOMP, desenvolvida para gerenciar um sistema de e-commerce interno com funcionalidades de carrinho, pagamentos via PIX e sistema de pontuação.
Esta API REST fornece todas as funcionalidades necessárias para o funcionamento da lojinha online do SAECOMP, incluindo:
- Gerenciamento de Produtos: CRUD completo de produtos com categorias
- Sistema de Carrinho: Adicionar, remover e gerenciar itens no carrinho
- Pagamentos: Integração com Mercado Pago para pagamentos PIX
- Sistema de Pontuação: Controle de pontos dos usuários
- Comentários: Sistema de avaliações e comentários
- Autenticação: Controle de acesso baseado em permissões
- Painel Administrativo: Gerenciamento completo da loja
- Node.js com TypeScript
- Express.js - Framework web
- PostgreSQL - Banco de dados
- Zod - Validação de schemas
- Mercado Pago SDK - Integração de pagamentos e geração de códigos PIX
- Multer - Upload de arquivos
src/
├── controllers/ # Controladores das rotas
│ ├── admin/ # Controladores administrativos
│ └── client/ # Controladores do cliente
├── repositories/ # Camada de dados
├── services/ # Serviços externos
├── middlewares/ # Middlewares personalizados
├── schemas/ # Validação com Zod
├── routers/ # Definição das rotas
├── interfaces/ # Tipos TypeScript
├── database/ # Conexão com banco
└── errors/ # Tratamento de erros
- Node.js (v16+)
- PostgreSQL
- npm
git clone https://github.com/SAEComp/site-saecomp-back-lojinha.git
cd site-saecomp-back-lojinhanpm installCrie um arquivo .env na raiz do projeto:
# Banco de dados
DB_HOST=localhost
DB_PORT=5432
DB_NAME=saecomp_lojinha
DB_USER=your_user
DB_PASSWORD=your_password
# Servidor
PORT=3000Execute o script SQL para criar as tabelas:
psql -U your_user -d saecomp_lojinha -f create_tables.sql# Desenvolvimento
npm run dev
# O servidor estará rodando em http://localhost:3000Uma documentação interativa (Swagger UI) está disponível enquanto o servidor estiver rodando em:
Ela permite testar endpoints, ver schemas de request/response e executar chamadas diretamente do navegador.
GET /api/lojinha/products- Lista produtos com paginaçãoGET /api/lojinha/product- Detalhes de um produtoPOST /api/lojinha/admin/product- Criar produto (admin)PUT /api/lojinha/admin/product- Editar produto (admin)DELETE /api/lojinha/admin/product- Remover produto (admin)POST /api/lojinha/admin/product/image- Upload da imagem do produto (admin)
GET /api/lojinha/cart- Visualizar carrinhoPOST /api/lojinha/cart- Adicionar item ao carrinhoDELETE /api/lojinha/cart- Limpar carrinhoDELETE /api/lojinha/item- Remover item específico
Endpoints adicionais de cliente:
GET /api/lojinha/pending-payments- Listar pagamentos pendentes do usuárioPOST /api/lojinha/register-payment- Registrar pagamento manual (ex.: quando confirmado fora do fluxo automático)
POST /api/lojinha/finish-order- Finalizar pedidoGET /api/lojinha/listen-payment- Verificar status do pagamentoPOST /api/lojinha/confirm-payment- Webhook Mercado PagoPOST /api/lojinha/register-payment- Registrar pagamento manual
Notas sobre pagamentos:
- O fluxo principal utiliza Mercado Pago para gerar preferências/QR codes PIX. O projeto possui um endpoint que recebe webhooks do Mercado Pago (
POST /api/lojinha/confirm-payment) e atualiza pedidos automaticamente. - Há também endpoints de escuta de eventos (
GET /api/lojinha/listen-payment) para que o front possa receber os estados de pagamento de um pedido finalizado.
GET /api/lojinha/punctuation- Ver pontuação do usuárioGET /api/lojinha/punctuations- Ranking de pontuações
POST /api/lojinha/comment- Adicionar comentário
GET /api/lojinha/admin/statistics- Estatísticas da lojaGET /api/lojinha/admin/orders- Gerenciar pedidosGET /api/lojinha/admin/entry-history- Histórico de entradasPOST /api/lojinha/admin/pix-key- Configurar chave PIX
Rotas administrativas adicionais (além das listadas acima):
GET /api/lojinha/admin/pix-key- Recuperar chave PIX configuradaDELETE /api/lojinha/admin/pix-key- Remover chave PIXDELETE /api/lojinha/admin/product- Remover produto (aceita id)
O sistema usa permissões granulares:
lojinha:product-home- Ver produtoslojinha:cart- Gerenciar carrinholojinha:finish-order- Finalizar pedidoslojinha:admin- Acesso administrativo
- products: Catálogo de produtos
- buy_orders: Pedidos dos usuários
- items: Itens dos pedidos
- punctuations: Pontuação dos usuários
- comments: Comentários dos produtos
- pix_keys: Chaves PIX para pagamento
- entry_histories: Registros de entrada/saída de estoque por produto
- pix_payments: Dados do pagamento PIX associados a um pedido
category_t:'sweet','salty','drink'status_t:'cart','pendingPayment','canceled','finishedPayment'
- Adicionar produtos ao carrinho
- Finalizar pedido → Gera QR Code PIX e e itens são decrementados do estoque
- Usuário paga via PIX
- Webhook ou endpoint de registro confirma pagamento
- Pedido atualizado para "finishedPayment"
- Pontos creditados ao usuário (quando aplicável)
# Desenvolvimento com hot reload
npm run devOutros scripts úteis (ver package.json):
npm run build- Compila TypeScriptnpm start- Inicia o build compilado
Ver também o script auxiliar update-sub.sh que é usado para deploy/atualização em servidores de staging/produção simples.
Para mais informações ou suporte, entre em contato com a equipe do SAECOMP.