Refactor ShowAudience handling across the application to align with MPAA rating system. Update ShowAudience enum to reflect new ratings (G, PG, PG-13, R, NC-17) and adjust related data models, API types, and frontend components to support nullable audience values. Enhance metadata handling to incorporate content ratings from external sources, ensuring proper audience filtering in scheduling logic. Update documentation to clarify changes in audience categorization and its implications for content management.
This commit is contained in:
@@ -21,8 +21,9 @@ public class Show
|
||||
public string? Description { get; private set; }
|
||||
public ShowKind Kind { get; private set; }
|
||||
|
||||
/// <summary>Категория аудитории (обычное/детское/взрослое) — под будущие фильтры показа.</summary>
|
||||
public ShowAudience Audience { get; private set; }
|
||||
/// <summary>Возрастной рейтинг (MPAA) или null, если не проставлен ни источником, ни вручную.
|
||||
/// Шоу без рейтинга планировщик не отсекает: неизвестное не значит «взрослое».</summary>
|
||||
public ShowAudience? Audience { get; private set; }
|
||||
|
||||
public DateTimeOffset CreatedAt { get; private set; }
|
||||
|
||||
@@ -52,7 +53,7 @@ public class Show
|
||||
ShowKind kind,
|
||||
string? description = null,
|
||||
string? originalName = null,
|
||||
ShowAudience audience = ShowAudience.General
|
||||
ShowAudience? audience = null
|
||||
) =>
|
||||
new()
|
||||
{
|
||||
@@ -65,8 +66,8 @@ public class Show
|
||||
CreatedAt = DateTimeOffset.UtcNow,
|
||||
};
|
||||
|
||||
/// <summary>Задать категорию аудитории.</summary>
|
||||
public void SetAudience(ShowAudience audience) => Audience = audience;
|
||||
/// <summary>Задать возрастной рейтинг; null — снять (вернуть в «не проставлен»).</summary>
|
||||
public void SetAudience(ShowAudience? audience) => Audience = audience;
|
||||
|
||||
/// <summary>Основной жанр или null, если жанры не проставлены.</summary>
|
||||
public Guid? PrimaryGenreId => _genres.FirstOrDefault(g => g.IsPrimary)?.GenreId;
|
||||
|
||||
@@ -1,27 +1,43 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace TeleWave.Domain.Library;
|
||||
|
||||
/// <summary>
|
||||
/// Возрастная категория шоу. Значения упорядочены по возрастанию строгости — на этом порядке строятся
|
||||
/// правила планировщика вида «до 23:00 не строже подросткового». Новые категории можно вставлять
|
||||
/// Возрастной рейтинг шоу по шкале MPAA — той самой, что отдают внешние источники, поэтому значение
|
||||
/// из метаданных ложится сюда без выдуманной промежуточной классификации.
|
||||
///
|
||||
/// Значения упорядочены по возрастанию строгости, и на этом порядке держится весь отбор кандидатов
|
||||
/// («до 23:00 не строже <see cref="Pg13"/>» — это обычное сравнение). Новые значения можно вставлять
|
||||
/// только с сохранением монотонности и с миграцией данных.
|
||||
///
|
||||
/// Это не гейт для зрителя: что показывает канал, то и смотрится. Категория нужна планировщику,
|
||||
/// Отсутствие рейтинга — это <c>null</c>, а не значение шкалы: «не проставлено» и «подходит всем» —
|
||||
/// разные факты, и загонять их в одну ячейку значит терять оба.
|
||||
///
|
||||
/// Это не гейт для зрителя: что показывает канал, то и смотрится. Рейтинг нужен планировщику,
|
||||
/// чтобы не поставить взрослое в детский эфир.
|
||||
///
|
||||
/// Имена на проводе заданы явно (<c>PG-13</c>, а не <c>Pg13</c>): по ним же приходят данные
|
||||
/// источников, и совпадение написания избавляет от таблицы перевода на каждой границе.
|
||||
/// </summary>
|
||||
public enum ShowAudience
|
||||
{
|
||||
/// <summary>Детское.</summary>
|
||||
Kids = 0,
|
||||
/// <summary>General Audiences — без ограничений.</summary>
|
||||
[JsonStringEnumMemberName("G")]
|
||||
G = 0,
|
||||
|
||||
/// <summary>Семейное.</summary>
|
||||
Family = 1,
|
||||
/// <summary>Parental Guidance Suggested — рекомендуется присутствие родителей.</summary>
|
||||
[JsonStringEnumMemberName("PG")]
|
||||
Pg = 1,
|
||||
|
||||
/// <summary>Подростковое.</summary>
|
||||
Teen = 2,
|
||||
/// <summary>Parents Strongly Cautioned — не рекомендуется детям до 13 лет.</summary>
|
||||
[JsonStringEnumMemberName("PG-13")]
|
||||
Pg13 = 2,
|
||||
|
||||
/// <summary>Общее — без ограничений (по умолчанию).</summary>
|
||||
General = 3,
|
||||
/// <summary>Restricted — до 17 лет в сопровождении взрослого.</summary>
|
||||
[JsonStringEnumMemberName("R")]
|
||||
R = 3,
|
||||
|
||||
/// <summary>Взрослое.</summary>
|
||||
Adult = 4,
|
||||
/// <summary>No One 17 and Under Admitted — только для взрослых.</summary>
|
||||
[JsonStringEnumMemberName("NC-17")]
|
||||
Nc17 = 4,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user