Die Mediathek sah zweisprachig aus — "Despicable Me" neben "Ich einfach unverbesserlich". Es gab nur ein Titelfeld, und welche Sprache darin landete, entschied die Einstellung zum Zeitpunkt des Scans. Movie und Series tragen jetzt zusätzlich OriginalTitle. Gesucht wird über beide: wer "Despicable Me" tippt, findet "Ich einfach unverbesserlich". Auf der Detailseite steht der Originaltitel unter dem übersetzten, wenn er abweicht. Die Sprache der Metadaten ist in der Verwaltung eine Auswahl statt eines Textfelds. Vorher musste man "de-DE" wissen, und ein Tippfehler darin nahm TMDB stillschweigend als Englisch an. Dazu eine eigene Sprache je Benutzer. Das Ehrliche daran steht im Dialog: die Daten liegen in einer Sprache vor, und wer eine andere wählt, bekommt, was übersetzt vorliegt — für den Rest die Serversprache, nicht ein leeres Feld. ItemTranslation hält die zweite Sprache, gefüllt über eine Sammelaktion. Nicht nebenbei beim Öffnen: das verteilte die Wartezeit über Wochen und träfe immer den, der gerade etwas sucht. Alle Sprachen für alle Titel vorzuhalten wäre der Bestand mal Sprachen an Abrufen und Speicher, für einen Haushalt mit zweien. Deshalb auf Ansage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
35 lines
1.3 KiB
C#
35 lines
1.3 KiB
C#
namespace Flaro.Core.Users;
|
|
|
|
/// <summary>Ein Benutzerkonto.</summary>
|
|
///
|
|
/// <remarks>
|
|
/// Mehrbenutzer von Anfang an — auch wenn der erste Server nur einen hat.
|
|
/// Fortschritt und Gesehen-Status je Benutzer nachträglich einzuziehen wäre
|
|
/// ein Umbau am Datenmodell und an jeder Abfrage darauf, kein Zusatz.
|
|
/// </remarks>
|
|
public sealed class User
|
|
{
|
|
/// <summary>Zeitlich geordnet, damit der Index nicht zerfasert.</summary>
|
|
public Guid Id { get; init; } = Guid.CreateVersion7();
|
|
|
|
public required string UserName { get; set; }
|
|
|
|
/// <summary>Im PHC-Format, siehe <see cref="PasswordHasher"/>.</summary>
|
|
public required string PasswordHash { get; set; }
|
|
|
|
public bool IsAdministrator { get; set; }
|
|
|
|
/// <summary>Die bevorzugte Sprache — <c>null</c> heisst: die des Servers.</summary>
|
|
///
|
|
/// <remarks>
|
|
/// <b>Und sie ist nicht kostenlos.</b> Metadaten werden in der Sprache des
|
|
/// Servers geholt und gespeichert. Wer eine andere wählt, bekommt, was in
|
|
/// der Übersetzungstabelle liegt — und für den Rest die Serversprache.
|
|
/// Darauf wird beim Umstellen deutlich hingewiesen; es stillschweigend
|
|
/// halb zu übersetzen wäre schlechter als gar nicht.
|
|
/// </remarks>
|
|
public string? Language { get; set; }
|
|
|
|
public DateTimeOffset CreatedAt { get; init; } = DateTimeOffset.UtcNow;
|
|
}
|