public void WhenUserProfileSendFriendRequestToUserProfile(string fromUserprofileId, string toUserProfileId) { var mockFriendRequestRepo = ScenarioContext.Current.Get <Mock <IFriendRequestRepository> >(); mockFriendRequestRepo.Setup(it => it.UpsertFriendRequest(It.IsAny <FriendRequest>())); var friendCtrl = ScenarioContext.Current.Get <FriendController>(); var body = new SendFriendRequest { FromUserProfileId = fromUserprofileId, ToUserProfileId = toUserProfileId, }; friendCtrl.Post(body); }
public void Post(SendFriendRequest body) { var areArgumentsValid = body != null && !string.IsNullOrEmpty(body.FromUserProfileId) && !string.IsNullOrEmpty(body.ToUserProfileId); if (!areArgumentsValid) { return; } var requestUserProfileIds = new List <string> { body.FromUserProfileId, body.ToUserProfileId }; var relatedUserProfiles = _userprofileRepo.GetUserProfileById(requestUserProfileIds); var usersExisting = relatedUserProfiles.Count() == requestUserProfileIds.Count(); if (!usersExisting) { return; } var requests = _friendRequestRepo.GetFriendRequestByUserProfileId(body.FromUserProfileId) .Where(it => it.ToUserProfileId.Equals(body.ToUserProfileId)) .ToList(); var currentStatus = requests.OrderByDescending(it => it.CreatedDate).FirstOrDefault(); var isRequestValid = currentStatus == null?string.IsNullOrEmpty(body.RequestId) : currentStatus.id.Equals(body.RequestId); if (!isRequestValid) { return; } var now = _dateTime.GetCurrentTime(); var isNewFriendRequest = currentStatus == null; if (isNewFriendRequest) { requests.ForEach(it => it.DeletedDate = now); var newRequestFrom = new FriendRequest { id = Guid.NewGuid().ToString(), CreatedDate = now, FromUserProfileId = body.FromUserProfileId, ToUserProfileId = body.ToUserProfileId, Status = FriendRequest.RelationStatus.SendRequest }; requests.Add(newRequestFrom); var newRequestTo = new FriendRequest { id = Guid.NewGuid().ToString(), CreatedDate = now, FromUserProfileId = body.ToUserProfileId, ToUserProfileId = body.FromUserProfileId, Status = FriendRequest.RelationStatus.ReceiveRequest }; requests.Add(newRequestTo); requests.ForEach(it => _friendRequestRepo.UpsertFriendRequest(it)); } else { var isRequestInvalid = currentStatus.Status == FriendRequest.RelationStatus.SendRequest && body.IsAccept; if (isRequestInvalid) { return; } var friendSideRequest = _friendRequestRepo.GetFriendRequestByUserProfileId(body.ToUserProfileId) .Where(it => it.ToUserProfileId.Equals(body.FromUserProfileId)) .ToList(); var currentFriendSideStatus = friendSideRequest.OrderByDescending(it => it.CreatedDate).FirstOrDefault(); var fRequests = friendSideRequest.Except(new List <FriendRequest> { currentFriendSideStatus }); foreach (var item in fRequests) { item.DeletedDate = now; } if (body.IsAccept) { currentStatus.AcceptedDate = now; currentStatus.Status = FriendRequest.RelationStatus.Friend; currentFriendSideStatus.AcceptedDate = now; currentFriendSideStatus.Status = FriendRequest.RelationStatus.Friend; } else { currentStatus.DeletedDate = now; currentStatus.Status = FriendRequest.RelationStatus.Unfriend; currentFriendSideStatus.DeletedDate = now; currentFriendSideStatus.Status = FriendRequest.RelationStatus.Unfriend; } friendSideRequest.Add(currentStatus); friendSideRequest.ForEach(it => _friendRequestRepo.UpsertFriendRequest(it)); } }
/*==========================================================================*/ /* var */ /*==========================================================================*/ /*==========================================================================*/ /* prototype */ /*==========================================================================*/ /*==========================================================================*/ /* func */ /*==========================================================================*/ //---------------------------------------------------------------------------- /*! * @brief APIパケット送信リトライ: * @note この処理は通信の結果「端末とサーバーの関連切れてるからユーザー認証しなおしてね」が発生した際に送りなおすことに特化している。 * 再送元のパケットは一度サーバーに届いて正式に拒否られているので、パケットユニークIDを別にしてから再度送りなおすことで受理を期待する */ //---------------------------------------------------------------------------- static public uint SendPacketAPIRetry(SERVER_API eAPIType, string strAPIData, uint unPacketUniqueID) { #if true //------------------------- // 再送時にパケットにユニークIDを変えない方がサーバー側が対応しやすいらしい。 // そのまま前に送ったものをもう一度送る形で対応する //------------------------- Debug.LogError("Packet Retry - " + eAPIType); #else //------------------------- // 再送時にはヘッダのパケットユニークIDだけを更新してから送る //------------------------- PacketStructHeaderSend cSendHeader = ServerDataUtilSend.CreateStructHeader(); switch (eAPIType) { //------------------------- // APIタイプ:ユーザー管理:ユーザー新規生成 //------------------------- case SERVER_API.SERVER_API_USER_CREATE: { SendCreateUser cSendPacket = JsonMapper.ToObject <SendCreateUser>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユーザー管理:ユーザー承認 //------------------------- case SERVER_API.SERVER_API_USER_AUTHENTICATION: { SendUserAuthentication cSendPacket = JsonMapper.ToObject <SendUserAuthentication>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユーザー管理:ユーザー名称変更 //------------------------- case SERVER_API.SERVER_API_USER_RENAME: { SendRenameUser cSendPacket = JsonMapper.ToObject <SendRenameUser>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユーザー管理:ユーザー初期設定 //------------------------- case SERVER_API.SERVER_API_USER_SELECT_DEF_PARTY: { SendSelectDefParty cSendPacket = JsonMapper.ToObject <SendSelectDefParty>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユーザー管理:ユーザー再構築 //------------------------- case SERVER_API.SERVER_API_USER_RENEW: { SendRenewUser cSendPacket = JsonMapper.ToObject <SendRenewUser>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:マスターデータ操作:マスターデータ実体取得(全種) //------------------------- case SERVER_API.SERVER_API_MASTER_DATA_GET_ALL: { SendGetMasterDataAll cSendPacket = JsonMapper.ToObject <SendGetMasterDataAll>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ログイン情報:ログインパック情報取得 //------------------------- case SERVER_API.SERVER_API_GET_LOGIN_PACK: { SendLoginPack cSendPacket = JsonMapper.ToObject <SendLoginPack>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ログイン情報:ログイン情報取得 //------------------------- case SERVER_API.SERVER_API_GET_LOGIN_PARAM: { SendLoginParam cSendPacket = JsonMapper.ToObject <SendLoginParam>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:フレンド操作:フレンド一覧取得 //------------------------- case SERVER_API.SERVER_API_FRIEND_LIST_GET: { SendFriendListGet cSendPacket = JsonMapper.ToObject <SendFriendListGet>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:フレンド操作:フレンド申請 //------------------------- case SERVER_API.SERVER_API_FRIEND_REQUEST: { SendFriendRequest cSendPacket = JsonMapper.ToObject <SendFriendRequest>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:フレンド操作:フレンド申請承認 //------------------------- case SERVER_API.SERVER_API_FRIEND_CONSENT: { SendFriendConsent cSendPacket = JsonMapper.ToObject <SendFriendConsent>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:フレンド操作:フレンド解除 //------------------------- case SERVER_API.SERVER_API_FRIEND_REFUSAL: { SendFriendRefusal cSendPacket = JsonMapper.ToObject <SendFriendRefusal>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:フレンド操作:フレンドユーザー検索 //------------------------- case SERVER_API.SERVER_API_FRIEND_SEARCH: { SendFriendSearch cSendPacket = JsonMapper.ToObject <SendFriendSearch>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユニット操作:ユニットパーティ編成設定 //------------------------- case SERVER_API.SERVER_API_UNIT_PARTY_ASSIGN: { SendUnitPartyAssign cSendPacket = JsonMapper.ToObject <SendUnitPartyAssign>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユニット操作:ユニット売却 //------------------------- case SERVER_API.SERVER_API_UNIT_SALE: { SendUnitSale cSendPacket = JsonMapper.ToObject <SendUnitSale>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユニット操作:ユニット強化合成 //------------------------- case SERVER_API.SERVER_API_UNIT_BLEND_BUILDUP: { SendUnitBlendBuildUp cSendPacket = JsonMapper.ToObject <SendUnitBlendBuildUp>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユニット操作:ユニット進化合成 //------------------------- case SERVER_API.SERVER_API_UNIT_BLEND_EVOL: { SendUnitBlendEvol cSendPacket = JsonMapper.ToObject <SendUnitBlendEvol>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:助っ人一覧取得 //------------------------- case SERVER_API.SERVER_API_QUEST_HELPER_GET: { SendQuestHelperGet cSendPacket = JsonMapper.ToObject <SendQuestHelperGet>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:助っ人一覧取得(進化合成用) //------------------------- case SERVER_API.SERVER_API_QUEST_HELPER_GET_EVOL: { SendQuestHelperGetEvol cSendPacket = JsonMapper.ToObject <SendQuestHelperGetEvol>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:助っ人一覧取得(強化合成用) //------------------------- case SERVER_API.SERVER_API_QUEST_HELPER_GET_BUILD: { SendQuestHelperGetBuild cSendPacket = JsonMapper.ToObject <SendQuestHelperGetBuild>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:クエスト開始 //------------------------- case SERVER_API.SERVER_API_QUEST_START: { SendQuestStart cSendPacket = JsonMapper.ToObject <SendQuestStart>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:クエストクリア //------------------------- case SERVER_API.SERVER_API_QUEST_CLEAR: { SendQuestClear cSendPacket = JsonMapper.ToObject <SendQuestClear>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- //------------------------- // APIタイプ:クエスト操作:クエストリタイア //------------------------- //------------------------- case SERVER_API.SERVER_API_QUEST_RETIRE: { SendQuestRetire cSendPacket = JsonMapper.ToObject <SendQuestRetire>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:クエスト受託情報取得 //------------------------- case SERVER_API.SERVER_API_QUEST_ORDER_GET: { SendQuestOrderGet cSendPacket = JsonMapper.ToObject <SendQuestOrderGet>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:インゲーム中:コンティニュー //------------------------- case SERVER_API.SERVER_API_QUEST_CONTINUE: { SendQuestContinue cSendPacket = JsonMapper.ToObject <SendQuestContinue>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:インゲーム中:リセット //------------------------- case SERVER_API.SERVER_API_QUEST_RESET: { SendQuestReset cSendPacket = JsonMapper.ToObject <SendQuestReset>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:進化クエスト開始 //------------------------- case SERVER_API.SERVER_API_EVOL_QUEST_START: { SendEvolQuestStart cSendPacket = JsonMapper.ToObject <SendEvolQuestStart>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:クエスト操作:進化クエストクリア //------------------------- case SERVER_API.SERVER_API_EVOL_QUEST_CLEAR: { SendEvolQuestClear cSendPacket = JsonMapper.ToObject <SendEvolQuestClear>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:不正検出関連:不正検出送信 //------------------------- case SERVER_API.SERVER_API_INJUSTICE: { SendInjustice cSendPacket = JsonMapper.ToObject <SendInjustice>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- //------------------------- //------------------------- // APIタイプ:チュートリアル関連:進行集計 //------------------------- case SERVER_API.SERVER_API_TUTORIAL: { SendTutorialStep cSendPacket = JsonMapper.ToObject <SendTutorialStep>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:魔法石使用:ユニット枠増設 //------------------------- case SERVER_API.SERVER_API_STONE_USE_UNIT: { SendStoneUsedUnit cSendPacket = JsonMapper.ToObject <SendStoneUsedUnit>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:魔法石使用:フレンド枠増設 //------------------------- case SERVER_API.SERVER_API_STONE_USE_FRIEND: { SendStoneUsedFriend cSendPacket = JsonMapper.ToObject <SendStoneUsedFriend>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:魔法石使用:スタミナ回復 //------------------------- case SERVER_API.SERVER_API_STONE_USE_STAMINA: { SendStoneUsedStamina cSendPacket = JsonMapper.ToObject <SendStoneUsedStamina>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ガチャ操作:ガチャ実行 //------------------------- case SERVER_API.SERVER_API_GACHA_PLAY: { SendGachaPlay cSendPacket = JsonMapper.ToObject <SendGachaPlay>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:課金操作:魔法石購入直前処理( iOS … AppStore ) //------------------------- case SERVER_API.SERVER_API_STONE_PAY_PREV_IOS: { SendStorePayPrev_ios cSendPacket = JsonMapper.ToObject <SendStorePayPrev_ios>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:課金操作:魔法石購入直前処理( Android … GooglePlay ) //------------------------- case SERVER_API.SERVER_API_STONE_PAY_PREV_ANDROID: { SendStorePayPrev_android cSendPacket = JsonMapper.ToObject <SendStorePayPrev_android>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:課金操作:魔法石購入反映処理( iOS … AppStore ) //------------------------- case SERVER_API.SERVER_API_STONE_PAY_IOS: { SendStorePay_ios cSendPacket = JsonMapper.ToObject <SendStorePay_ios>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:課金操作:魔法石購入反映処理( Android … GooglePlay ) //------------------------- case SERVER_API.SERVER_API_STONE_PAY_ANDROID: { SendStorePay_android cSendPacket = JsonMapper.ToObject <SendStorePay_android>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:ユーザーレビュー関連:レビュー遷移報酬 //------------------------- case SERVER_API.SERVER_API_REVIEW_PRESENT: { SendReviewPresent cSendPacket = JsonMapper.ToObject <SendReviewPresent>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:プレゼント関連:プレゼント一覧取得 //------------------------- case SERVER_API.SERVER_API_PRESENT_LIST_GET: { SendPresentListGet cSendPacket = JsonMapper.ToObject <SendPresentListGet>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:プレゼント関連:プレゼント開封 //------------------------- case SERVER_API.SERVER_API_PRESENT_OPEN: { SendPresentOpen cSendPacket = JsonMapper.ToObject <SendPresentOpen>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:デバッグ機能関連:ユーザーランクアップ //------------------------- #if BUILD_TYPE_DEBUG case SERVER_API.SERVER_API_DEBUG_RANKUP: { SendDebugUserRankUp cSendPacket = JsonMapper.ToObject <SendDebugUserRankUp>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; #endif //------------------------- // APIタイプ:デバッグ機能関連:ユニット取得 //------------------------- #if BUILD_TYPE_DEBUG case SERVER_API.SERVER_API_DEBUG_UNIT_GET: { SendDebugUnitGet cSendPacket = JsonMapper.ToObject <SendDebugUnitGet>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; //------------------------- // APIタイプ:デバッグ機能関連:クエストクリア情報改変 //------------------------- #endif #if BUILD_TYPE_DEBUG case SERVER_API.SERVER_API_DEBUG_QUEST_CLEAR: { SendDebugQuestClear cSendPacket = JsonMapper.ToObject <SendDebugQuestClear>(strAPIData); cSendPacket.header = cSendHeader; strAPIData = JsonMapper.ToJson(cSendPacket); } break; #endif //------------------------- // //------------------------- } #endif //-------------------------------- // API送信リクエスト発行 //-------------------------------- return(ServerDataManager.Instance.AddCommunicateRequest( eAPIType , strAPIData , unPacketUniqueID )); }