- Add DEVOPS.md with complete deployment guide for apolo server - Add DATABASE.md (unified schema documentation) - Fix backend Dockerfile: Go 1.24 -> 1.23 (current stable) - Add marketplace Dockerfile with pnpm + static-web-server - Migrate marketplace from npm to pnpm - Remove duplicate database-schema.md and DATABASE_SCHEMA.md |
||
|---|---|---|
| backend | ||
| backoffice | ||
| docs | ||
| marketplace | ||
| saveinmed-frontend | ||
| seeder-api | ||
| website | ||
| .gitignore | ||
| README.md | ||
| start.sh | ||
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
- Arquitetura do Sistema
- Componentes do Projeto
- Tecnologias Utilizadas
- Setup Completo
- Fluxo de Desenvolvimento
- Deploy
- Contribuindo
- Licença
🎯 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 TD
subgraph "Frontend Layer"
WEB[Website<br/>Fresh/Deno<br/>:8000]
MKT[Marketplace Frontend<br/>React/Vite<br/>:5173]
end
subgraph "Backend Layer"
API[Backend API<br/>Go 1.24<br/>:8080]
BACK[Backoffice<br/>NestJS/Fastify<br/>:3000]
end
subgraph "Data Layer"
PG[(PostgreSQL<br/>Database)]
end
subgraph "External Services"
MP[Mercado Pago<br/>Payments]
AS[Asaas<br/>Payments]
ST[Stripe<br/>Payments]
end
MKT -->|Marketplace| API
MKT -->|Auth/Profile| BACK
API --> PG
BACK --> PG
API --> MP
API --> AS
API --> ST
BACK --> MP
BACK --> AS
BACK --> ST
style WEB fill:#4ade80
style MKT fill:#60a5fa
style API fill:#f87171
style BACK fill:#fb923c
style PG 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
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) |
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 |
Banco de Dados
O schema completo do banco de dados está documentado em docs/database-schema.md.
Principais Tabelas:
companies- Farmácias e distribuidorasusers- Usuários vinculados às empresasproducts- Catálogo de produtosorders/order_items- Pedidos e itenscart_items- Carrinho de comprasreviews- Avaliaçõesshipments- Envios
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 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 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 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 funcionalidadefix:- Correção de bugdocs:- Documentaçãostyle:- Formataçãorefactor:- Refatoraçãotest:- Testeschore:- Tarefas de build/config
3. Testes
# Backend Go
cd backend && go test ./...
# Backoffice NestJS
cd backoffice && pnpm test
# 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 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
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'feat: Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - 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
- Website: https://saveinmed.com
- Email: contato@saveinmed.com
- GitHub: https://github.com/rede5/saveinmed
🙏 Agradecimentos
- Equipe de desenvolvimento
- Contribuidores open source
- Comunidades Go, NestJS, React, Python, e Deno
Desenvolvido com ❤️ pela equipe SaveInMed