using System; using System.Linq; using API.Data.Misc; using API.Entities; using API.Entities.Enums; namespace API.Extensions.QueryExtensions; #nullable enable /// /// Responsible for restricting Entities based on an AgeRestriction /// public static class RestrictByAgeExtensions { public static IQueryable RestrictAgainstAgeRestriction(this IQueryable queryable, AgeRestriction restriction) { if (restriction.AgeRating == AgeRating.NotApplicable) return queryable; var q = queryable.Where(s => s.Metadata.AgeRating <= restriction.AgeRating); if (!restriction.IncludeUnknowns) { return q.Where(s => s.Metadata.AgeRating != AgeRating.Unknown); } return q; } [Obsolete] public static IQueryable RestrictAgainstAgeRestriction(this IQueryable queryable, AgeRestriction restriction) { if (restriction.AgeRating == AgeRating.NotApplicable) return queryable; if (restriction.IncludeUnknowns) { return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating)); } return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating && sm.AgeRating > AgeRating.Unknown)); } public static IQueryable RestrictAgainstAgeRestriction(this IQueryable queryable, AgeRestriction restriction) { if (restriction.AgeRating == AgeRating.NotApplicable) return queryable; if (restriction.IncludeUnknowns) { return queryable.Where(c => c.Items.All(sm => sm.Metadata.AgeRating <= restriction.AgeRating)); } return queryable.Where(c => c.Items.All(sm => sm.Metadata.AgeRating <= restriction.AgeRating && sm.Metadata.AgeRating > AgeRating.Unknown)); } public static IQueryable RestrictAgainstAgeRestriction(this IQueryable queryable, AgeRestriction restriction) { if (restriction.AgeRating == AgeRating.NotApplicable) return queryable; if (restriction.IncludeUnknowns) { return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating)); } return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating && sm.AgeRating > AgeRating.Unknown)); } public static IQueryable RestrictAgainstAgeRestriction(this IQueryable queryable, AgeRestriction restriction) { if (restriction.AgeRating == AgeRating.NotApplicable) return queryable; if (restriction.IncludeUnknowns) { return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating)); } return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating && sm.AgeRating > AgeRating.Unknown)); } public static IQueryable RestrictAgainstAgeRestriction(this IQueryable queryable, AgeRestriction restriction) { if (restriction.AgeRating == AgeRating.NotApplicable) return queryable; if (restriction.IncludeUnknowns) { return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating)); } return queryable.Where(c => c.SeriesMetadatas.All(sm => sm.AgeRating <= restriction.AgeRating && sm.AgeRating > AgeRating.Unknown)); } public static IQueryable RestrictAgainstAgeRestriction(this IQueryable queryable, AgeRestriction restriction) { if (restriction.AgeRating == AgeRating.NotApplicable) return queryable; var q = queryable.Where(rl => rl.AgeRating <= restriction.AgeRating); if (!restriction.IncludeUnknowns) { return q.Where(rl => rl.AgeRating != AgeRating.Unknown); } return q; } }