Logo Czechitas
Vloženo: 12. 5. 2018

Úkol 11 - Pexeso s REST API

Ukolem je predelat pexeso tak, aby negenerovalo webove stranky z sablon ThymeLeafu, ale aby vystavovalo REST API a to bylo konzumovano staticky web s JavaScriptem.

1. Rozbehnuti a prozkoumani architektury

Nejprve prozkoumejte nasazenou aplikaci pexesa na https://margot.tomcat.cloud/ukol11/.

Obzlvast se podivejte, jak tam funguje JavaScript a jake dela pozadavky pomoci XMLHttpRequest. Zkuste si vyvolat ekvivalentni pozadavek samy. Bud pomoci prohlizece nebo pomoci online nastroje hurl.it.

2. Predelani komponenty HlavniController

Materialy pro pexeso najdete zde: Ukol11-pexeso-REST_API.zip

Srovnejte, jak se lisi projekty 10-Pexeso-ThymeLeaf a 20-Pexeso-REST_API-zadani.

Zamerme se na HlavniController. Jeho puvodni podoba z minuleho ukolu byla asi takovato:

@Controller
public class HlavniController {

    @RequestMapping(value = "/")
    public String zobrazIndex();

    @RequestMapping(value = "/stul.html", method = RequestMethod.GET)
    public ModelAndView zobrazStul(@RequestParam("id") Long id);

    @RequestMapping(value = "/stul.html", method = RequestMethod.POST)
    public String zpracujTah(@RequestParam("id") Long idHerniPlochy,
                             @RequestParam Map<String, String> allParams);

}

Nova podoba by mohla byt takovato:

@Controller
public class HlavniController {

    @RequestMapping(value = "/")
    public String zobrazIndex();

    @RequestMapping(value = "/api/stul", method = RequestMethod.GET)
    public @ResponseBody HerniPlocha zobrazStul(@RequestParam("id") Long id);

    @RequestMapping(value = "/api/stul", method = RequestMethod.POST)
    public @ResponseBody HerniPlocha zpracujTah(@RequestParam("id") Long idHerniPlochy,
                                                @RequestBody Tah vybranaKarta);
}

Poznamka: Moje metoda zpracujTah(...) prijima Tah, coz je objekt nesouci pozici vybrane karty:

public class Tah {

    private int poziceKarty;

    public int getPoziceKarty() {
        return poziceKarty;
    }

    public void setPoziceKarty(int newValue) {
        poziceKarty = newValue;
    }
}

Naprogramujte tedy metody v HlavniController tak, aby JavaScript fungoval.

PexesoService ani zbytek aplikace se nemusi menit. Menime jen webovou vrstvu.

3. Provedeni stejne zmeny ve vasi verzi pexesa

Vyjdete ze sveho reseni pexesa z ukolu 10 a zkuste i predelat webovou stranku na pouziti JavaScriptu/AJAXu.

Pokud byste nemely svoji verzi pexesa, ale stejne si chtely vyzkouset tento podukol, muzete vyjit z 10-Pexeso-ThymeLeaf a predelat si tento projekt.

Poznamka: V moji minule verzi pexesa byla zabudovana nesikovnost: Na server se neposilala pozice karty, na kterou se kliknulo, ale cislo karty (= dvojnasobek cisla obrazku karty). Tim padem se hra dala dohrat snadno, kdyz se hrac podival do zdrojoveho textu HTML v prohlizeci, ktera cisla karet jsou na webove strance kde umistena. Tuto nesikovnost jsem opravil v puvodni verzi a v REST API je tato oprava uz zohlednena.

Odevzdání domácího úkolu

Svoje pexeso vystavte na Tomcat.cloud na https://sladkost.tomcat.cloud/ukol11/.

Ukázkové pexeso můžete vidět na https://margot.tomcat.cloud/ukol11/.

Projekty nejprve zbavte přeložených artefaktů, aby byly menší. To zařídíte ručním smazáním složky PROJEKT/target nebo pomocí v IntelliJ IDEA -> Maven Projects -> ukol -> Lifecycle -> clean. Poté projekty zabalte pomocí 7-Zipu pod jménem Ukol11-Vase_Jmeno.7z. Lze použít i jen prostý zip (například na Macu).

Takto vytvořený archív nahrajte na Google Drive do složky Ukol11.

Vytvořte archív .war v IntelliJ IDEA -> Maven Projects -> ukol -> Lifecycle -> clean a následně IntelliJ IDEA -> Maven Projects -> ukol -> Lifecycle -> package. Goal package vytvoří archív .war PROJEKT/target/ukol11.war. Nasaďte jej do vašeho lokálního Tomcatu (JAVATRAINING/Tomcat/webapps) a vyzkoušejte, že funguje (https://localhost:8080/ukol11/).

Po odladění nasaďte tento archív ještě přes FTP na server Tomcat.cloud (https://sladkost.tomcat.cloud/ukol11/).

Vytvořte snímek obrazovky spuštěného programu a pochlubte se s ním ve fotoalbu Úkol11 na Facebooku.

Pokud byste chtěli odevzdat revizi úkolu (např. po opravě), zabalte ji a nahrajte ji na stejný Google Drive znovu, jen tentokrát se jménem Ukol11-Vase_Jmeno-verze2.7z

Termín odevzdání je do středy 16. 5. 2018 23:59. Pokud úkol nebo revizi odevzdáte později, prosím pošlete svému opravujícímu kouči/lektorovi email nebo zprávu přes FB.