using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using KernelRecordsMVC.Data; namespace KernelRecordsMVC.Controllers; public class ReleaseController : Controller { private readonly KernelRecordsContext _context; public ReleaseController(KernelRecordsContext context) { _context = context; } // UC003 - Browse Releases public IActionResult Index(string? search, string? genre) { var query = _context.Releases .Include(r => r.Products) .Include(r => r.ReleaseArtists) .ThenInclude(ra => ra.Artist) .AsQueryable(); if (!string.IsNullOrWhiteSpace(search)) { query = query.Where(r => r.Title.ToLower().Contains(search.ToLower())); } if (!string.IsNullOrWhiteSpace(genre)) { query = query.Where(r => r.Genre.ToLower() == genre.ToLower()); } var releases = query .OrderBy(r => r.Title) .ToList(); ViewBag.Search = search; ViewBag.Genre = genre; ViewBag.Genres = _context.Releases .Select(r => r.Genre) .Distinct() .OrderBy(g => g) .ToList(); return View(releases); } // Release details public IActionResult Details(long id) { var release = _context.Releases .Include(r => r.Products) .Include(r => r.ReleaseArtists) .ThenInclude(ra => ra.Artist) .Include(r => r.Album) .ThenInclude(a => a!.AlbumSongs) .ThenInclude(x => x.Song) .Include(r => r.SingleRelease) .ThenInclude(s => s!.SingleFeatures) .ThenInclude(x => x.Song) .FirstOrDefault(r => r.ReleaseId == id); if (release == null) return NotFound(); return View(release); } }