Example #1
0
    /// <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));
    }
Example #2
0
    /// <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));
    }