feat: Add 'atas' (minutes/records) management feature, and implement various improvements across UI, backend logic, and authentication.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import { v } from 'convex/values';
|
||||
import { mutation, query, internalMutation } from './_generated/server';
|
||||
import { internal, api } from './_generated/api';
|
||||
import { Id } from './_generated/dataModel';
|
||||
import { api, internal } from './_generated/api';
|
||||
import type { Id } from './_generated/dataModel';
|
||||
import type { QueryCtx } from './_generated/server';
|
||||
import { internalMutation, mutation, query } from './_generated/server';
|
||||
|
||||
/**
|
||||
* Helper para obter usuário autenticado
|
||||
@@ -625,20 +625,15 @@ export const getStatusSistema = query({
|
||||
}
|
||||
|
||||
// Total de registros (estimativa baseada em tabelas principais)
|
||||
const [usuarios, funcionarios, simbolos, alertas, metricas] =
|
||||
await Promise.all([
|
||||
ctx.db.query('usuarios').collect(),
|
||||
ctx.db.query('funcionarios').collect(),
|
||||
ctx.db.query('simbolos').collect(),
|
||||
ctx.db.query('alertConfigurations').collect(),
|
||||
ctx.db.query('systemMetrics').take(100) // não precisa contar tudo
|
||||
]);
|
||||
const [usuarios, funcionarios, simbolos, alertas, metricas] = await Promise.all([
|
||||
ctx.db.query('usuarios').collect(),
|
||||
ctx.db.query('funcionarios').collect(),
|
||||
ctx.db.query('simbolos').collect(),
|
||||
ctx.db.query('alertConfigurations').collect(),
|
||||
ctx.db.query('systemMetrics').take(100) // não precisa contar tudo
|
||||
]);
|
||||
const totalRegistros =
|
||||
usuarios.length +
|
||||
funcionarios.length +
|
||||
simbolos.length +
|
||||
alertas.length +
|
||||
metricas.length;
|
||||
usuarios.length + funcionarios.length + simbolos.length + alertas.length + metricas.length;
|
||||
|
||||
// Métricas de performance com fallbacks seguros
|
||||
const tempoMedioResposta = ultimaMetrica?.tempoRespostaMedio ?? 0;
|
||||
@@ -703,18 +698,18 @@ export const getAtividadeBancoDados = query({
|
||||
for (let i = 0; i < numBuckets; i++) {
|
||||
const inicio = haUmMinuto + i * bucketSizeMs;
|
||||
const fim = inicio + bucketSizeMs;
|
||||
|
||||
|
||||
// Contar atividades de criação/inserção (entradas)
|
||||
const atividadesBucket = atividadesRecentes.filter(
|
||||
(a) => a.timestamp >= inicio && a.timestamp < fim
|
||||
);
|
||||
const entradasAtividades = atividadesBucket.filter(
|
||||
a => a.acao === 'criar' || a.acao === 'inserir' || a.acao === 'cadastrar'
|
||||
(a) => a.acao === 'criar' || a.acao === 'inserir' || a.acao === 'cadastrar'
|
||||
).length;
|
||||
|
||||
|
||||
// Contar atividades de exclusão/remoção (saídas)
|
||||
const saidasAtividades = atividadesBucket.filter(
|
||||
a => a.acao === 'excluir' || a.acao === 'remover' || a.acao === 'deletar'
|
||||
(a) => a.acao === 'excluir' || a.acao === 'remover' || a.acao === 'deletar'
|
||||
).length;
|
||||
|
||||
// Usar mensagensPorMinuto como adicional se disponível
|
||||
@@ -748,7 +743,7 @@ export const getDistribuicaoRequisicoes = query({
|
||||
}),
|
||||
handler: async (ctx) => {
|
||||
const umaHoraAtras = Date.now() - 60 * 60 * 1000;
|
||||
|
||||
|
||||
// Buscar atividades reais do sistema
|
||||
const atividades = await ctx.db
|
||||
.query('logsAtividades')
|
||||
@@ -764,14 +759,24 @@ export const getDistribuicaoRequisicoes = query({
|
||||
|
||||
// Contar operações de leitura (consultas, visualizações)
|
||||
const leituras = atividades.filter(
|
||||
a => a.acao === 'consultar' || a.acao === 'visualizar' || a.acao === 'listar' || a.acao === 'buscar'
|
||||
(a) =>
|
||||
a.acao === 'consultar' ||
|
||||
a.acao === 'visualizar' ||
|
||||
a.acao === 'listar' ||
|
||||
a.acao === 'buscar'
|
||||
).length;
|
||||
|
||||
// Contar operações de escrita (criar, editar, excluir)
|
||||
const escritas = atividades.filter(
|
||||
a => a.acao === 'criar' || a.acao === 'editar' || a.acao === 'excluir' ||
|
||||
a.acao === 'inserir' || a.acao === 'atualizar' || a.acao === 'deletar' ||
|
||||
a.acao === 'cadastrar' || a.acao === 'remover'
|
||||
(a) =>
|
||||
a.acao === 'criar' ||
|
||||
a.acao === 'editar' ||
|
||||
a.acao === 'excluir' ||
|
||||
a.acao === 'inserir' ||
|
||||
a.acao === 'atualizar' ||
|
||||
a.acao === 'deletar' ||
|
||||
a.acao === 'cadastrar' ||
|
||||
a.acao === 'remover'
|
||||
).length;
|
||||
|
||||
// Adicionar estimativa baseada em mensagens se disponível
|
||||
@@ -782,7 +787,7 @@ export const getDistribuicaoRequisicoes = query({
|
||||
|
||||
// Queries são leituras + parte das mensagens (como consultas de chat)
|
||||
const queries = leituras + Math.round(totalMensagens * 0.5);
|
||||
|
||||
|
||||
// Mutations são escritas + parte das mensagens (como envio de mensagens)
|
||||
const mutations = escritas + Math.round(totalMensagens * 0.3);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user