public IComandoResultado Manipulador(ComandoCriarAssinaturaBoleto comando) { // Fail Fast Validate comando.Validar(); if (comando.Invalid) { AddNotifications(comando); return(new ComandoResultado(false, "Não foi possível realizar sua assinatura", comando)); } // Verificar se Documento já esta Cadastrado if (_alunoRepositorio.DocumentoExiste(comando.Documento)) { AddNotification("Documento", "Este documento já está em uso!"); } // Verificar se Email ja esta cadastrado if (_alunoRepositorio.EmailExiste(comando.Documento)) { AddNotification("Email", "Este e-mail já está em uso!"); } // Gerar os VOs (Valor Objeto) var documento = new Documento(comando.Documento, eTipoDocumento.CPF); var email = new Email(comando.Email); var nome = new Nome(comando.PrimeiroNome, comando.Sobrenome); var endereco = new Endereco(comando.Descricao, comando.Numero, comando.Bairro, comando.Cidade, comando.Estado, comando.Pais, comando.Cep); // Gerar Entidades var aluno = new Aluno(nome, documento, email); var assinatura = new Assinatura(DateTime.Now.AddMonths(1)); var pagamento = new PagamentoBoleto( comando.CodigoBarras, comando.NossoNumero, comando.DataPagamento, comando.DataExpiracao, comando.ValorTotal, comando.ValorPago, comando.Pagador, new Documento(comando.PagadorDocumento, comando.PagadorTipoDocumento), endereco, // Endereco correto é do pagador (comando. Informacoes do pagador) email); // Relacionamentos assinatura.AdicionarPagamento(pagamento); aluno.AdicionarAssinatura(assinatura); // Aplicar Validações AddNotifications(nome, documento, email, endereco, aluno, assinatura, pagamento); // Checar Notificacoes if (Invalid) { return(new ComandoResultado(false, "Não foi possível realizar sua assinatura!", aluno)); } // Salvar Informacoes _alunoRepositorio.CriarAssinatura(aluno); // Enviar Email de boas-vindas _emailServico.Enviar(aluno.Nome.ToString(), aluno.Email.Endereco, "Bem Vindo!", "Sua assinatura foi criada!"); // Retornar informacoes return(new ComandoResultado(true, "Assinatura realizada com sucesso!", aluno)); }