Admin suite: monitoring dashboard, user management/ban, broadcast, reports, SMS test
- /Admin/Overview: platform monitoring stats (users by role, facilities, listings, applies, push subs, queue, reports, bans) - /Admin/Users: search/filter + ban/unban (User.IsBanned + reason); banned users blocked at login - /Admin/Broadcast: send announcement (in-app + web push) to all / staff / employers via NotificationService - Reports: report button on shift/job detail → /report endpoint → /Admin/Reports (resolve/dismiss) - Settings: 'send test SMS' button; admin cross-nav links; SMS API config already in place - migration AdminBanReports; verified overview/users/broadcast/report persist Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
using JobsMedical.Web.Data;
|
||||
using JobsMedical.Web.Models;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace JobsMedical.Web.Pages.Admin;
|
||||
|
||||
[Authorize(Roles = "Admin")]
|
||||
public class OverviewModel : PageModel
|
||||
{
|
||||
private readonly AppDbContext _db;
|
||||
public OverviewModel(AppDbContext db) => _db = db;
|
||||
|
||||
public int Users, Employers, Staff, Banned;
|
||||
public int Facilities, VerifiedFacilities, PendingFacilities;
|
||||
public int OpenShifts, OpenJobs, Applies;
|
||||
public int PushSubs, QueueNew, QueueFlagged, OpenReports;
|
||||
|
||||
public async Task OnGetAsync()
|
||||
{
|
||||
var today = DateOnly.FromDateTime(DateTime.UtcNow);
|
||||
Users = await _db.Users.CountAsync();
|
||||
Employers = await _db.Users.CountAsync(u => u.Role == UserRole.FacilityAdmin);
|
||||
Staff = await _db.Users.CountAsync(u => u.Role == UserRole.Doctor);
|
||||
Banned = await _db.Users.CountAsync(u => u.IsBanned);
|
||||
Facilities = await _db.Facilities.CountAsync();
|
||||
VerifiedFacilities = await _db.Facilities.CountAsync(f => f.IsVerified);
|
||||
PendingFacilities = Facilities - VerifiedFacilities;
|
||||
OpenShifts = await _db.Shifts.CountAsync(s => s.Status == ShiftStatus.Open && s.Date >= today);
|
||||
OpenJobs = await _db.JobOpenings.CountAsync(j => j.Status == ShiftStatus.Open);
|
||||
Applies = await _db.InterestEvents.CountAsync(e => e.EventType == InterestEventType.Apply);
|
||||
PushSubs = await _db.WebPushSubscriptions.CountAsync();
|
||||
QueueNew = await _db.RawListings.CountAsync(r => r.Status == RawListingStatus.New);
|
||||
QueueFlagged = await _db.RawListings.CountAsync(r => r.Status == RawListingStatus.Flagged);
|
||||
OpenReports = await _db.Reports.CountAsync(r => r.Status == ReportStatus.Open);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user