public async Task <IActionResult> PostFriendRequest([FromBody] FriendRequestContract friendRequestContract)
        {
            //TODO: create DataContract
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var userId = _httpContextAccessor.CurrentUserId();

            if (!friendRequestContract.InitiatorId.Equals(userId))
            {
                return(Unauthorized());
            }
            if (friendRequestContract.InitiatorId.Equals(friendRequestContract.TargetId))
            {
                return(BadRequest(friendRequestContract.TargetId));
            }
            var userExists = await _context.ApplicationUsers
                             .AnyAsync(a => a.Id.Equals(friendRequestContract.TargetId));

            var blocked = await _context.FriendRequests
                          .AnyAsync(f => f.InitiatorId.Equals(friendRequestContract.TargetId) &&
                                    f.TargetId.Equals(userId) &&
                                    f.Type.HasValue &&
                                    f.Type.Value.Equals(FriendRequestType.Blocked));

            if (!userExists || blocked)
            {
                return(BadRequest(friendRequestContract.TargetId));
            }
            var friend = await _context.FriendRequests
                         .SingleOrDefaultAsync(f => f.InitiatorId.Equals(userId) &&
                                               f.TargetId.Equals(friendRequestContract.TargetId));

            DateTime timeStamp = DateTime.Now.ToUniversalTime();

            if (friend != null)
            {
                friend.Type      = friendRequestContract.Type;
                friend.TimeStamp = timeStamp;
            }
            else
            {
                FriendRequest fr = new FriendRequest()
                {
                    InitiatorId = userId,
                    TargetId    = friendRequestContract.TargetId,
                    TimeStamp   = timeStamp,
                    Type        = friendRequestContract.Type
                };
                await _context.FriendRequests.AddAsync(fr);
            }
            await _context.SaveChangesAsync();

            //return CreatedAtAction("GetFriendRequest", new { id = friendRequestContract.TargetId }, friendRequest);
            return(Ok());
        }
示例#2
0
        private async Task ContactSearchButtonTask(FriendViewCellModel fvcm)
        {
            var frc = new FriendRequestContract()
            {
                InitiatorId = _userSelf.Id,
                TargetId    = fvcm.UserId,
                TimeStamp   = DateTime.Now,
                Type        = FriendRequestType.Normal
            };
            await _friendRequestService.PostFriendRequestAsync(frc);

            ContactSearchRequestFriends.Remove(fvcm);
            fvcm.Status = FriendStatus.PendingRequest;
            PendingFriends.Add(fvcm);
            FilterGroupsBySearch();
        }
示例#3
0
        private async Task PendingRequestButtonTask(FriendViewCellModel fvcm)
        {
            await Task.Delay(10);

            var contract = new FriendRequestContract()
            {
                InitiatorId = _userSelf.Id,
                TargetId    = fvcm.UserId,
                TimeStamp   = DateTime.Now,
                Type        = FriendRequestType.Normal
            };
            await _friendRequestService.PostFriendRequestAsync(contract);

            PendingFriends.Remove(fvcm);
            fvcm.Status = FriendStatus.Mutual;
            MutualFriends.Add(fvcm);
            FilterGroupsBySearch();
        }
示例#4
0
 public async Task PostFriendRequestAsync(FriendRequestContract contract)
 {
     await _requestService.PostAsync("api/FriendRequest", contract);
 }