217 lines
6.0 KiB
Markdown
217 lines
6.0 KiB
Markdown
# Portal Calendário Dias Rota
|
|
|
|
Sistema de gerenciamento de calendário de entregas com integração ao banco de dados Oracle, desenvolvido com Next.js 16 e TypeScript.
|
|
|
|
## Descrição
|
|
|
|
O Portal Calendário Dias Rota é uma aplicação web que permite visualizar e gerenciar dias de entrega em um calendário interativo. O sistema oferece controle sobre capacidades de entrega, dias úteis e status de disponibilidade para cada data.
|
|
|
|
### Funcionalidades Principais
|
|
|
|
- **Calendário Interativo**: Visualização de datas com informações de entrega
|
|
- **Gestão de Capacidades**: Configuração de capacidade de entrega por dia
|
|
- **Controle de Dias Úteis**: Definição de quantidade de dias úteis para vendas
|
|
- **Status de Entrega**: Ativação/desativação de entregas por data específica
|
|
- **Integração Oracle**: Conexão direta com banco de dados Oracle usando pool de conexões
|
|
- **Interface Responsiva**: Design moderno com Tailwind CSS e componentes Radix UI
|
|
|
|
## Tecnologias
|
|
|
|
- **Framework**: [Next.js 16.1.1](https://nextjs.org/) (App Router)
|
|
- **Linguagem**: TypeScript 5
|
|
- **Banco de Dados**: Oracle Database (via node-oracledb 6.9.0)
|
|
- **Estilização**: Tailwind CSS 3.4.1
|
|
- **UI Components**:
|
|
- Radix UI (Dialog, Popover, Label, Alert Dialog)
|
|
- Lucide React (ícones)
|
|
- Sonner (notificações toast)
|
|
- **Gerenciamento de Estado**: Jotai 2.16.0
|
|
- **Utilitários**:
|
|
- date-fns 4.1.0 (manipulação de datas)
|
|
- clsx + tailwind-merge (classes CSS)
|
|
- class-variance-authority (variantes de componentes)
|
|
|
|
## Estrutura do Projeto
|
|
|
|
```
|
|
portal-dias-rota/
|
|
├── src/
|
|
│ ├── app/
|
|
│ │ ├── dias-rota/ # Página principal do calendário
|
|
│ │ │ ├── page.tsx # Server component
|
|
│ │ │ └── pagina.tsx # Client component com lógica do calendário
|
|
│ │ ├── action/ # Server actions
|
|
│ │ ├── data-access/ # Camada de acesso a dados
|
|
│ │ └── globals.css # Estilos globais
|
|
│ ├── components/
|
|
│ │ ├── kibo-ui/ # Componentes customizados do calendário
|
|
│ │ └── ui/ # Componentes UI (shadcn/ui)
|
|
│ ├── db/
|
|
│ │ └── oracle.ts # Configuração e pool de conexões Oracle
|
|
│ └── lib/ # Utilitários
|
|
├── ecosystem.config.js # Configuração PM2 para produção
|
|
├── next.config.mjs # Configuração Next.js
|
|
├── tailwind.config.ts # Configuração Tailwind CSS
|
|
└── package.json
|
|
```
|
|
|
|
## Instalação
|
|
|
|
### Pré-requisitos
|
|
|
|
- Node.js 20+ instalado
|
|
- Acesso a um banco de dados Oracle
|
|
- Oracle Instant Client (opcional, para modo Thick)
|
|
|
|
### Passos
|
|
|
|
1. Clone o repositório:
|
|
```bash
|
|
git clone <url-do-repositorio>
|
|
cd portal-dias-rota
|
|
```
|
|
|
|
2. Instale as dependências:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
3. Configure as variáveis de ambiente criando um arquivo `.env`:
|
|
```env
|
|
# Configurações Oracle
|
|
ORACLE_USER=seu_usuario
|
|
ORACLE_PASSWORD=sua_senha
|
|
ORACLE_CONNECTION_STRING=host:porta/servico
|
|
|
|
# Pool de Conexões (opcional)
|
|
ORACLE_POOL_MIN=1
|
|
ORACLE_POOL_MAX=30
|
|
ORACLE_POOL_INCREMENT=1
|
|
ORACLE_QUEUE_TIMEOUT=60000
|
|
ORACLE_INACTIVITY_TIMEOUT=20000
|
|
|
|
# Oracle Thick Mode (opcional)
|
|
# ORACLE_LIB_DIR=/caminho/para/instantclient
|
|
```
|
|
|
|
## Uso
|
|
|
|
### Desenvolvimento
|
|
|
|
Execute o servidor de desenvolvimento:
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
Acesse [http://localhost:3000](http://localhost:3000) no navegador.
|
|
|
|
### Produção
|
|
|
|
1. Build da aplicação:
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
2. Inicie o servidor de produção:
|
|
```bash
|
|
npm start
|
|
```
|
|
|
|
O servidor rodará na porta **3003** (configurável em `package.json`).
|
|
|
|
### Deploy com PM2
|
|
|
|
O projeto inclui configuração para PM2 (`ecosystem.config.js`):
|
|
|
|
```bash
|
|
pm2 start ecosystem.config.js
|
|
```
|
|
|
|
## Funcionalidades do Calendário
|
|
|
|
### Visualização de Dados
|
|
|
|
Cada dia no calendário exibe:
|
|
- **Capacidades**: Capacidade total de entrega
|
|
- **Peso Venda**: Peso disponível para venda
|
|
- **Disponível**: Quantidade disponível para entrega
|
|
|
|
### Configurações Globais
|
|
|
|
- **Capacidade**: Define a capacidade padrão de entrega
|
|
- **Dias Úteis**: Configura quantos dias úteis são considerados para vendas
|
|
|
|
### Interação com Datas
|
|
|
|
- Clique em uma data para ativar/desativar entregas
|
|
- Confirmação via dialog antes de aplicar mudanças
|
|
- Feedback visual com cores:
|
|
- **Cinza (#6B7280)**: Entrega ativa
|
|
- **Vermelho (#EF4444)**: Sem entrega
|
|
|
|
## Banco de Dados
|
|
|
|
### Conexão Oracle
|
|
|
|
O sistema utiliza o `node-oracledb` em modo **Thin** (padrão), que não requer binários nativos. Para usar o modo Thick, configure a variável `ORACLE_LIB_DIR`.
|
|
|
|
### Pool de Conexões
|
|
|
|
- Gerenciamento automático de conexões
|
|
- Configuração de pool min/max
|
|
- Timeout e incremento configuráveis
|
|
- Auto-commit habilitado para operações de escrita
|
|
|
|
### Funções Disponíveis
|
|
|
|
```typescript
|
|
// Executar queries
|
|
executeOracleQuery(sql: string, binds?: any[]): Promise<any[]>
|
|
|
|
// Executar updates
|
|
executeOracleUpdate(sql: string, binds?: any[]): Promise<number>
|
|
|
|
// Obter pool
|
|
getOraclePool(): Promise<oracledb.Pool>
|
|
|
|
// Fechar pool
|
|
closeOraclePool(): Promise<void>
|
|
```
|
|
|
|
## Segurança
|
|
|
|
- Variáveis de ambiente para credenciais sensíveis
|
|
- Prepared statements para prevenir SQL injection
|
|
- Pool de conexões com timeout configurável
|
|
- Validação de entrada no frontend
|
|
|
|
## Scripts Disponíveis
|
|
|
|
```bash
|
|
npm run dev # Servidor de desenvolvimento
|
|
npm run build # Build de produção
|
|
npm start # Servidor de produção (porta 3003)
|
|
npm run lint # Verificação de código com ESLint
|
|
```
|
|
|
|
## Contribuindo
|
|
|
|
1. Faça um fork do projeto
|
|
2. Crie uma branch para sua feature (`git checkout -b feature/nova-funcionalidade`)
|
|
3. Commit suas mudanças (`git commit -m 'Adiciona nova funcionalidade'`)
|
|
4. Push para a branch (`git push origin feature/nova-funcionalidade`)
|
|
5. Abra um Pull Request
|
|
|
|
## Licença
|
|
|
|
Este projeto é privado e proprietário.
|
|
|
|
## Autor
|
|
|
|
Desenvolvido por Joelson
|
|
|
|
## Suporte
|
|
|
|
Para questões e suporte, entre em contato com a equipe de desenvolvimento.
|