private void CriarParametrosEHEader(ComunicadoInserirAeDto comunicado, out string parametros, out StringContent input)
 {
     httpClient.DefaultRequestHeaders.Clear();
     parametros = JsonConvert.SerializeObject(comunicado);
     input      = new StringContent(parametros, Encoding.UTF8, "application/json");
     input.Headers.Add("x-integration-key", configuration.GetSection("AE_ChaveIntegracao").Value);
 }
        public async Task <string> Alterar(long id, ComunicadoInserirDto comunicadoDto)
        {
            Comunicado comunicado = BuscarComunicado(id);

            ComunicadoInserirAeDto comunicadoServico = new ComunicadoInserirAeDto();

            var usuarioLogado = (await servicoUsuario.ObterUsuarioLogado())
                                ?? throw new NegocioException("Usuário logado não encontrado");

            await ValidarAbrangenciaUsuario(comunicadoDto, usuarioLogado);

            MapearAlteracao(comunicadoDto, comunicado);

            try
            {
                unitOfWork.IniciarTransacao();

                await repositorio.SalvarAsync(comunicado);

                MapearParaEntidadeServico(comunicadoServico, comunicado);

                await servicoAcompanhamentoEscolar.AlterarComunicado(comunicadoServico, id);

                unitOfWork.PersistirTransacao();
            }
            catch
            {
                unitOfWork.Rollback();
                throw;
            }

            return("Comunicado alterado com sucesso");
        }
        public async Task <string> Handle(SolicitarAlteracaoComunicadoEscolaAquiCommand request, CancellationToken cancellationToken)
        {
            // TODO: Criar Query Handler para Obter comunicado
            Comunicado comunicado = BuscarComunicado(request.Id);

            ComunicadoInserirAeDto comunicadoServico = new ComunicadoInserirAeDto();

            var usuarioLogado = await _mediator.Send(new ObterUsuarioLogadoQuery());

            await ValidarAbrangenciaUsuario(request, usuarioLogado);

            MapearAlteracao(request, comunicado);

            try
            {
                _unitOfWork.IniciarTransacao();

                await _repositorioComunicado.SalvarAsync(comunicado);

                MapearParaEntidadeServico(comunicadoServico, comunicado);

                await _servicoAcompanhamentoEscolar.AlterarComunicado(comunicadoServico, request.Id);

                _unitOfWork.PersistirTransacao();
            }
            catch
            {
                _unitOfWork.Rollback();
                throw;
            }

            return("Comunicado alterado com sucesso");
        }
        public async Task CriarComunicado(ComunicadoInserirAeDto comunicado)
        {
            CriarParametrosEHEader(comunicado, out string parametros, out StringContent input);

            using (var resposta = await httpClient.PostAsync("v1/notificacao", input))
            {
                if (!resposta.IsSuccessStatusCode)
                {
                    await RegistrarLogSentryAsync(resposta, "criar comunicado", parametros.ToString());

                    throw new NegocioException("Não foi possível alterar os dados no aplicativo do aluno");
                }
            }
        }
        public async Task <string> Handle(SolicitarInclusaoComunicadoEscolaAquiCommand request, CancellationToken cancellationToken)
        {
            var comunicado        = new Comunicado();
            var comunicadoServico = new ComunicadoInserirAeDto();

            await ValidarInsercao(request);

            MapearParaEntidade(request, comunicado);

            try
            {
                _unitOfWork.IniciarTransacao();

                var id = await _repositorioComunicado.SalvarAsync(comunicado);

                // Grupos
                await SalvarComunicadosParaGrupos(id, request);

                comunicado.AtualizarIdAlunos();
                comunicado.AtualizarIdTurmas();

                // Turmas
                await SalvarComunicadosParaTurmas(comunicado.Turmas);

                // Alunos
                await SalvarComunicadosParaAlunos(comunicado.Alunos);

                MapearParaEntidadeServico(comunicadoServico, comunicado);

                // Criar comunicado no Escola Aqui
                await _servicoAcompanhamentoEscolar.CriarComunicado(comunicadoServico);

                _unitOfWork.PersistirTransacao();
            }
            catch
            {
                _unitOfWork.Rollback();
                throw;
            }

            return("Comunicado criado com sucesso!");
        }
 private void MapearParaEntidadeServico(ComunicadoInserirAeDto comunicadoServico, Comunicado comunicado)
 {
     comunicadoServico.Id             = comunicado.Id;
     comunicadoServico.AlteradoEm     = comunicado.AlteradoEm;
     comunicadoServico.AlteradoPor    = comunicado.AlteradoPor;
     comunicadoServico.AlteradoRF     = comunicado.AlteradoRF;
     comunicadoServico.DataEnvio      = comunicado.DataEnvio;
     comunicadoServico.DataExpiracao  = comunicado.DataExpiracao;
     comunicadoServico.Mensagem       = comunicado.Descricao;
     comunicadoServico.Titulo         = comunicado.Titulo;
     comunicadoServico.Grupo          = string.Join(",", comunicado.Grupos.Select(x => x.Id.ToString()).ToArray());
     comunicadoServico.CriadoEm       = comunicado.CriadoEm;
     comunicadoServico.CriadoPor      = comunicado.CriadoPor;
     comunicadoServico.CriadoRF       = comunicado.CriadoRF;
     comunicadoServico.Alunos         = comunicado.Alunos.Select(x => x.AlunoCodigo);
     comunicadoServico.AnoLetivo      = comunicado.AnoLetivo;
     comunicadoServico.CodigoDre      = comunicado.CodigoDre;
     comunicadoServico.CodigoUe       = comunicado.CodigoUe;
     comunicadoServico.Turmas         = comunicado.Turmas.Select(x => x.CodigoTurma);
     comunicadoServico.TipoComunicado = comunicado.TipoComunicado;
     comunicadoServico.Semestre       = comunicado.Semestre;
 }
        public async Task <string> Inserir(ComunicadoInserirDto comunicadoDto)
        {
            Comunicado             comunicado        = new Comunicado();
            ComunicadoInserirAeDto comunicadoServico = new ComunicadoInserirAeDto();

            await ValidarInsercao(comunicadoDto);

            MapearParaEntidade(comunicadoDto, comunicado);

            try
            {
                unitOfWork.IniciarTransacao();

                var id = await repositorio.SalvarAsync(comunicado);

                await SalvarGrupos(id, comunicadoDto);

                comunicado.AtualizarIdAlunos();

                comunicado.AtualizarIdTurmas();

                await SalvarTurmas(comunicado.Turmas);

                await SalvarAlunos(comunicado.Alunos);

                MapearParaEntidadeServico(comunicadoServico, comunicado);

                await servicoAcompanhamentoEscolar.CriarComunicado(comunicadoServico);

                unitOfWork.PersistirTransacao();
            }
            catch
            {
                unitOfWork.Rollback();
                throw;
            }

            return("Comunicado criado com sucesso");
        }