Enhance metadata handling by introducing ShowKind parameter across various components. Update SearchShowMetadataQuery and related handlers to support querying by show type, ensuring accurate metadata retrieval for series and films. Implement validation to prevent episodes from being associated with non-series shows. Update frontend API to include ShowKind in metadata search requests, improving overall functionality and user experience.
This commit is contained in:
@@ -1,20 +1,40 @@
|
||||
using TeleWave.Application.Metadata;
|
||||
using TeleWave.Domain.Library;
|
||||
|
||||
namespace TeleWave.Application.Common.Interfaces;
|
||||
|
||||
/// <summary>Источник метаданных о шоу/сериях (TMDb, OMDb). Реализация ходит во внешний API.</summary>
|
||||
/// <summary>
|
||||
/// Источник метаданных о шоу/сериях (TMDb, OMDb). Реализация ходит во внешний API.
|
||||
///
|
||||
/// Тип шоу передаётся отдельным параметром, а не зашивается в <c>externalId</c>: у TMDb сериалы и
|
||||
/// фильмы нумеруются в разных пространствах, и одно и то же число там означает разное. Хранить
|
||||
/// в идентификаторе синтетический префикс не пришлось — тип и так известен на месте вызова, а
|
||||
/// <see cref="Show.Kind"/> неизменяем, поэтому найденный при поиске идентификатор при любом
|
||||
/// последующем обращении истолкуется тем же типом.
|
||||
/// </summary>
|
||||
public interface IMetadataProvider
|
||||
{
|
||||
/// <summary>Ключ источника: «tmdb», «omdb».</summary>
|
||||
string Key { get; }
|
||||
|
||||
/// <summary>Кандидаты по названию среди контента указанного типа.</summary>
|
||||
Task<IReadOnlyList<MetadataCandidate>> SearchShowsAsync(
|
||||
string query,
|
||||
ShowKind kind,
|
||||
CancellationToken cancellationToken
|
||||
);
|
||||
|
||||
Task<ShowMetadata?> GetShowAsync(string externalId, CancellationToken cancellationToken);
|
||||
/// <summary>
|
||||
/// Метаданные шоу. <paramref name="kind"/> брать из самого шоу, а не из внешнего запроса:
|
||||
/// иначе клиент может заставить записать сериалу метаданные одноимённого фильма.
|
||||
/// </summary>
|
||||
Task<ShowMetadata?> GetShowAsync(
|
||||
string externalId,
|
||||
ShowKind kind,
|
||||
CancellationToken cancellationToken
|
||||
);
|
||||
|
||||
/// <summary>Метаданные серии. Только для <see cref="ShowKind.Series"/> — у остальных серий нет.</summary>
|
||||
Task<EpisodeMetadata?> GetEpisodeAsync(
|
||||
string externalId,
|
||||
int season,
|
||||
|
||||
Reference in New Issue
Block a user