feat: add mutation to exclude absence requests and enhance point registration by blocking entries during approved absences
This commit is contained in:
@@ -922,3 +922,48 @@ export const marcarComoLida = mutation({
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
// Mutation: Excluir solicitação de ausência
|
||||
export const excluirSolicitacao = mutation({
|
||||
args: {
|
||||
solicitacaoId: v.id('solicitacoesAusencias'),
|
||||
usuarioId: v.id('usuarios')
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
await ctx.runQuery(internal.permissoesAcoes.assertPermissaoAcaoAtual, {
|
||||
recurso: 'ausencias',
|
||||
acao: 'reprovar'
|
||||
});
|
||||
|
||||
const solicitacao = await ctx.db.get(args.solicitacaoId);
|
||||
if (!solicitacao) {
|
||||
throw new Error('Solicitação não encontrada');
|
||||
}
|
||||
|
||||
// Apenas solicitações ainda não processadas podem ser excluídas
|
||||
if (solicitacao.status !== 'aguardando_aprovacao') {
|
||||
throw new Error('Apenas solicitações pendentes podem ser excluídas');
|
||||
}
|
||||
|
||||
// Verificar se o usuário é o criador original da solicitação
|
||||
const usuario = await ctx.db.get(args.usuarioId);
|
||||
if (!usuario) {
|
||||
throw new Error('Usuário não encontrado');
|
||||
}
|
||||
|
||||
const usuarioEhFuncionario = usuario.funcionarioId === solicitacao.funcionarioId;
|
||||
const gestorIdDoFuncionario = await encontrarGestorDoFuncionario(
|
||||
ctx,
|
||||
solicitacao.funcionarioId
|
||||
);
|
||||
const usuarioEhGestor = gestorIdDoFuncionario === args.usuarioId;
|
||||
|
||||
if (!usuarioEhFuncionario && !usuarioEhGestor) {
|
||||
throw new Error('Você não tem permissão para excluir esta solicitação');
|
||||
}
|
||||
|
||||
await ctx.db.delete(args.solicitacaoId);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user