using JobsMedical.Web.Data; using JobsMedical.Web.Models; using JobsMedical.Web.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; namespace JobsMedical.Web.Pages.Admin; [Authorize(Roles = "Admin")] public class BroadcastModel : PageModel { private readonly AppDbContext _db; private readonly NotificationService _notify; public BroadcastModel(AppDbContext db, NotificationService notify) { _db = db; _notify = notify; } [BindProperty] public string Title { get; set; } = ""; [BindProperty] public string? Body { get; set; } [BindProperty] public string? Url { get; set; } [BindProperty] public string Audience { get; set; } = "all"; // all | staff | employers [TempData] public string? Result { get; set; } public void OnGet() { } public async Task OnPostAsync() { if (string.IsNullOrWhiteSpace(Title)) { Result = "عنوان لازم است."; return Page(); } IQueryable q = _db.Users.Where(u => !u.IsBanned); q = Audience switch { "staff" => q.Where(u => u.Role == UserRole.Doctor), "employers" => q.Where(u => u.Role == UserRole.FacilityAdmin), _ => q, }; var ids = await q.Select(u => u.Id).ToListAsync(); await _notify.BroadcastAsync(ids, Title.Trim(), Body?.Trim(), string.IsNullOrWhiteSpace(Url) ? "/" : Url.Trim()); Result = $"اعلان برای {ids.Count} کاربر ارسال شد (در‌اپ + پوش در صورت فعال‌بودن)."; return RedirectToPage(); } }