Implement episode metadata management: add functionality to refresh episode metadata from external sources, including new API endpoints and UI integration. Enhance Show and Episode models to support additional metadata fields, and update database schema accordingly. Update ShowDetail and ShowMetadataCard components to display refreshed episode information and provide user feedback on metadata updates.

This commit is contained in:
Leonid Pershin
2026-07-25 09:46:19 +03:00
parent 0d2dee815e
commit 7fb46b5e0d
30 changed files with 1563 additions and 81 deletions
@@ -1,6 +1,6 @@
namespace TeleWave.Domain.Library;
/// <summary>Одна серия шоу — ссылка на медиа-ассет и позиция в порядке показа.</summary>
/// <summary>Одна серия шоу — ссылка на медиа-ассет и позиция в порядке показа + метаданные.</summary>
public class ShowEpisode
{
public Guid Id { get; private set; }
@@ -10,6 +10,18 @@ public class ShowEpisode
/// <summary>Порядковый номер внутри шоу (может иметь разрывы после удалений).</summary>
public int Position { get; private set; }
/// <summary>Распознанные сезон/серия (из имени файла) — база для довыгрузки метаданных.</summary>
public int? Season { get; private set; }
public int? Episode { get; private set; }
// ── Метаданные серии ──
public string? Title { get; private set; }
public string? Overview { get; private set; }
/// <summary>Относительный путь локального кадра или null.</summary>
public string? StillPath { get; private set; }
public DateOnly? AirDate { get; private set; }
public DateTimeOffset CreatedAt { get; private set; }
private ShowEpisode() { }
@@ -23,4 +35,29 @@ public class ShowEpisode
Position = position,
CreatedAt = DateTimeOffset.UtcNow,
};
/// <summary>Проставить распознанные номера сезона/серии.</summary>
public void SetNumbers(int? season, int? episode)
{
Season = season;
Episode = episode;
}
/// <summary>Применить метаданные серии (кадр — уже скачанный локально — может быть null).</summary>
public void ApplyMetadata(string? title, string? overview, string? stillPath, DateOnly? airDate)
{
Title = title;
Overview = overview;
if (stillPath is not null)
StillPath = stillPath;
AirDate = airDate;
}
public void ClearMetadata()
{
Title = null;
Overview = null;
StillPath = null;
AirDate = null;
}
}