- Cria README.md na raiz com visão global e diagrama de arquitetura - Adiciona/atualiza README.md em todos os componentes: - backend (API Go) - backoffice (NestJS) - marketplace (React/Vite) - saveinmed-bff (Python/FastAPI) - saveinmed-frontend (Next.js) - website (Fresh/Deno) - Atualiza .gitignore em todos os componentes com regras abrangentes - Cria .gitignore na raiz do projeto - Renomeia pastas para melhor organização: - backend-go → backend - backend-nest → backoffice - marketplace-front → marketplace - Documenta arquitetura, tecnologias, setup e fluxo de desenvolvimento
372 lines
8.9 KiB
Markdown
372 lines
8.9 KiB
Markdown
# SaveInMed Frontend
|
|
|
|
Frontend principal da plataforma SaveInMed, desenvolvido com Next.js 15 e React 19.
|
|
|
|
## 🎯 Propósito
|
|
|
|
Este é o frontend principal e mais completo do SaveInMed, oferecendo:
|
|
- Interface completa para farmácias e distribuidoras
|
|
- Gestão de catálogo de produtos
|
|
- Sistema de pedidos e pagamentos
|
|
- Dashboard administrativo
|
|
- Integração com Appwrite para backend
|
|
- Checkout com Mercado Pago
|
|
- Sistema de notificações em tempo real
|
|
|
|
## 🚀 Tecnologias
|
|
|
|
- **Next.js 15.3** - Framework React com SSR e SSG
|
|
- **React 19** - Biblioteca UI mais recente
|
|
- **TypeScript 5** - Tipagem estática
|
|
- **TailwindCSS 4** - Framework CSS utility-first (última versão)
|
|
- **Appwrite 18** - Backend as a Service
|
|
- **Axios** - Cliente HTTP
|
|
- **Mercado Pago SDK React** - Integração de pagamentos
|
|
- **Chart.js** - Gráficos e visualizações
|
|
- **Lucide React** - Ícones modernos
|
|
- **React Hot Toast** - Notificações toast
|
|
- **Nodemailer** - Envio de emails
|
|
|
|
## 📋 Funcionalidades
|
|
|
|
### Autenticação e Autorização
|
|
- Login e registro com Appwrite
|
|
- Autenticação via email
|
|
- Proteção de rotas
|
|
- Sessões persistentes
|
|
- Recuperação de senha
|
|
|
|
### Gestão de Produtos
|
|
- Catálogo completo de produtos
|
|
- Busca e filtros avançados
|
|
- Categorias e subcategorias
|
|
- Informações de laboratórios
|
|
- Controle de lote e validade
|
|
- Upload de imagens
|
|
|
|
### Pedidos e Vendas
|
|
- Carrinho de compras
|
|
- Checkout integrado
|
|
- Processamento de pagamentos
|
|
- Acompanhamento de pedidos
|
|
- Histórico de compras
|
|
- Notas fiscais
|
|
|
|
### Dashboard
|
|
- Visão geral de vendas
|
|
- Gráficos e métricas
|
|
- Relatórios personalizados
|
|
- Analytics em tempo real
|
|
|
|
### Gestão de Empresas
|
|
- Cadastro de empresas
|
|
- Dados da Receita Federal (integração)
|
|
- Endereços e contatos
|
|
- Configurações de frete
|
|
- Geocodificação automática
|
|
|
|
### Notificações
|
|
- Toast notifications
|
|
- Emails transacionais
|
|
- Alertas de estoque
|
|
- Confirmações de pedido
|
|
|
|
## 🏗️ Arquitetura
|
|
|
|
```
|
|
saveinmed-frontend/
|
|
├── src/
|
|
│ ├── app/ # App Router (Next.js 15)
|
|
│ │ ├── (auth)/ # Grupo de rotas de autenticação
|
|
│ │ ├── (dashboard)/ # Grupo de rotas do dashboard
|
|
│ │ ├── api/ # API Routes
|
|
│ │ ├── layout.tsx # Layout raiz
|
|
│ │ └── page.tsx # Página inicial
|
|
│ ├── components/ # Componentes reutilizáveis
|
|
│ │ ├── ui/ # Componentes de UI base
|
|
│ │ ├── forms/ # Formulários
|
|
│ │ └── charts/ # Gráficos
|
|
│ ├── lib/ # Bibliotecas e utilitários
|
|
│ │ ├── appwrite.ts # Cliente Appwrite
|
|
│ │ ├── api.ts # Cliente API
|
|
│ │ └── utils.ts # Funções utilitárias
|
|
│ ├── hooks/ # Custom hooks
|
|
│ ├── types/ # Tipos TypeScript
|
|
│ ├── styles/ # Estilos globais
|
|
│ └── config/ # Configurações
|
|
├── public/ # Arquivos estáticos
|
|
├── next.config.ts
|
|
├── tailwind.config.ts
|
|
├── tsconfig.json
|
|
└── README.md
|
|
```
|
|
|
|
## 🔧 Configuração
|
|
|
|
### Variáveis de Ambiente
|
|
|
|
Crie um arquivo `.env.local` na raiz do projeto:
|
|
|
|
```bash
|
|
# Appwrite
|
|
NEXT_PUBLIC_APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
|
|
NEXT_PUBLIC_APPWRITE_PROJECT_ID=your-project-id
|
|
NEXT_PUBLIC_APPWRITE_DATABASE_ID=your-database-id
|
|
|
|
# Collections IDs
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_PRODUTOS_CATALOGO_ID=produtos-catalogo
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_LABORATORIOS_ID=laboratorios
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_CATEGORIAS_ID=categorias
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_SUBCATEGORIAS_ID=subcategorias
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_CARRINHOS_ID=carrinhos
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_PEDIDOS_ID=pedidos
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_USUARIOS_ID=usuarios
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_EMPRESAS_ID=empresas
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_EMPRESAS_DADOS_ID=empresas-dados
|
|
NEXT_PUBLIC_APPWRITE_COLLECTION_ENDERECOS_ID=enderecos
|
|
|
|
# Mercado Pago
|
|
NEXT_PUBLIC_MERCADOPAGO_PUBLIC_KEY=your-public-key
|
|
MERCADOPAGO_ACCESS_TOKEN=your-access-token
|
|
|
|
# Email (Nodemailer)
|
|
EMAIL_HOST=smtp.gmail.com
|
|
EMAIL_PORT=587
|
|
EMAIL_USER=your-email@gmail.com
|
|
EMAIL_PASSWORD=your-app-password
|
|
|
|
# Mapbox (para geocodificação)
|
|
MAPBOX_ACCESS_TOKEN=your-mapbox-token
|
|
|
|
# App
|
|
NEXT_PUBLIC_APP_URL=http://localhost:3000
|
|
```
|
|
|
|
### Pré-requisitos
|
|
|
|
- Node.js 20+
|
|
- npm, yarn ou pnpm
|
|
- Conta Appwrite configurada
|
|
- Conta Mercado Pago (para pagamentos)
|
|
|
|
## 🏃 Execução Local
|
|
|
|
```bash
|
|
# Instalar dependências
|
|
npm install
|
|
|
|
# Modo desenvolvimento com Turbopack
|
|
npm run dev
|
|
|
|
# Aplicação estará disponível em http://localhost:3000
|
|
```
|
|
|
|
## 🏗️ Build e Produção
|
|
|
|
```bash
|
|
# Build para produção
|
|
npm run build
|
|
|
|
# Executar build de produção
|
|
npm start
|
|
|
|
# Lint
|
|
npm run lint
|
|
```
|
|
|
|
## 🎨 Estilização com TailwindCSS 4
|
|
|
|
O projeto utiliza a versão mais recente do TailwindCSS com PostCSS:
|
|
|
|
```css
|
|
/* src/app/globals.css */
|
|
@import "tailwindcss";
|
|
|
|
@theme {
|
|
--color-primary: #3b82f6;
|
|
--color-secondary: #8b5cf6;
|
|
}
|
|
```
|
|
|
|
## 📱 Responsividade
|
|
|
|
Design totalmente responsivo com breakpoints customizados:
|
|
|
|
- **Mobile**: < 640px
|
|
- **Tablet**: 640px - 1024px
|
|
- **Desktop**: > 1024px
|
|
- **Wide**: > 1536px
|
|
|
|
## 🔐 Autenticação com Appwrite
|
|
|
|
```typescript
|
|
import { account } from '@/lib/appwrite';
|
|
|
|
// Login
|
|
const session = await account.createEmailPasswordSession(email, password);
|
|
|
|
// Registro
|
|
const user = await account.create('unique()', email, password, name);
|
|
|
|
// Logout
|
|
await account.deleteSession('current');
|
|
|
|
// Obter usuário atual
|
|
const user = await account.get();
|
|
```
|
|
|
|
## 💾 Banco de Dados (Appwrite)
|
|
|
|
```typescript
|
|
import { databases } from '@/lib/appwrite';
|
|
|
|
// Listar documentos
|
|
const products = await databases.listDocuments(
|
|
databaseId,
|
|
collectionId,
|
|
[Query.limit(25)]
|
|
);
|
|
|
|
// Criar documento
|
|
const product = await databases.createDocument(
|
|
databaseId,
|
|
collectionId,
|
|
'unique()',
|
|
data
|
|
);
|
|
|
|
// Atualizar documento
|
|
await databases.updateDocument(databaseId, collectionId, documentId, data);
|
|
|
|
// Deletar documento
|
|
await databases.deleteDocument(databaseId, collectionId, documentId);
|
|
```
|
|
|
|
## 💳 Integração Mercado Pago
|
|
|
|
```typescript
|
|
import { initMercadoPago, Payment } from '@mercadopago/sdk-react';
|
|
|
|
initMercadoPago(process.env.NEXT_PUBLIC_MERCADOPAGO_PUBLIC_KEY!);
|
|
|
|
function CheckoutPage() {
|
|
return (
|
|
<Payment
|
|
initialization={{ amount: 100, preferenceId: 'xxx' }}
|
|
onSubmit={handlePayment}
|
|
/>
|
|
);
|
|
}
|
|
```
|
|
|
|
## 📊 Gráficos com Chart.js
|
|
|
|
```typescript
|
|
import { Line } from 'react-chartjs-2';
|
|
|
|
function SalesChart({ data }: { data: number[] }) {
|
|
return (
|
|
<Line
|
|
data={{
|
|
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
|
|
datasets: [{
|
|
label: 'Vendas',
|
|
data: data,
|
|
borderColor: 'rgb(75, 192, 192)',
|
|
}]
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
```
|
|
|
|
## 🧪 Testes
|
|
|
|
```bash
|
|
# Testes unitários (quando configurados)
|
|
npm test
|
|
|
|
# E2E tests (quando configurados)
|
|
npm run test:e2e
|
|
```
|
|
|
|
## ⚡ Performance
|
|
|
|
Otimizações implementadas:
|
|
|
|
- **Next.js 15**: App Router com React Server Components
|
|
- **Turbopack**: Dev server ultra-rápido
|
|
- **Image Optimization**: next/image para otimização automática
|
|
- **Font Optimization**: next/font para carregamento eficiente
|
|
- **Code Splitting**: Automático por rota
|
|
- **ISR**: Incremental Static Regeneration
|
|
- **Edge Runtime**: Para rotas que precisam de baixa latência
|
|
|
|
## 🚀 Deploy
|
|
|
|
### Vercel (Recomendado)
|
|
```bash
|
|
# Instalar Vercel CLI
|
|
npm i -g vercel
|
|
|
|
# Deploy
|
|
vercel
|
|
|
|
# Deploy para produção
|
|
vercel --prod
|
|
```
|
|
|
|
### Docker
|
|
```bash
|
|
# Build
|
|
docker build -t saveinmed-frontend:latest .
|
|
|
|
# Run
|
|
docker run -p 3000:3000 saveinmed-frontend:latest
|
|
```
|
|
|
|
### Outras Plataformas
|
|
- **Netlify**: Suporte completo para Next.js
|
|
- **AWS Amplify**: Deploy automático
|
|
- **Railway**: Deploy simplificado
|
|
|
|
## 📧 Envio de Emails
|
|
|
|
```typescript
|
|
import { sendEmail } from '@/lib/email';
|
|
|
|
await sendEmail({
|
|
to: 'customer@example.com',
|
|
subject: 'Pedido Confirmado',
|
|
html: '<h1>Seu pedido foi confirmado!</h1>',
|
|
});
|
|
```
|
|
|
|
## 🗺️ Geocodificação
|
|
|
|
```typescript
|
|
import { geocodeAddress } from '@/lib/mapbox';
|
|
|
|
const coordinates = await geocodeAddress('Rua Example, 123, São Paulo, SP');
|
|
// { latitude: -23.5505, longitude: -46.6333 }
|
|
```
|
|
|
|
## 🔗 Integração com Outros Componentes
|
|
|
|
- **Appwrite**: Backend principal para autenticação e dados
|
|
- **Backend (Go API)**: Operações de alta performance
|
|
- **Backoffice (NestJS)**: Funcionalidades administrativas
|
|
- **SaveInMed BFF**: Proxy e agregação de dados
|
|
- **Mercado Pago**: Processamento de pagamentos
|
|
|
|
## 📝 Documentação Adicional
|
|
|
|
Veja os arquivos de documentação na raiz do projeto:
|
|
- `CONFIGURACAO_COLLECTIONS_APPWRITE.md`
|
|
- `IMPLEMENTACAO_MERCADOPAGO_CHECKOUT.md`
|
|
- `MELHORIAS_GESTAO_CATALOGO_PRODUTOS.md`
|
|
- E outros...
|
|
|
|
## 📝 Licença
|
|
|
|
MIT
|