import { v } from "convex/values"; import { mutation, query } from "./_generated/server"; // 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"); } // Gerar URLs para todos os documentos const urls: Record = {}; const campos = [ "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[campo as keyof typeof funcionario] 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); }, });