Gia Bao TSC
Gia Bao TSC

Test code

Test code

ICT News ICT News posted at June 02, 2026

public async Task<Pagination<UserInfo>> GetUsers(
    string roleID,
    string? keyword = null,
    int pageIndex = 1,
    int pageSize = 20,
    CancellationToken token = default)
{
    await using var scope = scopeFactory.CreateAsyncScope();

    var db = scope.ServiceProvider
        .GetRequiredService<ApplicationDbContext>();

    var query =
        (from user in db.Users.AsNoTracking()
         join ur in db.UserRoles.AsNoTracking() on user.Id equals ur.UserId
         join role in db.Roles.AsNoTracking() on ur.RoleId equals role.Id
         where (string.IsNullOrWhiteSpace(keyword)
                || (user.UserName != null && user.UserName.ToLower().Contains(keyword.ToLower()))
                || (user.FullName != null && user.FullName.ToLower().Contains(keyword.ToLower())))
               && (string.IsNullOrWhiteSpace(roleID) || role.Id == roleID)
         select user)
        .Distinct();

    var totalItems = await query.CountAsync(token);

    if (pageSize <= 0)
        pageSize = 20;

    var totalPages = (int)Math.Ceiling((double)totalItems / pageSize);

    if (pageIndex < 1)
        pageIndex = 1;

    if (totalPages > 0 && pageIndex > totalPages)
        pageIndex = totalPages;

    var users = await query
        .OrderBy(u => u.UserName)
        .Skip((pageIndex - 1) * pageSize)
        .Take(pageSize)
        .Select(user => new UserInfo
        {
            UserId = user.Id,
            UserName = user.UserName ?? string.Empty,
            Email = user.Email ?? string.Empty,
            PasswordHash = user.PasswordHash ?? string.Empty,
            FullName = user.FullName ?? string.Empty,
            PhoneNumber = user.PhoneNumber,
            SchoolID = user.SchoolID,
            SchoolName = user.SchoolName,
            ClassID = user.ClassID,
            ClassName = user.ClassName,
            CategoryID = user.CategoryID,
            CategoryName = user.CategoryName,
            BigGenreId = user.BigGenreID,
            BigGenreName = user.BigGenreID,
            LicenseKey = user.LicenseKey ?? string.Empty,
            IsAllowLoginOnOtherMachine = user.IsAllowLoginOnOtherMachine,
            Followers = user.Followers,
            Following = user.Following,
            Friends = user.Friends,
            UserStatus = user.UserStatus,
            JobTitle = user.JobTitle,
            JobDescription = user.JobDescription,
            Projects = user.Projects,
            Awards = user.Awards,
            Avatar = user.Avatar,
            Education = user.Education,
            Experience = user.Experience,
            DOB = user.DOB,
            Location = user.Location,
            Skills = user.Skills,
            IsUtilities = user.IsUtilities,
            UserSettings = user.UserSettings,
            CreatedAt = user.CreatedAt.ToString(Constants.DateTimeFormat),
            UpdatedAt = user.UpdatedAt.ToString(Constants.DateTimeFormat),
            LastLogin = user.LastLogin.ToString(Constants.DateTimeFormat),
            CreatedBy = user.CreatedBy,
            UpdatedBy = user.UpdatedBy,
            Remark = user.Remark,
        })
        .ToListAsync(token);

    return new Pagination<UserInfo>
    {
        TotalItems = totalItems,
        TotalPages = totalPages,
        PageIndex = pageIndex,
        ItemPerPage = pageSize,
        NextPage = pageIndex < totalPages ? pageIndex + 1 : pageIndex,
        PrevPage = pageIndex > 1 ? pageIndex - 1 : 1,
        Items = users
    };
}
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.