using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace HyperBooru.Pages; public class IndexModel : PageModel { public IEnumerable Media { get; private set; } private HyperBooruDbContext db; public IndexModel(HyperBooruDbContext db) => this.db = db; public void OnGet([FromQuery(Name = "q")] string? query) { IEnumerable media; if(query is null) { media = db.UploadedFiles .OrderByDescending(uf => uf.UploadTime) .Select(uf => uf.Media) .Distinct(); } else { query = query.ToLower(); var matchingTags = db.TagDefinitions .Where(td => td.Name.ToLower().Contains(query)) .Select(td => td.Guid); media = db.Media .Where(m => m.Tags .Select(t => t.TagDefinition.Guid) .Intersect(matchingTags) .Any()); } Media = media.OrderByDescending(m => m.UploadedFiles .Select(uf => uf.UploadTime) .Order() .Last()); } }