Entrar como:FuncionalidadesDoc
Pular para o conteúdo
← Voltar para a visão geral
✅ ConcluídoCard #44 · M8

Notícias Institucionais (Painel Home Customizado)

Marco M8: Comunicação & Documentos (SULTS-inspired)

👤Wellington Santiago (via ZCode)

✅ EXECUÇÃO — 15/08/2026

Implementado e validado em produção (homolog). Commits: 2062f6c (fundação: 21 tabelas), 080c857 (features), bbfa277 (lint). Deploy CI verde.

Validação ao vivo: página(s) da feature respondendo 200 com a role correta + procedures tRPC testadas via HTTP (respostas JSON corretas). Ver relatório da sessão.

Detalhes de implementação e decisões: conforme o design acima deste documento (schema, procedures e páginas seguidos conforme especificado; ajustes menores documentados no commit).

📄 Card 44 [M8] — Notícias Institucionais (Painel Home Customizado)

📚 Referência SULTS: https://www.sults.com.br/produtos/noticias Módulo de comunicação institucional que posiciona atualizações na home do sistema (não em aba escondida). Garante visualização imediata ao logar. Funciona como memória institucional pesquisável.

🎯 Objetivo

Criar o módulo Notícias Institucionais — um feed de comunicações da escola/rede exibido em destaque nas Homes de todos os roles (Master/Local/Professor/Aluno/Pai), com:

  • Carrossel de 4 cards automáticos (imagem + título + categoria)
  • Destaque (artigo em evidência com capa + prévia)
  • Feed navegável (acervo cronológico pesquisável, filtrável por período/título)
  • Segmentação por filial (toda a rede, unidades selecionadas ou só interna)

📚 Documentação de Referência

  • docs/DESIGN_SYSTEM.md §6 (Recharts não se aplica; usar componentes nativos)
  • prisma/schema.prisma — criar model News (similar ao Announcement mas rico)
  • Padrão visual: Cards arredondados ~12px, cores Design System GENIOON

🛠️ Especificação Técnica

Schema Prisma (novo)

model News {
  id              String   @id @default(cuid())
  title           String
  slug            String   @unique
  summary         String   @db.VarChar(280)  // prévia curta
  content         String   @db.Text           // editor rico (markdown/HTML)
  coverImageUrl   String?                     // S3/MinIO
  category        String?                     // "Lançamentos", "Resultados", "Eventos"
  isFeatured      Boolean  @default(false)    // aparece no carrossel/destaque
  isPublished     Boolean  @default(false)
  publishedAt     DateTime?
  targetScope     NewsScope @default(ALL)     // ALL, BRANCH_SPECIFIC, INTERNAL
  branches        NewsBranch[]                // se BRANCH_SPECIFIC
  roles           NewsRole[]                  // MASTER/LOCAL/PROFESSOR/STUDENT/PARENT
  authorId        String
  author          User     @relation(fields: [authorId], references: [id])
  viewCount       Int      @default(0)
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

enum NewsScope { ALL  BRANCH_SPECIFIC  INTERNAL }
enum NewsRole { MASTER  SUPERVISOR  LOCAL  ATTENDANT  PROFESSOR  STUDENT  PARENT }

Rotas (page.tsx) — novas

  • /master/noticias — painel admin (CRUD + criar + editar + agendar publicação)
  • /noticias — feed público dos usuários (acervo pesquisável, acesso após login)
  • Componente <NewsCarousel /> injetado na Home de cada role (carrossel 4 cards)
  • Componente <NewsHighlight /> injetado na Home (destaque principal)

Procedures tRPC (novo sub-router master.news)

  • list (com filtros: categoria, período, scope, published/draft)
  • create / update / delete / publish / unpublish
  • featured (retorna 4 para carrossel + 1 destaque)
  • feed (para /noticias — paginação cursor)
  • trackView (incrementa viewCount, idempotente por IP+userId)

Upload capa

  • Reusar /api/upload existente (Card 15) → S3/MinIO bucket news-covers
  • Tamanho máx 2MB, formatos JPG/PNG/WEBP

✅ Critérios de Aceite

  1. MASTER cria/edita/exclui/agenda notícias no painel admin
  2. Home de cada role mostra carrossel de 4 cards automáticos + 1 destaque
  3. Página /noticias lista acervo com filtros (categoria, período, busca)
  4. Segmentação: notícia BRANCH_SPECIFIC só aparece pra quem é da filial
  5. viewCount incrementa ao abrir (idempotente)
  6. Upload de capa funcional (S3/MinIO)
  7. Build passa + lint OK

🔌 Handoff

  • Componentes reutilizáveis: <NewsCarousel />, <NewsHighlight />, <NewsCard />
  • Procedures em master.news.* (MASTER-only create/edit; outros roles leem)

🎯 Próximo

Card 45: Disco Virtual (drive 3 níveis)

← Voltar para a visão geral