public async Task <AuditoriaDto> Handle(AlterarDocumentoCommand request, CancellationToken cancellationToken) { unitOfWork.IniciarTransacao(); try { long arquivoAntigoId = 0; var documento = await mediator.Send(new ObterDocumentoPorIdQuery(request.DocumentoId)); if (documento == null) { throw new NegocioException("Documento informado não existe"); } var arquivo = await mediator.Send(new ObterArquivoPorCodigoQuery(request.CodigoArquivo)); if (arquivo == null) { throw new NegocioException($"O código de arquivo informado não foi encontrado!"); } if (documento.ArquivoId != null) { arquivoAntigoId = documento.ArquivoId.GetValueOrDefault(); } documento.ArquivoId = arquivo.Id; if (arquivoAntigoId != 0) { var arquivoAntigo = await mediator.Send(new ObterArquivoPorIdQuery(arquivoAntigoId)); if (arquivoAntigo != null) { await mediator.Send(new ExcluirReferenciaArquivoDocumentoPorArquivoIdCommand(documento.Id, arquivoAntigo.Id)); await mediator.Send(new ExcluirArquivoRepositorioPorIdCommand(arquivoAntigo.Id)); await mediator.Send(new ExcluirArquivoFisicoCommand(arquivoAntigo.Codigo, arquivoAntigo.Tipo, arquivoAntigo.Nome)); } } await repositorioDocumento.SalvarAsync(documento); unitOfWork.PersistirTransacao(); return((AuditoriaDto)documento); } catch (Exception ex) { unitOfWork.Rollback(); throw; } }
public async Task <bool> Handle(SalvarDocumentoCommand request, CancellationToken cancellationToken) { var arquivo = await mediator.Send(new ObterArquivoPorCodigoQuery(request.SalvarDocumentoDto.ArquivoCodigo)); if (arquivo == null) { throw new NegocioException("Não foi encontrado um arquivo com este código"); } var existeArquivo = await mediator.Send(new VerificaUsuarioPossuiArquivoQuery(request.SalvarDocumentoDto.TipoDocumentoId, request.SalvarDocumentoDto.ClassificacaoId, request.SalvarDocumentoDto.UsuarioId, request.SalvarDocumentoDto.UeId)); if (existeArquivo) { throw new NegocioException("Este usuário já possui um arquivo"); } if (request.SalvarDocumentoDto.TipoDocumentoId == 1) { var usuario = await mediator.Send(new ObterUsuarioPorIdQuery(request.SalvarDocumentoDto.UsuarioId)); var tiposDocumentos = await mediator.Send(new ObterTipoDocumentoClassificacaoQuery()); var classificacao = tiposDocumentos.FirstOrDefault(t => t.Id == request.SalvarDocumentoDto.TipoDocumentoId).Classificacoes.FirstOrDefault(c => c.Id == request.SalvarDocumentoDto.ClassificacaoId); if (!usuario.Perfis.Where(u => u.NomePerfil == classificacao.Classificacao).Any()) { throw new NegocioException("O usuário vinculado a este documento não possui o perfil que corresponde ao tipo de plano selecionado."); } } if (await mediator.Send(new ValidarTipoDocumentoDaClassificacaoQuery(request.SalvarDocumentoDto.ClassificacaoId, Dominio.Enumerados.TipoDocumento.PlanoTrabalho)) && await mediator.Send(new ValidarUeEducacaoInfantilQuery(request.SalvarDocumentoDto.UeId))) { throw new NegocioException("Escolas de educação infantíl não podem fazer upload de Plano de Trabalho!"); } var documento = new Documento() { ClassificacaoDocumentoId = request.SalvarDocumentoDto.ClassificacaoId, UsuarioId = request.SalvarDocumentoDto.UsuarioId, UeId = request.SalvarDocumentoDto.UeId, ArquivoId = arquivo.Id, AnoLetivo = request.SalvarDocumentoDto.AnoLetivo }; await repositorioDocumento.SalvarAsync(documento); return(true); }