Zadání Soutěžního kola

Zadání Soutěžního kola navazovalo na kolo Nominační a bylo soutěžícím předáváno prostřednictvím fiktivních zákazníků. Požadavky, na základě kterých hodnocení probíhalo, naleznete v tomto dokumentu.

Zadání Nominačního kola

Tour de App je zde! A na této stránce naleznete zadání k vypracování Nominačního kola včetně instrukcí pro odevzdávání. 

Tréninkový deník pro programátory

Když se řekne Tour de …, nejspíš se vám vybaví Tour de France. Třítýdenní etapový závod v silniční cyklistice, který prověří fyzickou připravenost sportovců a dostanou na hranice svých možností.

Tour de App se svému sportovnímu protějšku v mnohém podobá. Soutěžní kolo také potrvá tři týdny a i vám umožníme se přiblížit (a posunout) hranici svých schopností – jen ne těch fyzických, ale programátorských.

K tomu, abyste byli na jakoukoliv Tour připraveni, je potřeba pravidelný trénink. A takový trénink je vhodné sledovat a mít možnost ho analyzovat. Sportovci jsou zvyklí si psát tréninkové deníky, a tak jsme se i my rozhodli, že si v rámci Nominačního kola jeden vytvoříte.

Vaším úkolem bude vyvinout tréninkový deník pro programátory.

Základní funkcionalita

Do tohoto deníku si budete moct zaznamenat, kolik času jste věnovali právě programování. V základní verzi budete moct vytvářet záznamy, kdy každý záznam bude uchovávat následující informace: datum, programovací jazyk, strávený čas v minutách, hodnocení na pětistupňové škále, jak dobře to šlo a popis toho, co jste dělali. Tyto záznamy bude možné přidat, upravit a smazat.

Programovací jazyky můžou být v aplikaci předdefinované.

K postupu do online kola je nutné, aby vaše aplikace obsahovala specifikovanou základní funkcionalitu spolu s přívětivým uživatelským rozhraním a byla odevzdána dle následujících pokynů.

Odevzdání aplikace

K úspěšnému odevzdání vaší aplikace musíte provést následující:

  • Kód vaší aplikace nahrát do repozitáře na platformě github.com a přidat jako spolupracovníka (‘collaborator’) uživatele “Tour-de-App-User”.
  • využít Github akci https://github.com/Tour-de-App/upload-app která se postará o nasazení na náš server. Jako parametry musíte této akci předat:
    • docker image vaší aplikace (dostupné na portu 80)
    • jeho název
    • identifikační token (TEAM_SECRET) poskytnutý při registraci.

Pokud jste se s Dockerem či Githubem ještě nesetkali, doporučujeme vám využít jednu z námi připravených šablon, které se postarají o vytvoření docker image a spuštění github akce a vykonají tak většinu práce za vás. Podrobný návod naleznete v tomto článku. 

Aplikace bude pro vaši kontrolu k dispozici na http://public-{TEAM_SECRET}.tourdeapp.cz po dobu jedné hodiny po spuštění Github akce.

Provedení odevzdávání není předmětem hodnocení soutěže. Nebojte se tedy se poradit se svými spolužáky, učiteli či se zeptat na našem Discordu. Rádi vám poradíme a pomůžeme.

Rozšíření

Po dokončení základní funkcionality se pusťte do některého z rozšíření. Body za jejich splnění vám můžou pomoct k postupu do Soutěžního kola, ale především v něm využijete získané znalosti a zkušenosti.

Červené rozšiření

Jako první můžete přidat možnost řadit své záznamy podle jednotlivých atributů (od nejdelšího stráveného času po nejkratší, podle vašeho hodnocení…).

Zároveň přidejte možnost filtrace dle:

  • Datum od – do
  • Časový interval 
  • Hodnota programovacího jazyka
  • Hodnocení od – do

V případě více filtrů je aplikována logická operace „AND“. Tj. jsou vybrány prvky, které splňují obě kritéria.

Zelené rozšiření

Druhé rozšíření, je přidat možnost sledovat “trénink” pro více programátorů. Vašim úkolem bude uživateli umožnit v aplikaci vytvářet, upravovat a mazat programátory. Budete je moct přidat a ke každému vytvářet jeho vlastní záznamy. Bude možné zobrazit pouze záznamy patřící konkrétnímu programátorovi.

Ke každému programátorovi budete uchovávat údaje o jeho jménu.

V případě odstranění programátora jsou zároveň odstraňeny i všechny záznamy daného programátora.

Modré rozšiření

Třetí rozšíření je o přidání kategorií ve formě tagů či štítků. Umožníte uživateli definovat vlastní kategorie, které bude moct jednotlivým záznamům přiřadit. Jednomu záznamu bude možné přiřadit více těchto kategorií / štítků.

Každá kategorie bude uchovávat informace o jejím názvu, barvě a popisu.

Uživatel bude moct zobrazit záznamy příslušící k jedné kategorii, nebo také záznamy příslušící k více kategoriím zároveň.
Odstranění kategorie či záznamu nebude mít vliv na kategorie či záznamy s nimi spojené.

Černé rozšiření

Poslední rozšíření není o funkcionalitě, ale o bezpečnosti. Vaše aplikace by měla být odolná vůči základním útokům typu SQL injection a Cross-site scripting.
Tedy pokud uživatel například přidá programátora se jménem „Robert’); DROP TABLE Records;--“, nesmaže tím všechny existující záznamy. (viz. https://xkcd.com/327/) 

 

Požadavky

Teď, když už máte o systému dobrou představu, se podívejte na požadavky, dle kterých budeme hodnotit funkcionalitu vašeho řešení. Nezapomeňte, že mimo ně hraje roli i design a user experience.