public async Task <IActionResult> CreateGroupAsync([FromBody] CreateGroupAC group) { if (User.Identity.IsAuthenticated) { var loggedInUser = _userManager.FindByNameAsync(User.Identity.Name); var userId = loggedInUser.Result.Id; await unitOfWork.Group.CreateGroupAsync(group, userId); await unitOfWork.SaveAsync(); } return(Ok(group)); }
public async Task CreateGroupAsync(CreateGroupAC group, string userId) { List <Activity> activities = new List <Activity>(); List <Friend> friendList = await _context.Friends.Where(u => u.UserID.Equals(userId) || u.FriendID.Equals(userId)).ToListAsync(); List <Friend> newFriend = new List <Friend>(); var newGroup = new DomainModel.Models.Group { Name = group.Name, Category = group.Category, SimplifyDebts = group.SimplifyDebts, Note = group.Note, DateCreated = DateTime.Now, CreatedBy = userId, IsDeleted = false }; activities.Add(new Activity { UserID = newGroup.CreatedBy, Date = DateTime.Now, Description = $"You created a group {newGroup.Name}" }); await _context.Groups.AddAsync(newGroup); await SaveChangesAsync(); var addedGroup = await _context.Groups.Where(g => g.ID == newGroup.ID).FirstOrDefaultAsync(); var newUserGroup = new UserGroupMapper { GroupID = addedGroup.ID, UserID = addedGroup.CreatedBy }; await _context.UserGroupMappers.AddAsync(newUserGroup); await SaveChangesAsync(); //List<Friend> allFriends = await _context.Friends.ToListAsync(); for (int i = 0; i < group.UserGroupMapper.Count; i++) { var users = await _context.Users.Select(u => u.UserName).ToListAsync(); UserGroupMapper newUserGroupMapper = new UserGroupMapper(); var newUser = new ApplicationUser { FullName = group.UserGroupMapper[i].FullName, UserName = group.UserGroupMapper[i].UserName }; if (users.Contains(group.UserGroupMapper[i].UserName.ToLower())) { newUserGroupMapper.UserID = _userManager.FindByNameAsync(group.UserGroupMapper[i].UserName).Result.Id; newUserGroupMapper.GroupID = addedGroup.ID; await _context.UserGroupMappers.AddAsync(newUserGroupMapper); await SaveChangesAsync(); } else { var result = await _userManager.CreateAsync(newUser); if (result.Succeeded) { newUserGroupMapper.UserID = _userManager.FindByNameAsync(group.UserGroupMapper[i].UserName).Result.Id; newUserGroupMapper.GroupID = addedGroup.ID; await _context.UserGroupMappers.AddAsync(newUserGroupMapper); await _context.SaveChangesAsync(); } } if (friendList.Count != 0) { List <Friend> userFriendList = await _context.Friends.Where(u => u.UserID.Equals(newUserGroupMapper.UserID) || u.FriendID.Equals(newUserGroupMapper.UserID)).ToListAsync(); if (!friendList.Any(f => f.FriendID.Equals(newUserGroupMapper.UserID) || f.UserID.Equals(newUserGroupMapper.UserID))) { newFriend.Add(new Friend { UserID = userId, FriendID = newUserGroupMapper.UserID }); for (int j = i + 1; j < group.UserGroupMapper.Count; j++) { if (users.Contains(group.UserGroupMapper[j].UserName.ToLower())) { if (!userFriendList.Any(f => f.FriendID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id) || f.UserID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id))) { newFriend.Add(new Friend { UserID = newUserGroupMapper.UserID, FriendID = _userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id }); } } else { var newMember = new ApplicationUser { FullName = group.UserGroupMapper[j].FullName, UserName = group.UserGroupMapper[j].UserName }; var result = await _userManager.CreateAsync(newMember); if (result.Succeeded) { if (!userFriendList.Any(f => f.FriendID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id) || f.UserID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id))) { newFriend.Add(new Friend { UserID = newUserGroupMapper.UserID, FriendID = _userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id }); } } } } } else { for (int j = i + 1; j < group.UserGroupMapper.Count; j++) { if (users.Contains(group.UserGroupMapper[j].UserName.ToLower())) { if (!userFriendList.Any(f => f.FriendID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id) || f.UserID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id))) { newFriend.Add(new Friend { UserID = newUserGroupMapper.UserID, FriendID = _userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id }); } } else { var newMember = new ApplicationUser { FullName = group.UserGroupMapper[j].FullName, UserName = group.UserGroupMapper[j].UserName }; var result = await _userManager.CreateAsync(newMember); if (result.Succeeded) { if (!userFriendList.Any(f => f.FriendID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id) || f.UserID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id))) { newFriend.Add(new Friend { UserID = newUserGroupMapper.UserID, FriendID = _userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id }); } } } } } } else { List <Friend> userFriendList = await _context.Friends.Where(u => u.UserID.Equals(newUserGroupMapper.UserID) || u.FriendID.Equals(newUserGroupMapper.UserID)).ToListAsync(); newFriend.Add(new Friend { UserID = userId, FriendID = newUserGroupMapper.UserID }); for (int j = i + 1; j < group.UserGroupMapper.Count; j++) { if (users.Contains(group.UserGroupMapper[j].UserName.ToLower())) { if (!userFriendList.Any(f => f.FriendID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id) || f.UserID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id))) { newFriend.Add(new Friend { UserID = newUserGroupMapper.UserID, FriendID = _userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id }); } } else { var newMember = new ApplicationUser { FullName = group.UserGroupMapper[j].FullName, UserName = group.UserGroupMapper[j].UserName }; var result = await _userManager.CreateAsync(newMember); if (result.Succeeded) { if (!userFriendList.Any(f => f.FriendID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id) || f.UserID.Equals(_userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id))) { newFriend.Add(new Friend { UserID = newUserGroupMapper.UserID, FriendID = _userManager.FindByNameAsync(group.UserGroupMapper[j].UserName).Result.Id }); } } } } } activities.Add(new Activity { UserID = newGroup.CreatedBy, Date = DateTime.Now, Description = $"You added {group.UserGroupMapper[i].FullName} to {group.Name}" }); } await _context.Friends.AddRangeAsync(newFriend); await _context.Activities.AddRangeAsync(activities); await SaveChangesAsync(); }