diff --git a/src/JobsMedical.Web/Pages/Admin/Index.cshtml b/src/JobsMedical.Web/Pages/Admin/Index.cshtml index 9edb3c3..6e454e2 100644 --- a/src/JobsMedical.Web/Pages/Admin/Index.cshtml +++ b/src/JobsMedical.Web/Pages/Admin/Index.cshtml @@ -9,8 +9,8 @@

پنل مدیریت — جمع‌آوری و صف آگهی‌ها

آگهی‌های جمع‌آوری‌شده از منابع را بررسی، ساختارمند و منتشر کن. - (@JalaliDate.ToPersianDigits(Model.Queue.Count.ToString()) در صف، - @JalaliDate.ToPersianDigits(Model.Flagged.Count.ToString()) پرچم‌خورده) + (@JalaliDate.ToPersianDigits(Model.QueueTotal.ToString()) در صف، + @JalaliDate.ToPersianDigits(Model.FlaggedTotal.ToString()) پرچم‌خورده) · داشبورد · کاربران · مراکز @@ -163,9 +163,19 @@ { } + @if (Model.QueuePages > 1) + { +

+ @if (Model.QueuePage > 1) + { → قبلی } + صفحه @JalaliDate.ToPersianDigits(Model.QueuePage.ToString()) از @JalaliDate.ToPersianDigits(Model.QueuePages.ToString()) + @if (Model.QueuePage < Model.QueuePages) + { بعدی ← } +
+ } } - @if (Model.Flagged.Count > 0) + @if (Model.FlaggedTotal > 0) {

پرچم‌خورده (ناقص/مشکوک)

اعتبارسنجی این‌ها را کامل ندانست؛ در صورت صحت می‌توانی منتشرشان کنی.

@@ -173,6 +183,16 @@ { } + @if (Model.FlaggedPages > 1) + { +
+ @if (Model.FlaggedPage > 1) + { → قبلی } + صفحه @JalaliDate.ToPersianDigits(Model.FlaggedPage.ToString()) از @JalaliDate.ToPersianDigits(Model.FlaggedPages.ToString()) + @if (Model.FlaggedPage < Model.FlaggedPages) + { بعدی ← } +
+ } } diff --git a/src/JobsMedical.Web/Pages/Admin/Index.cshtml.cs b/src/JobsMedical.Web/Pages/Admin/Index.cshtml.cs index 6eb0187..19db658 100644 --- a/src/JobsMedical.Web/Pages/Admin/Index.cshtml.cs +++ b/src/JobsMedical.Web/Pages/Admin/Index.cshtml.cs @@ -26,6 +26,13 @@ public class IndexModel : PageModel public List Queue { get; private set; } = new(); public List Flagged { get; private set; } = new(); + public const int PageSize = 20; + public int QueuePage { get; private set; } = 1; + public int QueueTotal { get; private set; } + public int FlaggedPage { get; private set; } = 1; + public int FlaggedTotal { get; private set; } + public int QueuePages => Math.Max(1, (int)Math.Ceiling(QueueTotal / (double)PageSize)); + public int FlaggedPages => Math.Max(1, (int)Math.Ceiling(FlaggedTotal / (double)PageSize)); public IReadOnlyList SourceNames { get; private set; } = new List(); public int PublishedShifts { get; private set; } public int PublishedJobs { get; private set; } @@ -36,7 +43,7 @@ public class IndexModel : PageModel [TempData] public string? IngestMessage { get; set; } - public async Task OnGetAsync() => await LoadAsync(); + public async Task OnGetAsync(int q = 1, int f = 1) => await LoadAsync(q, f); public async Task OnPostAddAsync() { @@ -166,14 +173,21 @@ public class IndexModel : PageModel return RedirectToPage(); } - private async Task LoadAsync() + private async Task LoadAsync(int q = 1, int f = 1) { + QueueTotal = await _db.RawListings.CountAsync(r => r.Status == RawListingStatus.New); + QueuePage = Math.Clamp(q, 1, QueuePages); Queue = await _db.RawListings .Where(r => r.Status == RawListingStatus.New) - .OrderByDescending(r => r.Confidence).ThenByDescending(r => r.FetchedAt).ToListAsync(); + .OrderByDescending(r => r.Confidence).ThenByDescending(r => r.FetchedAt) + .Skip((QueuePage - 1) * PageSize).Take(PageSize).ToListAsync(); + + FlaggedTotal = await _db.RawListings.CountAsync(r => r.Status == RawListingStatus.Flagged); + FlaggedPage = Math.Clamp(f, 1, FlaggedPages); Flagged = await _db.RawListings .Where(r => r.Status == RawListingStatus.Flagged) - .OrderByDescending(r => r.FetchedAt).ToListAsync(); + .OrderByDescending(r => r.FetchedAt) + .Skip((FlaggedPage - 1) * PageSize).Take(PageSize).ToListAsync(); SourceNames = _ingest.SourceNames; PublishedShifts = await _db.Shifts.CountAsync(s => s.Source != ShiftSource.Direct); PublishedJobs = await _db.JobOpenings.CountAsync();