public async Task <UserDetailsModel> Update(UserDetailsModel userModel, Guid currentUserId, RoleType currentUserRole)
        {
            var user = (await dbContext.Users.FirstOrDefaultAsync(x => x.Id == userModel.Id))
                       ?? throw new AppException(ExceptionType.UserNotFound);

            var allowAction = userModel.Id == currentUserId || currentUserRole == RoleType.Admin || currentUserRole == RoleType.Moderator && user.Role == RoleType.User;

            if (!allowAction)
            {
                throw new AppForbiddenException();
            }

            user.Email     = userModel.Email;
            user.Role      = userModel.Role;
            user.FirstName = userModel.FirstName;
            user.LastName  = userModel.LastName;
            user.Birthday  = userModel.Birthday;
            user.Phone     = userModel.Phone;
            user.IsActive  = userModel.IsActive;
            user.Gender    = userModel.Gender;

            dbContext.Update(user);
            await dbContext.SaveChangesAsync();

            return(userModel);
        }
        public async Task <GroupModel> Update(GroupModel groupModel)
        {
            var group = (await dbContext.Groups.FirstOrDefaultAsync(x => x.Id == groupModel.Id))
                        ?? throw new AppException(ExceptionType.GroupNotFound);

            group.Name     = groupModel.Name;
            group.IsActive = groupModel.IsActive;

            dbContext.Update(group);
            await dbContext.SaveChangesAsync();

            return(groupModel);
        }