No description
Find a file
Tiago Yamamoto a3f00cd8ff refactor(handler): extract order and cart handlers
- Extract 5 order handlers to order_handler.go (147 lines)
  - CreateOrder, ListOrders, GetOrder, UpdateOrderStatus, DeleteOrder
- Extract 4 cart/review handlers to cart_handler.go (127 lines)
  - CreateReview, AddToCart, GetCart, DeleteCartItem
- handler.go reduced from 806 to 548 lines
- Total refactoring: ~63% of original (1471 -> 548)

All tests passing
2025-12-20 08:06:07 -03:00
backend refactor(handler): extract order and cart handlers 2025-12-20 08:06:07 -03:00
backoffice chore: optimize Dockerfiles with multi-stage builds and caching 2025-12-18 17:28:52 -03:00
marketplace refactor(handler): extract company handlers + update READMEs 2025-12-20 07:58:37 -03:00
saveinmed-bff Add missing auth endpoints 2025-12-19 19:22:20 -03:00
saveinmed-frontend docs: adiciona documentação completa do projeto SaveInMed 2025-12-17 17:07:30 -03:00
website docs: adiciona documentação completa do projeto SaveInMed 2025-12-17 17:07:30 -03:00
.gitignore docs: adiciona documentação completa do projeto SaveInMed 2025-12-17 17:07:30 -03:00
README.md Update swagger route to /docs 2025-12-19 19:00:58 -03:00
start.sh Update swagger route to /docs 2025-12-19 19:00:58 -03:00

SaveInMed

Plataforma B2B de Marketplace Farmacêutico

SaveInMed é uma plataforma completa de marketplace B2B que conecta farmácias e distribuidoras farmacêuticas, facilitando a compra e venda de medicamentos e produtos farmacêuticos com eficiência, segurança e transparência.


📋 Índice


🎯 Visão Geral

SaveInMed é uma solução completa que oferece:

  • Marketplace B2B: Conecta farmácias compradoras com distribuidoras vendedoras
  • Gestão de Catálogo: Controle completo de produtos, lotes e validades
  • Processamento de Pedidos: Fluxo completo desde o carrinho até a entrega
  • Pagamentos Integrados: Mercado Pago com split automático de comissões
  • Dashboard Administrativo: Métricas, relatórios e gestão completa
  • Multi-tenant: Suporte para múltiplas empresas e usuários
  • Alta Performance: APIs otimizadas em Go para operações críticas
  • Escalabilidade: Arquitetura moderna e cloud-native

🏗️ Arquitetura do Sistema

graph TB
    subgraph "Frontend Layer"
        WEB[Website<br/>Fresh/Deno<br/>:8000]
        MKT[Marketplace Frontend<br/>React/Vite<br/>:5173]
        MAIN[SaveInMed Frontend<br/>Next.js 15<br/>:3000]
    end

    subgraph "Backend Layer"
        BFF[SaveInMed BFF<br/>Python/FastAPI<br/>:8000]
        API[Backend API<br/>Go 1.24<br/>:8080]
        BACK[Backoffice<br/>NestJS/Fastify<br/>:3000]
    end

    subgraph "Data Layer"
        PG[(PostgreSQL<br/>Database)]
        AW[(Appwrite<br/>BaaS)]
    end

    subgraph "External Services"
        MP[Mercado Pago<br/>Payments]
        MB[Mapbox<br/>Geocoding]
    end

    WEB -->|Landing Pages| BFF
    MKT -->|Marketplace| API
    MAIN -->|Main App| AW
    MAIN -->|Admin| BACK
    
    BFF --> AW
    API --> PG
    BACK --> PG
    
    API --> MP
    BFF --> MB
    BACK --> MP

    style WEB fill:#4ade80
    style MKT fill:#60a5fa
    style MAIN fill:#a78bfa
    style BFF fill:#fbbf24
    style API fill:#f87171
    style BACK fill:#fb923c
    style PG fill:#94a3b8
    style AW fill:#94a3b8

📦 Componentes do Projeto

1. backend - API de Alta Performance (Go)

Propósito: Núcleo de performance para operações críticas

Tecnologias: Go 1.24, PostgreSQL, Swagger

Porta: 8080

Principais Funcionalidades:

  • Gestão de empresas (farmácias, distribuidoras)
  • Catálogo de produtos com lote e validade
  • Processamento de pedidos
  • Integração Mercado Pago com split de pagamento
  • Respostas JSON otimizadas com compressão gzip

Documentação: backend/README.md

Como executar:

cd backend
export DATABASE_URL=postgres://postgres:postgres@localhost:5432/saveinmed?sslmode=disable
go run ./cmd/api

2. backoffice - Sistema Administrativo (NestJS)

Propósito: Interface de gestão e administração

Tecnologias: NestJS 10, Fastify, Prisma, PostgreSQL

Porta: 3000

Principais Funcionalidades:

  • Autenticação JWT (access + refresh tokens)
  • Gestão de usuários e permissões
  • Controle de inventário
  • Processamento de webhooks Mercado Pago
  • Dashboard administrativo

Documentação: backoffice/README.md

Como executar:

cd backoffice
pnpm install
pnpm prisma:generate
pnpm start:dev

3. marketplace - Frontend do Marketplace (React)

Propósito: Interface do marketplace B2B

Tecnologias: React 18, Vite 5, TailwindCSS, Zustand

Porta: 5173

Principais Funcionalidades:

  • Catálogo de produtos com virtualização
  • Carrinho de compras
  • Checkout com Mercado Pago
  • Dashboard de pedidos
  • Autenticação e rotas protegidas

Documentação: marketplace/README.md

Como executar:

cd marketplace
npm install
npm run dev

4. saveinmed-bff - Backend For Frontend (Python)

Propósito: Agregação de dados e proxy para frontends

Tecnologias: Python 3.12, FastAPI, Appwrite

Porta: 8000

Principais Funcionalidades:

  • Integração com Appwrite (Databases)
  • Autenticação JWT com cookies httpOnly
  • CRUD de categorias, produtos, pedidos
  • Geocodificação automática (Mapbox)
  • Cálculo de frete dinâmico
  • API key protection

Documentação: saveinmed-bff/README.md

Como executar:

cd saveinmed-bff
pip install -r requirements.txt
uvicorn src.main:app --reload

5. saveinmed-frontend - Frontend Principal (Next.js)

Propósito: Aplicação frontend completa e principal

Tecnologias: Next.js 15, React 19, TailwindCSS 4, Appwrite

Porta: 3000

Principais Funcionalidades:

  • Interface completa para farmácias e distribuidoras
  • Gestão de catálogo de produtos
  • Sistema de pedidos e pagamentos
  • Dashboard com gráficos (Chart.js)
  • Integração Appwrite para backend
  • Checkout Mercado Pago
  • Envio de emails (Nodemailer)

Documentação: saveinmed-frontend/README.md

Como executar:

cd saveinmed-frontend
npm install
npm run dev

6. website - Site Institucional (Fresh/Deno)

Propósito: Landing pages e marketing

Tecnologias: Fresh v2, Deno 2, Preact, TailwindCSS

Porta: 8000

Principais Funcionalidades:

  • Landing pages institucionais
  • Captura de leads
  • Blog e conteúdo educacional
  • SEO otimizado
  • Islands Architecture (hidratação parcial)

Documentação: website/README.md

Como executar:

cd website
deno task dev

🛠️ Tecnologias Utilizadas

Backend

Componente Linguagem Framework Banco de Dados
backend Go 1.24 - PostgreSQL
backoffice TypeScript NestJS 10 + Fastify PostgreSQL (Prisma)
saveinmed-bff Python 3.12 FastAPI Appwrite

Frontend

Componente Framework Versão Estilização
marketplace React + Vite 18 + 5 TailwindCSS 3
saveinmed-frontend Next.js 15 TailwindCSS 4
website Fresh (Deno) v2 TailwindCSS

Infraestrutura e Serviços

  • Banco de Dados: PostgreSQL 14+
  • BaaS: Appwrite 18
  • Pagamentos: Mercado Pago SDK
  • Geocoding: Mapbox API
  • Email: Nodemailer
  • Containerização: Docker
  • Documentação: Swagger/OpenAPI

🚀 Setup Completo

Pré-requisitos

  • Go 1.24+
  • Node.js 20+
  • Python 3.12+
  • Deno 2.0+
  • PostgreSQL 14+
  • pnpm 8+ (para backoffice)
  • Docker (opcional)

1. Clonar o Repositório

git clone https://github.com/rede5/saveinmed.git
cd saveinmed

2. Configurar Banco de Dados

# Criar banco de dados PostgreSQL
createdb saveinmed

# Ou via Docker
docker run --name saveinmed-postgres \
  -e POSTGRES_PASSWORD=postgres \
  -e POSTGRES_DB=saveinmed \
  -p 5432:5432 \
  -d postgres:14

3. Configurar Variáveis de Ambiente

Cada componente possui um arquivo .env.example. Copie e configure:

# Backend Go
cd backend
cp .env.example .env
# Edite .env com suas configurações

# Backoffice NestJS
cd ../backoffice
cp .env.example .env
# Edite .env com suas configurações

# E assim por diante para cada componente...

4. Instalar Dependências

# Backend Go
cd backend
go mod download

# Backoffice NestJS
cd ../backoffice
pnpm install
pnpm prisma:generate
pnpm prisma migrate dev

# Marketplace React
cd ../marketplace
npm install

# SaveInMed BFF Python
cd ../saveinmed-bff
python -m venv venv
source venv/bin/activate  # ou `venv\Scripts\activate` no Windows
pip install -r requirements.txt

# SaveInMed Frontend Next.js
cd ../saveinmed-frontend
npm install

# Website Fresh/Deno
cd ../website
# Deno não requer instalação de dependências

5. Executar Todos os Serviços

Opção 1: Manualmente (em terminais separados)

# Terminal 1 - Backend Go
cd backend && go run ./cmd/api

# Terminal 2 - Backoffice NestJS
cd backoffice && pnpm start:dev

# Terminal 3 - Marketplace React
cd marketplace && npm run dev

# Terminal 4 - SaveInMed BFF
cd saveinmed-bff && uvicorn src.main:app --reload

# Terminal 5 - SaveInMed Frontend
cd saveinmed-frontend && npm run dev

# Terminal 6 - Website
cd website && deno task dev

Opção 2: Docker Compose (em desenvolvimento)

docker-compose up

6. Acessar as Aplicações

Serviço URL Descrição
Backend API http://localhost:8080 API Go
Backend Swagger http://localhost:8080/docs/index.html Docs API Go
Backoffice http://localhost:3000 Admin NestJS
Backoffice Swagger http://localhost:3000/api Docs NestJS
Marketplace http://localhost:5173 Frontend React
SaveInMed BFF http://localhost:8000 BFF Python
SaveInMed BFF Docs http://localhost:8000/docs Docs FastAPI
SaveInMed Frontend http://localhost:3000 Frontend Next.js
Website http://localhost:8000 Site Fresh/Deno

💻 Fluxo de Desenvolvimento

1. Criar Nova Feature

# Criar branch
git checkout -b feature/nome-da-feature

# Desenvolver...
# Testar...

# Commit
git add .
git commit -m "feat: adiciona nova funcionalidade X"

# Push
git push origin feature/nome-da-feature

# Criar Pull Request no GitHub

2. Padrões de Commit

Seguimos Conventional Commits:

  • feat: - Nova funcionalidade
  • fix: - Correção de bug
  • docs: - Documentação
  • style: - Formatação
  • refactor: - Refatoração
  • test: - Testes
  • chore: - Tarefas de build/config

3. Testes

# Backend Go
cd backend && go test ./...

# Backoffice NestJS
cd backoffice && pnpm test

# SaveInMed BFF Python
cd saveinmed-bff && pytest

# Frontend Next.js
cd saveinmed-frontend && npm test

4. Linting

# Backend Go
cd backend && golangci-lint run

# Backoffice NestJS
cd backoffice && pnpm lint

# Marketplace React
cd marketplace && npm run lint

# Frontend Next.js
cd saveinmed-frontend && npm run lint

🚢 Deploy

Backend (Go)

# Build
cd backend
go build -o bin/api ./cmd/api

# Docker
docker build -t saveinmed-api:latest .
docker push registry.example.com/saveinmed-api:latest

Backoffice (NestJS)

# Build
cd backoffice
pnpm build

# Docker
docker build -t saveinmed-backoffice:latest .
docker push registry.example.com/saveinmed-backoffice:latest

Marketplace (React)

# Build
cd marketplace
npm run build

# Deploy para Vercel/Netlify
vercel --prod

SaveInMed BFF (Python)

# Docker
cd saveinmed-bff
docker build -t saveinmed-bff:latest .
docker push registry.example.com/saveinmed-bff:latest

SaveInMed Frontend (Next.js)

# Build
cd saveinmed-frontend
npm run build

# Deploy para Vercel
vercel --prod

Website (Fresh/Deno)

# Deploy para Deno Deploy
cd website
deployctl deploy --project=saveinmed-website

🤝 Contribuindo

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'feat: Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Diretrizes

  • Escreva testes para novas funcionalidades
  • Mantenha a documentação atualizada
  • Siga os padrões de código de cada linguagem
  • Use Conventional Commits
  • Revise seu próprio código antes de submeter PR

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.


📞 Contato

SaveInMed Team


🙏 Agradecimentos

  • Equipe de desenvolvimento
  • Contribuidores open source
  • Comunidades Go, NestJS, React, Python, e Deno

Desenvolvido com ❤️ pela equipe SaveInMed