Exemple #1
0
        /// <summary>
        /// 驗證互動指令資料
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <param name="isVerifyInitiator">isVerifyInitiator</param>
        /// <param name="isVerifyReceiver">isVerifyReceiver</param>
        /// <returns>bool</returns>
        private bool VerifyInteractiveCommand(InteractiveCommandDto interactiveCommand, bool isVerifyInitiator, bool isVerifyReceiver)
        {
            if (interactiveCommand == null)
            {
                return(false);
            }

            if (isVerifyInitiator)
            {
                if (string.IsNullOrEmpty(interactiveCommand.InitiatorID))
                {
                    return(false);
                }
            }

            if (isVerifyReceiver)
            {
                if (string.IsNullOrEmpty(interactiveCommand.ReceiverID))
                {
                    return(false);
                }
            }

            return(true);
        }
Exemple #2
0
        /// <summary>
        /// 取得會員互動狀態
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>Tuple(int, string)</returns>
        public async Task <Tuple <int, string> > GetMemberInteractiveStatus(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Get Member Interactive Status Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return(Tuple.Create((int)InteractiveStatusType.None, "取得會員互動狀態失敗."));
                }

                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, false);

                if (receiverInteractiveData != null)
                {
                    if (receiverInteractiveData.BlacklistIDs.Contains(interactiveCommand.InitiatorID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.None, "對方已設該會員為黑名單."));
                    }

                    if (receiverInteractiveData.FriendListIDs.Contains(interactiveCommand.InitiatorID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Friend, string.Empty));
                    }

                    if (receiverInteractiveData.RequestListIDs.Contains(interactiveCommand.InitiatorID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Request, string.Empty));
                    }
                }

                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, true);

                if (initiatorInteractiveData != null)
                {
                    if (initiatorInteractiveData.BlacklistIDs.Contains(interactiveCommand.ReceiverID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Black, string.Empty));
                    }

                    if (initiatorInteractiveData.FriendListIDs.Contains(interactiveCommand.ReceiverID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.Friend, string.Empty));
                    }

                    if (initiatorInteractiveData.RequestListIDs.Contains(interactiveCommand.ReceiverID))
                    {
                        return(Tuple.Create((int)InteractiveStatusType.RequestHandler, string.Empty));
                    }
                }

                return(Tuple.Create((int)InteractiveStatusType.None, string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Member Interactive Status Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return(Tuple.Create((int)InteractiveStatusType.None, "取得會員互動狀態發生錯誤."));
            }
        }
Exemple #3
0
        /// <summary>
        /// 加入黑名單
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>string</returns>
        public async Task <string> AddBlacklist(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Add Blacklist Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return("加入黑名單失敗.");
                }

                //// 處理發起者互動資料
                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, true);

                if (initiatorInteractiveData == null)
                {
                    this.logger.LogError($"Add Blacklist Fail For Get Interactive Data >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return("加入黑名單失敗.");
                }

                bool updateInitiatorBlacklistResult   = this.UpdateListHandler(initiatorInteractiveData.BlacklistIDs, interactiveCommand.ReceiverID, true);
                bool updateInitiatorFriendListResult  = this.UpdateListHandler(initiatorInteractiveData.FriendListIDs, interactiveCommand.ReceiverID, false);
                bool updateInitiatorRequestListResult = this.UpdateListHandler(initiatorInteractiveData.RequestListIDs, interactiveCommand.ReceiverID, false);
                if (updateInitiatorBlacklistResult || updateInitiatorFriendListResult || updateInitiatorRequestListResult)
                {
                    bool initiatorUpdateResult = await this.interactiveRepository.UpdateInteractiveData(initiatorInteractiveData);

                    if (!initiatorUpdateResult)
                    {
                        return("黑名單更新失敗.");
                    }
                }

                //// 處理接收者互動資料
                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, false);

                if (receiverInteractiveData != null)
                {
                    bool updateReceiverFriendListResult  = this.UpdateListHandler(receiverInteractiveData.FriendListIDs, interactiveCommand.InitiatorID, false);
                    bool updateReceiverRequestListResult = this.UpdateListHandler(receiverInteractiveData.RequestListIDs, interactiveCommand.InitiatorID, false);
                    if (updateReceiverFriendListResult || updateReceiverRequestListResult)
                    {
                        bool receiverUpdateResult = await this.interactiveRepository.UpdateInteractiveData(receiverInteractiveData);

                        if (!receiverUpdateResult)
                        {
                            return("黑名單更新失敗.");
                        }
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Add Blacklist Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return("加入黑名單發生錯誤.");
            }
        }
Exemple #4
0
        /// <summary>
        /// 刪除好友
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>string</returns>
        public async Task <string> DeleteFriend(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Delete Friend Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return("刪除好友失敗.");
                }

                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, false);

                if (initiatorInteractiveData == null)
                {
                    this.logger.LogError($"Delete Friend Fail For Get Initiator Interactive Data >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return("刪除好友失敗.");
                }

                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, false);

                if (receiverInteractiveData == null)
                {
                    this.logger.LogError($"Delete Friend Fail For Get Receiver Interactive Data >>> ReceiverID:{interactiveCommand.ReceiverID}");
                    return("刪除好友失敗.");
                }

                //// 更新發起者互動資料
                bool updateInitiatorFriendListResult = this.UpdateListHandler(initiatorInteractiveData.FriendListIDs, interactiveCommand.ReceiverID, false);
                if (updateInitiatorFriendListResult)
                {
                    bool initiatorUpdateResult = await this.interactiveRepository.UpdateFriendList(initiatorInteractiveData.MemberID, initiatorInteractiveData.FriendListIDs);

                    if (!initiatorUpdateResult)
                    {
                        return("好友名單更新失敗.");
                    }
                }

                //// 更新接收者互動資料
                bool updateReceiverFriendListResult = this.UpdateListHandler(receiverInteractiveData.FriendListIDs, interactiveCommand.InitiatorID, false);
                if (updateReceiverFriendListResult)
                {
                    bool receiverUpdateResult = await this.interactiveRepository.UpdateFriendList(receiverInteractiveData.MemberID, receiverInteractiveData.FriendListIDs);

                    if (!receiverUpdateResult)
                    {
                        return("好友名單更新失敗.");
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Delete Friend Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return("刪除好友發生錯誤.");
            }
        }
Exemple #5
0
        /// <summary>
        /// 加入好友請求
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>string</returns>
        public async Task <string> AddFriendRequest(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Add Friend Request Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return("加入好友請求失敗.");
                }

                //// 驗證發送加入好友請求資格
                InteractiveData initiatorInteractiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, true);

                if (initiatorInteractiveData == null)
                {
                    this.logger.LogError($"Add Friend Request Fail For Get Initiator Interactive Data >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return("加入好友請求失敗.");
                }

                InteractiveData receiverInteractiveData = await this.GetInteractiveData(interactiveCommand.ReceiverID, true);

                if (receiverInteractiveData == null)
                {
                    this.logger.LogError($"Add Friend Request Fail For Get Receiver Interactive Data >>> ReceiverID:{interactiveCommand.ReceiverID}");
                    return("加入好友請求失敗.");
                }

                bool verifyFriendRequestQualificationResult = this.VerifyFriendRequestQualification(initiatorInteractiveData, receiverInteractiveData);
                if (!verifyFriendRequestQualificationResult)
                {
                    return("加入好友請求失敗.");
                }

                //// 更新接收者互動資料
                bool updateReceiveRequestListResult = this.UpdateListHandler(receiverInteractiveData.RequestListIDs, interactiveCommand.InitiatorID, true);
                if (updateReceiveRequestListResult)
                {
                    bool receiverUpdateResult = await this.interactiveRepository.UpdateRequestList(receiverInteractiveData.MemberID, receiverInteractiveData.RequestListIDs);

                    if (!receiverUpdateResult)
                    {
                        return("加入好友請求名單更新失敗.");
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Add Friend Request Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return("加入好友請求發生錯誤.");
            }
        }
        public async Task <IActionResult> Post(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                string result = await this.interactiveService.DeleteBlacklist(interactiveCommand);

                if (string.IsNullOrEmpty(result))
                {
                    return(Ok("刪除黑名單成功."));
                }

                return(BadRequest(result));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Delete Blacklist Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return(BadRequest("刪除黑名單發生錯誤."));
            }
        }
Exemple #7
0
        public async Task <IActionResult> Post(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                Tuple <IEnumerable <string>, string> result = await this.interactiveService.GetAddFriendRequestList(interactiveCommand);

                if (string.IsNullOrEmpty(result.Item2))
                {
                    return(Ok(result.Item1));
                }

                return(BadRequest(result.Item2));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Add Friend Request List Error >>> InitiatorID:{interactiveCommand.InitiatorID}\n{ex}");
                return(BadRequest("取得加入好友請求名單發生錯誤."));
            }
        }
Exemple #8
0
        public async Task <IActionResult> Post(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                Tuple <int, string> result = await this.interactiveService.GetMemberInteractiveStatus(interactiveCommand);

                if (string.IsNullOrEmpty(result.Item2))
                {
                    return(Ok(result.Item1));
                }

                return(BadRequest(result.Item2));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Member Interactive Status Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return(BadRequest("取得會員互動狀態發生錯誤."));
            }
        }
Exemple #9
0
        public async Task <IActionResult> Add(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                string result = await this.interactiveService.AddFriend(interactiveCommand);

                if (string.IsNullOrEmpty(result))
                {
                    return(Ok("加入好友成功."));
                }

                return(BadRequest(result));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Add Friend Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return(BadRequest("加入好友發生錯誤."));
            }
        }
Exemple #10
0
        /// <summary>
        /// 取得好友名單
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>Tuple(strings, string)</returns>
        public async Task <Tuple <IEnumerable <string>, string> > GetFriendList(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, false);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Get Friend List Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return(Tuple.Create <IEnumerable <string>, string>(null, "取得好友名單失敗."));
                }

                InteractiveData interactiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, false);

                return(Tuple.Create(interactiveData == null ? null : interactiveData.FriendListIDs, string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Friend List Error >>> InitiatorID:{interactiveCommand.InitiatorID}\n{ex}");
                return(Tuple.Create <IEnumerable <string>, string>(null, "取得好友名單發生錯誤."));
            }
        }
Exemple #11
0
        /// <summary>
        /// 刪除黑名單
        /// </summary>
        /// <param name="interactiveCommand">interactiveCommand</param>
        /// <returns>string</returns>
        public async Task <string> DeleteBlacklist(InteractiveCommandDto interactiveCommand)
        {
            try
            {
                bool verifyInteractiveCommandResult = this.VerifyInteractiveCommand(interactiveCommand, true, true);
                if (!verifyInteractiveCommandResult)
                {
                    this.logger.LogError($"Delete Blacklist Fail For Verify InteractiveCommand >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}");
                    return("刪除黑名單失敗.");
                }

                InteractiveData interactiveData = await this.GetInteractiveData(interactiveCommand.InitiatorID, false);

                if (interactiveData == null)
                {
                    this.logger.LogError($"Delete Blacklist Fail For Get Interactive Data >>> InitiatorID:{interactiveCommand.InitiatorID}");
                    return("刪除黑名單失敗.");
                }

                bool updateInitiatorBlacklistResult = this.UpdateListHandler(interactiveData.BlacklistIDs, interactiveCommand.ReceiverID, false);
                if (updateInitiatorBlacklistResult)
                {
                    bool updateBlacklistResult = await this.interactiveRepository.UpdateBlacklist(interactiveData.MemberID, interactiveData.BlacklistIDs);

                    if (!updateBlacklistResult)
                    {
                        return("黑名單更新失敗.");
                    }
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Delete Blacklist Error >>> InitiatorID:{interactiveCommand.InitiatorID} ReceiverID:{interactiveCommand.ReceiverID}\n{ex}");
                return("刪除黑名單發生錯誤.");
            }
        }