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; public DetailsModel(AppDbContext db, InterestService interest) { _db = db; _interest = interest; } public JobOpening? Job { get; private set; } public bool ShowContact { get; private set; } public bool Saved { get; private set; } public async Task OnGetAsync(int id) { await LoadAsync(id); if (Job is null) return NotFound(); 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) .FirstOrDefaultAsync(j => j.Id == id); } }