public IActionResult Update([FromBody] UserAccount user)
        {
            using (var transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    UserAccount userForUpdate = dbContext.UserAccounts.Find(user.UserID);

                    if (userForUpdate != null)
                    {
                        userForUpdate.UserName  = user.UserName;
                        userForUpdate.Password  = user.Password;
                        userForUpdate.IsActive  = user.IsActive;
                        userForUpdate.UpdatedBy = user.UpdatedBy;
                        userForUpdate.UpdatedOn = DateTime.Now;

                        dbContext.SaveChanges();


                        List <UserAccountGroup> uagToDelete = dbContext.UserAccountGroups
                                                              .Where(uag => uag.UserAccountID == user.UserID && !user.UserGroups.Any(ug => ug.ID == uag.UserGroupID))
                                                              .ToList();

                        if (uagToDelete != null && uagToDelete.Count > 0)
                        {
                            dbContext.UserAccountGroups.RemoveRange(uagToDelete);
                            dbContext.SaveChanges();
                        }

                        foreach (UserGroup ug in user.UserGroups)
                        {
                            int count = dbContext.UserAccountGroups.Where(x => x.UserAccountID == user.UserID && x.UserGroupID == ug.ID).Count();

                            if (count == 0)
                            {
                                UserAccountGroup uag = new UserAccountGroup();
                                uag.UserAccountID = user.UserID;
                                uag.UserGroupID   = ug.ID;

                                dbContext.UserAccountGroups.Add(uag);
                                dbContext.SaveChanges();
                            }
                        }

                        transaction.Commit();

                        return(Ok(user));
                    }
                    else
                    {
                        throw new Exception($"User Not found with a user ID of '{user.UserID}'.");
                    }
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    return(BadRequest(GetErrorMessage(ex)));
                }
            }
        }
        public IActionResult Add([FromBody] UserAccount user)
        {
            using (var transaction = dbContext.Database.BeginTransaction())
            {
                try
                {
                    UserAccount userToAdd = new UserAccount()
                    {
                        UserID    = user.UserID,
                        UserName  = user.UserName,
                        Password  = user.Password,
                        IsActive  = user.IsActive,
                        CreatedOn = DateTime.Now,
                        CreatedBy = user.CreatedBy,
                        UpdatedOn = DateTime.Now,
                        UpdatedBy = user.UpdatedBy
                    };

                    dbContext.UserAccounts.Add(userToAdd);
                    dbContext.SaveChanges();

                    foreach (UserGroup ug in user.UserGroups)
                    {
                        int count = dbContext.UserAccountGroups.Where(x => x.UserAccountID == user.UserID && x.UserGroupID == ug.ID).Count();

                        if (count == 0)
                        {
                            UserAccountGroup uag = new UserAccountGroup();
                            uag.UserAccountID = user.UserID;
                            uag.UserGroupID   = ug.ID;

                            dbContext.UserAccountGroups.Add(uag);
                            dbContext.SaveChanges();
                        }
                    }

                    transaction.Commit();

                    return(Ok(user));
                }
                catch (Exception ex)
                {
                    transaction.Rollback();

                    return(BadRequest(GetErrorMessage(ex)));
                }
            }
        }