/// <summary>
        /// อัพเดทหรือเพิ่มข้อมูลการขอเป็นเพื่อน
        /// </summary>
        /// <param name="data">ข้อมูลที่ต้องการดำเนินการ</param>
        public void UpsertFriendRequest(FriendRequest data)
        {
            var update = Builders<FriendRequest>.Update
             .Set(it => it.FromUserProfileId, data.FromUserProfileId)
             .Set(it => it.ToUserProfileId, data.ToUserProfileId)
             .Set(it => it.Status, data.Status)
             .Set(it => it.AcceptedDate, data.AcceptedDate)
             .Set(it => it.CreatedDate, data.CreatedDate)
             .Set(it => it.DeletedDate, data.DeletedDate);

            var updateOption = new UpdateOptions { IsUpsert = true };
            MongoAccess.MongoUtil.Instance.GetCollection<FriendRequest>(TableName)
               .UpdateOne(it => it.id == data.id, update, updateOption);
        }
        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));
            }
        }