153 lines
5.0 KiB
TypeScript
153 lines
5.0 KiB
TypeScript
import { defineTable } from 'convex/server';
|
|
import { v } from 'convex/values';
|
|
|
|
export const documentacaoTables = {
|
|
// Documentos principais
|
|
documentacao: defineTable({
|
|
titulo: v.string(),
|
|
conteudo: v.string(), // Conteúdo em Markdown
|
|
conteudoHtml: v.optional(v.string()), // Conteúdo renderizado em HTML
|
|
conteudoBusca: v.string(), // Versão normalizada para busca (lowercase, sem acentos)
|
|
categoriaId: v.optional(v.id('documentacaoCategorias')),
|
|
tags: v.array(v.string()),
|
|
tipo: v.union(
|
|
v.literal('query'),
|
|
v.literal('mutation'),
|
|
v.literal('action'),
|
|
v.literal('component'),
|
|
v.literal('route'),
|
|
v.literal('modulo'),
|
|
v.literal('manual'),
|
|
v.literal('outro')
|
|
),
|
|
versao: v.string(), // Versão do documento (ex: "1.0.0")
|
|
arquivoOrigem: v.optional(v.string()), // Caminho do arquivo que gerou este documento
|
|
funcaoOrigem: v.optional(v.string()), // Nome da função/componente que gerou este documento
|
|
hashOrigem: v.optional(v.string()), // Hash do arquivo/função para detectar mudanças
|
|
metadados: v.optional(
|
|
v.object({
|
|
parametros: v.optional(v.array(v.string())),
|
|
retorno: v.optional(v.string()),
|
|
dependencias: v.optional(v.array(v.string())),
|
|
exemplos: v.optional(v.array(v.string())),
|
|
algoritmo: v.optional(v.string())
|
|
})
|
|
),
|
|
ativo: v.boolean(),
|
|
criadoPor: v.id('usuarios'),
|
|
criadoEm: v.number(),
|
|
atualizadoPor: v.optional(v.id('usuarios')),
|
|
atualizadoEm: v.number(),
|
|
visualizacoes: v.number(), // Contador de visualizações
|
|
geradoAutomaticamente: v.boolean() // Se foi gerado pela varredura automática
|
|
})
|
|
.index('by_categoria', ['categoriaId'])
|
|
.index('by_tipo', ['tipo'])
|
|
.index('by_busca', ['conteudoBusca'])
|
|
.index('by_ativo', ['ativo'])
|
|
.index('by_criado_em', ['criadoEm'])
|
|
.index('by_atualizado_em', ['atualizadoEm'])
|
|
.index('by_arquivo_origem', ['arquivoOrigem'])
|
|
.index('by_hash_origem', ['hashOrigem']),
|
|
|
|
// Categorias hierárquicas (Módulos, Seções, Funções)
|
|
documentacaoCategorias: defineTable({
|
|
nome: v.string(),
|
|
descricao: v.optional(v.string()),
|
|
icone: v.optional(v.string()), // Nome do ícone (lucide-svelte)
|
|
cor: v.optional(
|
|
v.union(
|
|
v.literal('primary'),
|
|
v.literal('secondary'),
|
|
v.literal('accent'),
|
|
v.literal('success'),
|
|
v.literal('warning'),
|
|
v.literal('error'),
|
|
v.literal('info')
|
|
)
|
|
),
|
|
parentId: v.optional(v.id('documentacaoCategorias')), // Para hierarquia
|
|
ordem: v.number(), // Ordem de exibição
|
|
ativo: v.boolean(),
|
|
criadoPor: v.id('usuarios'),
|
|
criadoEm: v.number(),
|
|
atualizadoEm: v.number()
|
|
})
|
|
.index('by_parent', ['parentId'])
|
|
.index('by_ordem', ['ordem'])
|
|
.index('by_ativo', ['ativo']),
|
|
|
|
// Tags para busca e organização
|
|
documentacaoTags: defineTable({
|
|
nome: v.string(),
|
|
descricao: v.optional(v.string()),
|
|
cor: v.optional(
|
|
v.union(
|
|
v.literal('primary'),
|
|
v.literal('secondary'),
|
|
v.literal('accent'),
|
|
v.literal('success'),
|
|
v.literal('warning'),
|
|
v.literal('error'),
|
|
v.literal('info')
|
|
)
|
|
),
|
|
usadoEm: v.number(), // Contador de quantos documentos usam esta tag
|
|
ativo: v.boolean(),
|
|
criadoPor: v.id('usuarios'),
|
|
criadoEm: v.number()
|
|
})
|
|
.index('by_nome', ['nome'])
|
|
.index('by_ativo', ['ativo']),
|
|
|
|
// Histórico de varreduras realizadas
|
|
documentacaoVarredura: defineTable({
|
|
tipo: v.union(v.literal('automatica'), v.literal('manual')),
|
|
status: v.union(
|
|
v.literal('em_andamento'),
|
|
v.literal('concluida'),
|
|
v.literal('erro'),
|
|
v.literal('cancelada')
|
|
),
|
|
documentosEncontrados: v.number(), // Quantidade de documentos encontrados
|
|
documentosNovos: v.number(), // Quantidade de novos documentos criados
|
|
documentosAtualizados: v.number(), // Quantidade de documentos atualizados
|
|
arquivosAnalisados: v.number(), // Quantidade de arquivos analisados
|
|
erros: v.optional(v.array(v.string())), // Lista de erros encontrados
|
|
duracaoMs: v.optional(v.number()), // Duração em milissegundos
|
|
executadoPor: v.id('usuarios'),
|
|
iniciadoEm: v.number(),
|
|
concluidoEm: v.optional(v.number())
|
|
})
|
|
.index('by_status', ['status'])
|
|
.index('by_tipo', ['tipo'])
|
|
.index('by_executado_por', ['executadoPor'])
|
|
.index('by_iniciado_em', ['iniciadoEm']),
|
|
|
|
// Configurações de agendamento de varredura
|
|
documentacaoConfig: defineTable({
|
|
ativo: v.boolean(),
|
|
diasSemana: v.array(
|
|
v.union(
|
|
v.literal('domingo'),
|
|
v.literal('segunda'),
|
|
v.literal('terca'),
|
|
v.literal('quarta'),
|
|
v.literal('quinta'),
|
|
v.literal('sexta'),
|
|
v.literal('sabado')
|
|
)
|
|
), // Dias da semana para executar varredura
|
|
horario: v.string(), // Horário no formato "HH:MM" (ex: "08:00")
|
|
fusoHorario: v.optional(v.string()), // Fuso horário (padrão: "America/Recife")
|
|
ultimaExecucao: v.optional(v.number()), // Timestamp da última execução
|
|
proximaExecucao: v.optional(v.number()), // Timestamp da próxima execução agendada
|
|
configuradoPor: v.id('usuarios'),
|
|
configuradoEm: v.number(),
|
|
atualizadoPor: v.optional(v.id('usuarios')),
|
|
atualizadoEm: v.number()
|
|
})
|
|
.index('by_ativo', ['ativo'])
|
|
};
|
|
|