using Microsoft.EntityFrameworkCore; namespace HyperBooru.Services; public interface ISearchService { public Media[] Search(string query); } public class SearchService : ISearchService { private IDbContextFactory dbFactory; public SearchService(IDbContextFactory dbFactory) => this.dbFactory = dbFactory; public Media[] Search(string query) { var db = dbFactory.CreateDbContext(); query = query.ToLower(); var matchedTag = db.TagDefinitions .FirstOrDefault(td => td.Name.ToLower() == query)?.Guid; if(matchedTag is not null) return db.Media .Include(m => m.Tags) .ThenInclude(t => t.TagDefinition) .Where(m => m.Tags .Select(t => t.TagDefinition) .Select(td => td.Guid) .Contains((Guid) matchedTag)) .ToArray(); var matchingTags = db.TagDefinitions .Where(td => td.Name.ToLower().Contains(query)) .Select(td => td.Guid); throw new NotImplementedException(); } }