Exemple #1
0
        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();
        }