Files
hamkadr/src/JobsMedical.Web/Pages/Jobs/Details.cshtml.cs
T

73 lines
2.2 KiB
C#
Raw Normal View History

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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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);
}
}