コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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);
        }