public async Task <DomainValidationResult <IChallenge> > DeleteChallengeAsync(IChallenge challenge, CancellationToken cancellationToken = default) { var result = new DomainValidationResult <IChallenge>(); if (!challenge.CanDelete()) { result.AddFailedPreconditionError("Challenge can't be deleted."); } if (result.IsValid) { _challengeRepository.Delete(challenge); await _challengeRepository.CommitAsync(true, cancellationToken); return(challenge.Cast <Challenge>()); } return(result); }