using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; using TicketOffice.Data; using TicketOffice.Models; using TicketOffice.Services; namespace TicketOffice.Pages.Auth; public class AccountModel : PageModel { private readonly TicketOfficeContext context; private readonly UserValidationService validationService; private readonly PdfService pdfService; public AccountModel(TicketOfficeContext context, UserValidationService validationService, PdfService pdfService) { this.context = context; this.validationService = validationService; this.pdfService = pdfService; } // User's tickets. public List Tickets { get; set; } = null!; // Called when GET request is sent to the page. Checks if the session is // valid then retrieves all user's tickets. public ActionResult OnGet() { if (!validationService.IsAuthorized(HttpContext)) { return RedirectToPage("/Auth/Login"); } Tickets = context.Ticket .Where(t => t.UserId == HttpContext.Session.GetInt32("UserId")) .Include(t => t.Route) .Include(t => t.Cities) .ToList(); return Page(); } // Called when user confirms ticket return. public ActionResult OnGetReturnTicket(int returnTicketId) { OnGet(); Ticket? returnTicket = context.Ticket.Find(returnTicketId); if (returnTicket != null) { context.Remove(returnTicket); context.SaveChanges(); return RedirectToPage("./Account"); } return NotFound(); } // Downloads ticket in PDF format public ActionResult OnGetTicketPdf(int pdfTicketId) { OnGet(); Ticket? ticket = Tickets.Find(t => t.Id == pdfTicketId); if (ticket == null) { return NotFound(); } return pdfService.GetTicketPdf(ticket); } }