# 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 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 // Executar updates executeOracleUpdate(sql: string, binds?: any[]): Promise // Obter pool getOraclePool(): Promise // Fechar pool closeOraclePool(): Promise ``` ## 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.