/// <summary> /// Tries to add a song director. /// </summary> /// <param name="request">The add song director request.</param> /// <returns>The result of the request.</returns> private async Task <TOutput> TryAddSongDirector(AddSongDirectorRequest request) { // Validate the new song director Result <SongDirector> createSongDirectorResult = SongDirector.TryCreate( request.FullName, request.EmailAddress, request.PhoneNumber, request.RankName, request.IsActive); // Validation failure if (createSongDirectorResult.IsFailed) { return(ValidationFailure(createSongDirectorResult)); } SongDirector songDirector = createSongDirectorResult.Value; // Add the song director Result <SongDirector> addSongDirectorResult = await _songDirectorRepository .TryAddAsync(songDirector) .ConfigureAwait(false); if (addSongDirectorResult.IsFailed) { return(FailedToAddSongDirector(addSongDirectorResult)); } SongDirectorUseCaseModel addedSongDirector = SongDirectorUseCaseModel .GrandmasterView(songDirector); return(SongDirectorAdded(addedSongDirector)); }
/// <inheritdoc/> public async Task <TOutput> HandleAsync(AddSongDirectorRequest request) { // Reference the requester's id string requesterId = request.RequesterId; // Get the requester's rank Result <Rank?> getRequesterSongDirectorRankResult = await _songDirectorRepository .TryFindPropertyByIdAsync <Rank?>(requesterId, nameof(SongDirector.Rank)) .ConfigureAwait(false); // If the requester's rank couldn't be found, return a failure result if (getRequesterSongDirectorRankResult.IsFailed) { return(RequesterRankNotFound(requesterId, getRequesterSongDirectorRankResult)); } Rank?requesterRank = getRequesterSongDirectorRankResult.Value; // Ensure that the requester is a grandmaster if (requesterRank != Rank.Grandmaster) { return(InsufficientPermissions()); } // Return the result of the add attempt return(await TryAddSongDirector(request).ConfigureAwait(false)); }