using JobsMedical.Web.Data; using JobsMedical.Web.Models; using JobsMedical.Web.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; namespace JobsMedical.Web.Pages.Jobs; public class DetailsModel : PageModel { private readonly AppDbContext _db; private readonly InterestService _interest; private readonly JobsMedical.Web.Services.Scraping.SettingsService _settings; public DetailsModel(AppDbContext db, InterestService interest, JobsMedical.Web.Services.Scraping.SettingsService settings) { _db = db; _interest = interest; _settings = settings; } public JobOpening? Job { get; private set; } public string? MapKey { get; private set; } public bool ShowContact { get; private set; } public bool Saved { get; private set; } public bool Reported { get; private set; } public async Task OnGetAsync(int id) { await LoadAsync(id); if (Job is null) return NotFound(); MapKey = (await _settings.GetAsync()).NeshanMapKey; Reported = Request.Query["reported"] == "1"; await _interest.LogJobAsync(InterestEventType.View, id); return Page(); } public async Task OnPostInterestAsync(int id) { await LoadAsync(id); if (Job is null) return NotFound(); await _interest.LogJobAsync(InterestEventType.Apply, id); ShowContact = true; return Page(); } public async Task OnPostSaveAsync(int id) { await LoadAsync(id); if (Job is null) return NotFound(); await _interest.LogJobAsync(InterestEventType.Save, id); Saved = true; return Page(); } public async Task OnPostDismissAsync(int id) { await _interest.LogJobAsync(InterestEventType.Dismiss, id); return RedirectToPage("/Jobs/Index"); } private async Task LoadAsync(int id) { Job = await _db.JobOpenings .Include(j => j.Facility).ThenInclude(f => f.City) .Include(j => j.Facility).ThenInclude(f => f.District) .Include(j => j.Role) .Include(j => j.Contacts) .FirstOrDefaultAsync(j => j.Id == id); } }