public CreateCharacterFriendCommandHandler(
     ICharacterFriendRepository characterFriendRepository,
     IMapper mapper)
 {
     _characterFriendRepository = characterFriendRepository;
     _mapper = mapper;
 }
コード例 #2
0
        public async Task <IActionResult> GetCharacterFriends([FromServices][JetBrains.Annotations.NotNull] ICharacterFriendRepository friendsRepository,
                                                              [FromServices][JetBrains.Annotations.NotNull] ISocialServiceToGameServiceClient socialServiceClient)
        {
            if (friendsRepository == null)
            {
                throw new ArgumentNullException(nameof(friendsRepository));
            }
            if (socialServiceClient == null)
            {
                throw new ArgumentNullException(nameof(socialServiceClient));
            }

            //Find the character
            CharacterSessionDataResponse response = await socialServiceClient.GetCharacterSessionDataByAccount(ClaimsReader.GetAccountIdInt(User));

            if (response.ResultCode == CharacterSessionDataResponseCode.NoSessionAvailable)
            {
                return(Json(new CharacterFriendListResponseModel(Array.Empty <int>())));
            }

            int[] friendsCharacterIds = await friendsRepository.GetCharactersFriendsList(response.CharacterId);

            return(Json(new CharacterFriendListResponseModel(friendsCharacterIds)));
        }
コード例 #3
0
        public async Task <IActionResult> TryAddFriend([FromRoute(Name = "name")][JetBrains.Annotations.NotNull] string characterFriendName,
                                                       [FromServices][JetBrains.Annotations.NotNull] ICharacterFriendRepository friendsRepository,
                                                       [FromServices][JetBrains.Annotations.NotNull] ISocialServiceToGameServiceClient socialServiceClient,
                                                       [FromServices] INameQueryService nameQueryService)
        {
            if (friendsRepository == null)
            {
                throw new ArgumentNullException(nameof(friendsRepository));
            }
            if (socialServiceClient == null)
            {
                throw new ArgumentNullException(nameof(socialServiceClient));
            }
            if (string.IsNullOrEmpty(characterFriendName))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(characterFriendName));
            }

            //Find the character
            CharacterSessionDataResponse response = await socialServiceClient.GetCharacterSessionDataByAccount(ClaimsReader.GetAccountIdInt(User));

            if (response.ResultCode == CharacterSessionDataResponseCode.NoSessionAvailable)
            {
                return(BadRequest());
            }

            var nameReverseQueryResponse = await nameQueryService.RetrievePlayerGuidAsync(characterFriendName);

            //Handle known failure cases first.
            switch (nameReverseQueryResponse.ResultCode)
            {
            case NameQueryResponseCode.UnknownIdError:
                return(BuildFailedResponseModel(CharacterFriendAddResponseCode.CharacterNotFound));

            case NameQueryResponseCode.GeneralServerError:
                return(BuildFailedResponseModel(CharacterFriendAddResponseCode.GeneralServerError));
            }

            //If the player is trying to add himself, just say not found
            if (nameReverseQueryResponse.Result.EntityId == response.CharacterId)
            {
                return(BuildFailedResponseModel(CharacterFriendAddResponseCode.CharacterNotFound));
            }

            //Ok, reverse namequery is a success
            //now we must check some stuff

            //Already friends check
            if (await friendsRepository.IsFriendshipPresentAsync(response.CharacterId, nameReverseQueryResponse.Result.EntityId))
            {
                return(BuildFailedResponseModel(CharacterFriendAddResponseCode.AlreadyFriends));
            }

            if (await friendsRepository.TryCreateAsync(new CharacterFriendModel(response.CharacterId, nameReverseQueryResponse.Result.EntityId)))
            {
                //This is a success, let's tell them about who they added.
                return(BuildSuccessfulResponseModel(new CharacterFriendAddResponseModel(nameReverseQueryResponse.Result)));
            }
            else
            {
                return(BuildFailedResponseModel(CharacterFriendAddResponseCode.GeneralServerError));
            }
        }