1. Zadání

Co je cílem zadání?

  • Vytvoření statického úložiště v paměti pro globální uchovávání a sdílení seznamu filmů napříč celou aplikací.
  • Definice datového modelu s nastavením striktních pravidel pro uživatelské vstupy, včetně vytvoření vlastní validační logiky pro ohlídání smysluplného letopočtu.
  • Zajištění typové bezpečnosti a minimalizace chyb při výběru kritérií pro řazení záznamů využitím vlastního výčtového typu (enum).
  • Pochopení celého životního cyklu objektů a mechanismu automatického uvolňování paměti (Garbage Collector) prostřednictvím implementace destruktoru.
  • Rozdělení aplikace do více samostatných stránek propojených navigačními odkazy a předáváním identifikátorů přes dynamické parametry v URL adrese.
  • Zajištění kompletní správy záznamů zahrnující zakládání nových položek s automatickým výpočtem ID, bezpečné upravování existujících dat přes dočasnou kopii a mazání nechtěných záznamů.
  • Vytvoření interaktivního hlavního katalogu, který uživateli umožňuje dynamicky filtrovat zobrazená data podle žánru a volitelně je seřazovat podle nejrůznějších kritérií.

Zadání

Vytvořte třídu Film, která bude mít vlastnosti Id, Nazev, RokVydani, Reziser, Zanr a Popis. U vlastností nastavte adekvátní validace [Required]. Dále vytvořte vlastní validační atribut [RokDoSoucasnosti], který zajistí, že zadaný rok vydání nebude v budoucnosti. Na samotný konec třídy doplňte destruktor ~Film(), který při uvolnění objektu z paměti vypíše do konzole zprávu o jeho odstranění. Pro bezpečné přepínání způsobů řazení nadefinujte mimo třídu Film také vlastní enum KriteriumRazeni.

Pro dočasné uchování dat během přecházení mezi stránkami vytvořte statickou třídu DatabazeFilmu, která bude obsahovat list těchto filmů. Do složky wwwroot/data připravte lokální soubor filmy.json obsahující výchozí pole alespoň 10 filmů.

V Razor komponentách vytvořte vícestránkovou aplikaci využívající Blazor směrování:

  1. Hlavní stránka (/): Zde při prvním spuštění načtěte data z JSON souboru. Zobrazte je v tabulce. Nad tabulku přidejte ovládací prvky, kterými může uživatel seznam dynamicky filtrovat (podle žánru) a řadit (abecedně, od nejstarších), přičemž k bezpečné aplikaci logiky řazení využijete svůj nově vytvořený enum. Každý řádek tabulky bude mít tlačítka pro detail, úpravu a okamžité smazání filmu. (Tip: Pro snazší demonstraci destruktoru můžete při smazání volitelně vynutit úklid paměti voláním GC.Collect()).
  2. Formulářové stránky (/pridat a /upravit/{Id:int}): Vytvořte komponenty obsahující <EditForm>. Umožněte uživateli přidávat nová data nebo upravovat ta existující s využitím vašich nastavených validací.
  3. Detail filmu (/film/{Id:int}): Stránka, která si z URL adresy převezme ID a z paměti aplikace vypíše kompletní informace o daném filmu, včetně jeho děje (popisu).

Příklad, jak by mohla stránka vypadat:

Pokud se okno nenačetlo, klikněte zde.