namespace DeepDrftModels.DTOs; /// /// Cross-project release filter contract for the paged release read surface. Threaded alongside /// (never inside) the external PagingParameters<T>, which cannot carry a where-clause, /// and beside the medium filter (a separate enum param, not a free-text field). Mirrors /// for the release-cardinal browse path. An instance with all properties /// null is equivalent to no filter — see . /// public class ReleaseFilter { /// Free-text, case-insensitive LIKE across the release Title and Artist. public string? SearchText { get; set; } /// Exact genre match. public string? Genre { get; set; } /// /// True when no predicate is set. An empty filter must produce identical results to a null /// filter, so callers collapse it to null before querying. /// public bool IsEmpty => string.IsNullOrWhiteSpace(SearchText) && string.IsNullOrWhiteSpace(Genre); }