Files
sgse-app/packages/backend/convex/documentos.ts
deyvisonwanderley 0d011b8f42 refactor: enhance role management UI and integrate profile management features
- Introduced a modal for managing user profiles, allowing for the creation and editing of profiles with improved state management.
- Updated the role filtering logic to enhance type safety and readability.
- Refactored UI components for better user experience, including improved button states and loading indicators.
- Removed outdated code related to permissions and streamlined the overall structure for maintainability.
2025-11-03 15:14:33 -03:00

203 lines
6.6 KiB
TypeScript

import { v } from "convex/values";
import { mutation, query } from "./_generated/server";
import { Id } from "./_generated/dataModel";
// Mutation para fazer upload de arquivo e obter o storage ID
export const generateUploadUrl = mutation({
args: {},
returns: v.string(),
handler: async (ctx) => {
return await ctx.storage.generateUploadUrl();
},
});
// Mutation para atualizar um campo de documento do funcionário
export const updateDocumento = mutation({
args: {
funcionarioId: v.id("funcionarios"),
campo: v.string(),
storageId: v.union(v.id("_storage"), v.null()),
},
returns: v.null(),
handler: async (ctx, args) => {
const funcionario = await ctx.db.get(args.funcionarioId);
if (!funcionario) {
throw new Error("Funcionário não encontrado");
}
// Atualizar o campo específico do documento
await ctx.db.patch(args.funcionarioId, {
[args.campo]: args.storageId,
});
return null;
},
});
// Query para obter URLs de todos os documentos de um funcionário
export const getDocumentosUrls = query({
args: { funcionarioId: v.id("funcionarios") },
returns: v.object({
certidaoAntecedentesPF: v.union(v.string(), v.null()),
certidaoAntecedentesJFPE: v.union(v.string(), v.null()),
certidaoAntecedentesSDS: v.union(v.string(), v.null()),
certidaoAntecedentesTJPE: v.union(v.string(), v.null()),
certidaoImprobidade: v.union(v.string(), v.null()),
rgFrente: v.union(v.string(), v.null()),
rgVerso: v.union(v.string(), v.null()),
cpfFrente: v.union(v.string(), v.null()),
cpfVerso: v.union(v.string(), v.null()),
situacaoCadastralCPF: v.union(v.string(), v.null()),
tituloEleitorFrente: v.union(v.string(), v.null()),
tituloEleitorVerso: v.union(v.string(), v.null()),
comprovanteVotacao: v.union(v.string(), v.null()),
carteiraProfissionalFrente: v.union(v.string(), v.null()),
carteiraProfissionalVerso: v.union(v.string(), v.null()),
comprovantePIS: v.union(v.string(), v.null()),
certidaoRegistroCivil: v.union(v.string(), v.null()),
certidaoNascimentoDependentes: v.union(v.string(), v.null()),
cpfDependentes: v.union(v.string(), v.null()),
reservistaDoc: v.union(v.string(), v.null()),
comprovanteEscolaridade: v.union(v.string(), v.null()),
comprovanteResidencia: v.union(v.string(), v.null()),
comprovanteContaBradesco: v.union(v.string(), v.null()),
declaracaoAcumulacaoCargo: v.union(v.string(), v.null()),
declaracaoDependentesIR: v.union(v.string(), v.null()),
declaracaoIdoneidade: v.union(v.string(), v.null()),
termoNepotismo: v.union(v.string(), v.null()),
termoOpcaoRemuneracao: v.union(v.string(), v.null()),
}),
handler: async (ctx, args) => {
const funcionario = await ctx.db.get(args.funcionarioId);
if (!funcionario) {
throw new Error("Funcionário não encontrado");
}
// Tipo exato do retorno para alinhar com o validator
type DocumentUrls = {
certidaoAntecedentesPF: string | null;
certidaoAntecedentesJFPE: string | null;
certidaoAntecedentesSDS: string | null;
certidaoAntecedentesTJPE: string | null;
certidaoImprobidade: string | null;
rgFrente: string | null;
rgVerso: string | null;
cpfFrente: string | null;
cpfVerso: string | null;
situacaoCadastralCPF: string | null;
tituloEleitorFrente: string | null;
tituloEleitorVerso: string | null;
comprovanteVotacao: string | null;
carteiraProfissionalFrente: string | null;
carteiraProfissionalVerso: string | null;
comprovantePIS: string | null;
certidaoRegistroCivil: string | null;
certidaoNascimentoDependentes: string | null;
cpfDependentes: string | null;
reservistaDoc: string | null;
comprovanteEscolaridade: string | null;
comprovanteResidencia: string | null;
comprovanteContaBradesco: string | null;
declaracaoAcumulacaoCargo: string | null;
declaracaoDependentesIR: string | null;
declaracaoIdoneidade: string | null;
termoNepotismo: string | null;
termoOpcaoRemuneracao: string | null;
};
const urls: DocumentUrls = {
certidaoAntecedentesPF: null,
certidaoAntecedentesJFPE: null,
certidaoAntecedentesSDS: null,
certidaoAntecedentesTJPE: null,
certidaoImprobidade: null,
rgFrente: null,
rgVerso: null,
cpfFrente: null,
cpfVerso: null,
situacaoCadastralCPF: null,
tituloEleitorFrente: null,
tituloEleitorVerso: null,
comprovanteVotacao: null,
carteiraProfissionalFrente: null,
carteiraProfissionalVerso: null,
comprovantePIS: null,
certidaoRegistroCivil: null,
certidaoNascimentoDependentes: null,
cpfDependentes: null,
reservistaDoc: null,
comprovanteEscolaridade: null,
comprovanteResidencia: null,
comprovanteContaBradesco: null,
declaracaoAcumulacaoCargo: null,
declaracaoDependentesIR: null,
declaracaoIdoneidade: null,
termoNepotismo: null,
termoOpcaoRemuneracao: null,
};
const campos: Array<keyof DocumentUrls> = [
"certidaoAntecedentesPF",
"certidaoAntecedentesJFPE",
"certidaoAntecedentesSDS",
"certidaoAntecedentesTJPE",
"certidaoImprobidade",
"rgFrente",
"rgVerso",
"cpfFrente",
"cpfVerso",
"situacaoCadastralCPF",
"tituloEleitorFrente",
"tituloEleitorVerso",
"comprovanteVotacao",
"carteiraProfissionalFrente",
"carteiraProfissionalVerso",
"comprovantePIS",
"certidaoRegistroCivil",
"certidaoNascimentoDependentes",
"cpfDependentes",
"reservistaDoc",
"comprovanteEscolaridade",
"comprovanteResidencia",
"comprovanteContaBradesco",
"declaracaoAcumulacaoCargo",
"declaracaoDependentesIR",
"declaracaoIdoneidade",
"termoNepotismo",
"termoOpcaoRemuneracao",
];
for (const campo of campos) {
const storageId = (funcionario as Record<string, unknown>)[campo as string] as
| Id<"_storage">
| undefined;
if (storageId) {
urls[campo] = await ctx.storage.getUrl(storageId);
} else {
urls[campo] = null;
}
}
return urls;
},
});
// Query para obter metadados de um documento
export const getDocumentoMetadata = query({
args: { storageId: v.id("_storage") },
returns: v.union(
v.object({
_id: v.id("_storage"),
_creationTime: v.number(),
contentType: v.optional(v.string()),
sha256: v.string(),
size: v.number(),
}),
v.null()
),
handler: async (ctx, args) => {
return await ctx.db.system.get(args.storageId);
},
});