Skip to content

Arquitetura proposta

Esta seção especifica a construção do atpares. Não descreve serviços já implementados. Vue e NestJS são decisões do usuário; persistência e filas abaixo são propostas técnicas iniciais.

Componentes

  • Vue SPA com TypeScript, Pinia e Vue Router: calendário, projetos, fontes, campanhas, prévias, revisão, biblioteca e resultados.
  • NestJS: autenticação, autorização, regras editoriais, contratos de API e orquestração.
  • PostgreSQL com Prisma: projetos, pautas, versões, evidências, orçamento e histórico.
  • Fila persistente com Redis/BullMQ: pesquisa, geração, validação, publicação e reconciliação.
  • Armazenamento de objetos: imagens, vídeos e prévias.
  • Adaptadores: Google para geração, Git/deploy para blogs e APIs oficiais para redes.

Começar com monólito modular e workers separáveis. Não exigir microserviço para cada etapa. O frontend não recebe credenciais de Git, redes ou geração. Versões de dependências serão fixadas ao criar as aplicações e validar compatibilidade; não reutilizar números antigos da documentação do Contrasync automaticamente.

Módulos de domínio

projects, knowledge, features, research, campaigns, calendar, content, media, reviews, publishing, integrations, budgets, analytics e audit. Cada módulo tem responsabilidade explícita e se comunica por contratos. Provedores de IA não decidem diretamente publicar nem escrevem no Git sem passar pelas regras do domínio.

Entidades

Project isola marca e configurações. Source e SourceRevision guardam evidência. Feature e LinkTarget representam o que pode ser divulgado. TopicReservation evita concorrência editorial. Campaign e ContentVersion guardam intenção, conteúdo e aprovação. MediaAsset guarda arquivos. Publication e PublicationAttempt representam cada destino. BudgetReservation controla gasto simultâneo. MetricSnapshot guarda resultados e período observado.

Toda entidade de conteúdo pertence a um projectId. Autorização deriva da sessão e das permissões, nunca só do projectId recebido. Busca vetorial também filtra contexto de projeto; comparação entre marcas usa somente material autorizado para esse fim.

Estados e confiabilidade

Conteúdo: draft, researching, producing, validating, needs_review, approved e rejected. Publicação: scheduled, submitting, processing, published, failed, unknown e cancelled. Estado do conteúdo não se confunde com estado de cada canal.

Aprovação referencia versão imutável. Outbox transacional liga mudança de estado à fila. Consumidores são idempotentes. Chave única combina projeto, versão, canal e conta. Timeout após envio gera unknown e reconciliação; nunca reenvio cego. Guardar identificador remoto e recibo quando disponíveis.

Agendamento guarda horário UTC, fuso IANA e intenção local. Worker revalida pausa, aprovação, orçamento, permissões e dependências imediatamente antes do efeito externo. Retentativas transitórias têm limite e backoff. Falhas permanentes exigem ação identificada no painel.

Segurança e observabilidade

Segredos cifrados, escopos mínimos, logs sem tokens e rotação de credenciais. Validar assinatura e deduplicar webhooks. Leitores de fontes devem bloquear rede interna, metadados de nuvem e redirecionamentos indevidos. Markdown e prévias não executam HTML/script arbitrário.

Registrar correlationId, projeto, versão, etapa, duração, custo, tentativa e erro sanitizado. Auditar aprovação, publicação, mudança de orçamento e pausa. Backup e restauração precisam abranger banco e mídias. Retenção e exclusão serão configuradas conforme os dados efetivamente coletados.

Referências