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);
}