Files
octto-engenharia/docs/diario-de-bordo/resumo-25-27.md

169 lines
7.3 KiB
Markdown

## Resumo Geral do Projeto (Atualizado em 27/11/2025)
### 1. Visão Geral
- Plataforma Next.js full-stack com duas frentes principais:
- **Site público** dentro de `src/app/(public)` e rotas localizadas em `src/app/[locale]` alimentadas por conteúdo dinâmico vindo do CMS.
- **Painel Admin** em `src/app/admin` para operação interna (gestão de páginas, serviços, projetos, usuários e mensagens).
- Back-end único via rotas App Router + Prisma/PostgreSQL (`prisma/pageContent`, `project`, `service`, etc.).
### 2. Conteúdo Dinâmico & CMS
- CRUD de páginas no admin acessa `/api/pages` (genérico) e `/api/pages/[slug]` (detalhe com autenticação JWT).
- Páginas gerenciadas até agora: `home`, `sobre`, `contato`, além de `config` (metadados globais) e rotas públicas estruturadas.
- Formular pós-edição acionam `translation:refresh` no front para atualizar badges do sininho.
- Layout administrativo (`admin/layout.tsx`) fornece sidebar, menu, avatar modal, confirmação padrão e o **painel de traduções** com polling + badge.
### 3. Plataforma de Traduções
- Salvar conteúdo em PT dispara `translateInBackground` (EN/ES) dentro de `src/app/api/pages/[slug]/route.ts` utilizando LibreTranslate + cache em `prisma.translation`.
- API auxiliar `/api/admin/translate-pages` permite rodadas manuais e retorno de status consolidado.
- Front exibe estado por slug (Concluída / Em andamento) e dispara notificações quando pendências são resolvidas.
- Job `prisma/check-translations.mjs` e script `scripts/checkTranslations.cjs` ajudam na auditoria dos timestamps.
- Endpoint redundante `/api/pages/contact` foi removido para evitar inconsistências; tudo passa pelo handler dinâmico.
### 4. Experiência do Editor
- Campos do CMS agora possuem limites visuais via `CharLimitBadge` (estilo Twitter) com `LabelWithLimit`, aplicados a **Home**, **Sobre** e **Contato**.
- Limites também reforçados com `maxLength` para impedir que textos comprometam o layout público.
- Foram definidos ícones reutilizáveis (selector custom) e componentes de formulário padronizados.
### 5. Site Público
- Utiliza `useTranslatedContent` + `<T>` para mesclar conteúdo dinâmico com fallback estático.
- Páginas principais refletem exatamente o que foi configurado no admin (banner hero, diferenciais, CTA, depoimentos, etc.).
- Formulário de contato envia para `/api/messages`, com feedback via `ToastContext`.
### 6. Segurança e Infra
- Autenticação do admin baseada em cookie `auth_token` (JWT) validado nas rotas protegidas.
- Upload/remoção de avatar gerenciado via `/api/auth/avatar` com modal padrão.
- Prisma centraliza o schema (`User`, `Project`, `Service`, `Message`, `PageContent`, `Translation`).
### 7. Histórico de Entregas Relevantes
1. Estruturação do CMS e rotas dinâmicas para páginas públicas.
2. Implementação de tradução automática assíncrona + cache.
3. Criação do painel de notificações com polling/badges.
4. Inclusão de limites de caracteres visíveis e enforce client-side.
5. Remoção de API duplicada e ajustes para manter EN/ES sincronizados.
### 8. Pendências & Próximos Passos
- Rodar tradução manual para `contact` e `config` (EN/ES ainda desatualizados segundo `scripts/checkTranslations.cjs`).
- Expandir o CMS para outras páginas (ex.: serviços e projetos públicos) caso necessário.
- Opcional: reforçar validação server-side dos limites e criar testes automatizados para o fluxo de tradução.
Este resumo deve servir como onboarding rápido para qualquer pessoa ou nova IA que precise continuar o desenvolvimento.
---
## CMS 1.1 - Atualizações (27/11/2025)
### 🔧 Correções de Infraestrutura
- Tipagem de `params` para Next.js 15 nas API routes (`/api/projects/[id]`, `/api/services/[id]`)
- Correção para usar `Promise<{ id: string }>` e `await params`
---
### 📊 Dashboard Admin Dinâmico
O dashboard agora exibe dados reais do banco de dados:
| Estatística | Descrição |
|-------------|-----------|
| Projetos | Total e quantidade de ativos |
| Mensagens | Total e quantidade não lidas |
| Serviços | Total e quantidade ativos |
**Novas funcionalidades:**
- Últimas 5 mensagens com iniciais do nome, tempo relativo e indicador de não lida
- Últimos 5 projetos com imagem de capa, categoria e badge de status
- Cards clicáveis que redirecionam para as páginas correspondentes
- Botões "Ver todos" funcionais
---
### 🛠️ Módulo de Serviços (CRUD Completo)
#### Admin - Lista de Serviços (`/admin/servicos`)
- Dados dinâmicos da API `/api/services`
- Filtro por status (Todos/Ativos/Inativos)
- Busca por título e descrição
- Botões de Editar e Excluir
- Modal de confirmação antes de excluir
#### Admin - Novo Serviço (`/admin/servicos/novo`)
- Formulário conectado à API `POST /api/services`
- **Seletor visual de ícones em galeria** com busca em tempo real
- **70+ ícones** organizados por categoria:
- Veículos e Transporte
- Ferramentas e Engenharia
- Documentos e Laudos
- Segurança
- Construção e Equipamentos
- Inspeção e Verificação
- Geral
- Campos: título, ícone, status, ordem, descrição curta, descrição completa
#### Admin - Editar Serviço (`/admin/servicos/[id]/editar`) - **NOVO**
- Página criada do zero
- Carrega dados do serviço existente via `GET /api/services/:id`
- Atualiza via `PUT /api/services/:id`
- Mesmo seletor visual de ícones da página de criação
#### Páginas Públicas de Serviços
- `/servicos` e `/[locale]/servicos` agora são dinâmicas
- Exibe apenas serviços **ativos**
- Ordenados pelo campo `order`
- Fallback para dados estáticos se API vazia
- Loading state durante carregamento
---
### 📁 Módulo de Projetos (Melhorias)
#### Admin - Lista de Projetos (`/admin/projetos`)
- Filtros por categoria e status
- Busca por título, cliente e descrição
- Botão de Editar em cada projeto
#### Admin - Editar Projeto (`/admin/projetos/[id]/editar`) - **NOVO**
- Página criada do zero
- Carrega dados do projeto existente
- Upload de imagem de capa
- Upload de galeria de imagens (até 8)
- Todos os campos editáveis
---
### 🎨 Melhorias de UX/UI
| Feature | Descrição |
|---------|-----------|
| Seletor de Ícones | Galeria visual clicável com busca em tempo real |
| Loading States | Indicadores visuais de carregamento em todas as páginas |
| Toasts | Feedback de sucesso e erro nas operações |
| Confirmação | Modal antes de ações destrutivas (exclusão) |
| Navegação | Links e botões funcionais em todo admin |
---
### 📁 Arquivos Modificados/Criados
```
frontend/src/app/admin/
├── page.tsx # Dashboard com dados reais
├── projetos/
│ ├── page.tsx # Lista com filtros e busca
│ └── [id]/editar/page.tsx # ✨ NOVO - Edição de projeto
└── servicos/
├── page.tsx # Lista com filtros e busca
├── novo/page.tsx # Seletor visual de ícones
└── [id]/editar/page.tsx # ✨ NOVO - Edição de serviço
frontend/src/app/
├── (public)/servicos/page.tsx # Página pública dinâmica
└── [locale]/servicos/page.tsx # Página com locale dinâmica
frontend/src/app/api/projects/[id]/
└── route.ts # Corrigido tipagem Next.js 15
```
---
**Branch**: `cms-1.1`
**Status**: ✅ Produção