public async Task <BaseResult> Handle(AdicionarAlunoCommand command, CancellationToken cancellationToken) { if (!command.Validar()) { return(command.BaseResult); } var alunoExistente = await _alunoRepository.ObterPorCpfAsync(command.Cpf); if (alunoExistente != null) { AdicionarErro("Este CPF já está em uso por outro aluno!"); return(BaseResult); } var aluno = new Aluno(command.Nome, command.DataNascimento, command.Rg, command.Cpf, command.Observacao, command.TurmaId); var endereco = new Endereco(command.Endereco.Logradouro, command.Endereco.Numero, command.Endereco.Complemento, command.Endereco.Bairro, command.Endereco.Cep, command.Endereco.Cidade, command.Endereco.Estado); var responsaveis = command.Responsaveis.Select(r => new Responsavel(r.Nome, r.DataNascimento, r.Rg, r.Cpf, r.Telefone, r.Celular, r.Email, r.Observacao)).ToList(); var alunoResponsavel = new List <AlunoResponsavel>(); foreach (var item in responsaveis) { alunoResponsavel.Add(new AlunoResponsavel(aluno, item)); } aluno.AtribuirEndereco(endereco); aluno.AtribuirResponsaveis(alunoResponsavel); _alunoRepository.Adicionar(aluno); await _alunoRepository.SalvarAsync(); BaseResult.id = aluno.Id; return(BaseResult); }