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();