Exemple #1
0
        public void Handle(IncluirEventoCommand cmd)
        {
            var cidade   = new Cidade(cmd.Endereco.Cidade.Id, cmd.Endereco.Cidade.Nome, cmd.Endereco.Cidade.EstadoId);
            var endereco = new Endereco(cmd.Endereco.Id, cmd.Endereco.Logradouro, cmd.Endereco.Numero, cmd.Endereco.Complemento, StringHelper.RemoverCaracteresEspeciais(cmd.Endereco.Cep), cmd.Endereco.Bairro, cidade);
            var evento   = new Evento(cmd.Id, cmd.Nome, cmd.Descricao, cmd.SubDescricao, cmd.DescPatrocinadores,
                                      cmd.DataHoraInicio, cmd.DataHoraFim, "C", cmd.CategoriaId, cmd.EmpresaId, endereco);

            if (!evento.IsValid())
            {
                NotificarValidacoesErro(evento.ValidationResult);
                return;
            }

            if (cmd.Ingressos == null ||
                cmd.Ingressos.Count() == 0)
            {
                _mediator.PublicarEvento(new DomainNotification(cmd.MessageType, "Ingressos não encontrado."));
                return;
            }

            if (cmd.Atracoes == null ||
                cmd.Atracoes.Count() == 0)
            {
                _mediator.PublicarEvento(new DomainNotification(cmd.MessageType, "Atrações não encontradas."));
                return;
            }

            _eventoRepository.Adicionar(evento);

            foreach (var ingresso in cmd.Ingressos)
            {
                var ing = new Ingresso(ingresso.Id, ingresso.Preco, ingresso.Tipo, ingresso.Lote, evento.Id);

                if (!ing.IsValid())
                {
                    NotificarValidacoesErro(ing.ValidationResult);
                    return;
                }

                _eventoRepository.IncluirIngresso(ing);
            }

            foreach (var atracao in cmd.Atracoes)
            {
                var atracaoObj = new Atracao(atracao.Id, atracao.Nome, atracao.Estilo);

                if (!atracaoObj.IsValid())
                {
                    NotificarValidacoesErro(atracaoObj.ValidationResult);
                    return;
                }
                _eventoRepository.IncluirAtracao(atracaoObj);
                _eventoRepository.IncluirAtracaoEvento(new AtracaoEvento(atracaoObj.Id, evento.Id));
            }

            foreach (var foto in cmd.Fotos)
            {
                Foto fotoBanco = _eventoRepository.BuscarFotoPorId(foto.Id);
                fotoBanco.AtribuirEventoId(evento.Id);
                _eventoRepository.AtualizarFoto(fotoBanco);
            }

            if (Commit())
            {
                _mediator.PublicarEvento(new EventoAdicionadoEvent(evento.Id, evento.Nome, evento.Descricao, evento.SubDescricao, evento.DescPatrocinadores, evento.DataHoraInicio, evento.DataHoraFim, evento.Situacao));
            }
        }