Ejemplo n.º 1
0
        public async Task <bool> Matricular(Cliente cliente, Guid planoId)
        {
            if (!cliente.EhValido())
            {
                Notificar(cliente.ValidationResult);

                return(false);
            }

            if (await ClienteMatriculado(cliente))
            {
                Notificar("Cliente já matriculado !");
                return(false);
            }

            var planoDesconto = await _planoRepository.ObterDescontoPlano(planoId);

            if (planoDesconto == null)
            {
                Notificar("Plano sem desconto associado");
                return(false);
            }

            cliente.AdicionarContrato(new Contrato(planoDesconto));

            var hash = _passwordHash.GetHashPassword(cliente.Usuario.Senha);

            cliente.Usuario.AdicionarHashSenha(hash);

            if (await _clienteRepository.Adicionar(cliente))
            {
                await _mediator.PublicarEvento(
                    new CodigoConfirmacaoEvent(cliente.Usuario.Id, cliente.Email.Endereco, cliente.Nome));
            }

            return(true);
        }