VAII Cvičenie 09
Momentálne je otvorená vetva MAIN, ktorá obsahuje štartér. Riešenie obsahuje vetva SOLUTION.
- Vytvorte metódu
showJson()
v kontrolériHomeController
. Metóda vytvorí jednu správu (modelMessage
) a zobrazí ju vo formáte JSON. - Preštudujte si pohľad
sendJson.view.php
. Čo robí? - Vytvorte metódu
receiveJson()
v kontrolériHomeController
. Metóda príjme JSON data správy a pošle ich späť.
Cieľom tohto cvičenia je vytvoriť webové API k serverovej časti chatovacej aplikácie s použitím frameworku vajiíčko. Samotný chat budeme vytvárať na ďalšom cvičení.
Preštudujte si súbory v štartéri. V adresári docker\sql
sa nachádza súbor ddl.sql
, ktorý Vám vytvorí DB tabuľky, potrebné pre tento projekt. Takisto
štartér obsahuje Vaííčko framework. Projekt obsahuje aj SimpleAuthenticator
na jednoduché overenie mena a hesla. V projekte sa takisto nachádzajú aj
pripravené kontroléry AuthApiController
a MessageApiController
. V nich budete implementovať jednotlivé akcie. V projekte sú aj modely Login
a Message
,
ktoré zodpovedajú tabuľkám v DB. Všimnite si implementáciu metód isActive()
a getAllActive()
v triede Login
. Prezrite si aj testy v
súbore \test\Tests.http
. Skúste ich spustiť. Úlohou cvičenia bude implementovať metódy kontrolérov tak, aby všetky testy prebehli úspešne.
AuthApiController
- Má na starosti operácie týkajúce sa používateľa a vracia informácie o ňom. Obsahuje nasledovné akcie:index
- Keďže ide o API, akciaindex
bude vracať HTTP kód 501 Not Implemented.login
- Akcia bude očakávať odoslanie prihlasovacích údajov v JSON objekte s dvomi atribútmilogin
apassword
. V prípade, ak ich objekt nebude obsahovať, alebo budú mať prázdnu hodnotu, vráti HTTP kód 400 Bad Request. Ak sa podarí prihlásenie, vytvorí sa nový modelLogin
s aktuálnym časom. Ak už prihlásenie existuje, upraví sa jeho atribútlast_action
. Po úspešnom overení používateľa sa vráti klientovi prázdna odpoveď ( empty response).logout
- Skontroluje, či je používateľ prihlásený. Ak áno, odhlási ho a zmaže záznam o jeho logine z DB. Ak nie je prihlásený, neurobí nič. Na konci vždy vráti klientovi empty response.status
- Ak je používateľ prihlásený, klient dostane JSON odpoveď s objektom, ktorý obsahuje atribútlogin
a má hodnotu aktuálne mena prihláseného používateľa. Neprihlásenému používateľovi vráti HTTP kód 401 Unauthorized.activeUsers
- Ak je používateľ prihlásený, klient dostane JSON odpoveď v podobe poľa objektov typuLogin
používateľov, ktorí sú aktívni. Aktívny používateľ je každý používateľ po dobu 30 sekúnd od posledného dopytu na získanie správ. Pokiaľ žiadnych aktívnych používateľov nenájde, vráti prázdne pole. Ak je používateľ neprihlásený, vráti HTTP kód 401 Unauthorized.
MessageApiController
- Poskytuje API pre odosielanie a získavanie správ. Všetky akcie tohto kontroléra sú určené iba pre prihlásených používateľov.index
- Keďže sa jedná o API, index bude vracať HTTP kód 501 Not Implemented.sendMessage
- Očakáva odoslanie správy s dvoma povinnými atribútmi:recipient
amessage
. Ak ich objekt neobsahuje, klientovi sa zašle HTTP odpoveď 400 Bad Request. Ďalšie podrobnosti:- Atribút
recipient
obsahujenull
, ak je správa verejná. Ak je správa privátna, tento atribút obsahuje login používateľa, komu je určená. - Atribút
message
nesmie obsahovať prázdnu hodnotu. - Ak atribút
recipient
obsahuje hodnotu a daný používateľ nie je aktívny, klientovi sa zašle HTTP odpoveď 400 The recipient is not available. - Po uložení správy na serveri, sa klientovi zašle empty response.
- Atribút
getMessages
- Vráti všetky správy. Pošlú sa správy, ktoré používateľ odoslal, verejné správy a jemu poslané privátne správy. Metóda môže prijať parameterlastId
, ktorý klientovi zašle správy od zadaného id.
Pár poznámok k testom:
- Testy needitujte.
- Vytvorte API tak, aby všetky testy prebehli úspešne.
- Jednotlivé HTTP dopyty sa dajú púšťať jednotlivo, niektoré sú závislé ne iných testoch, preto nemusia byť úspešné.
Pokiaľ sa chcete dostať k riešeniu z cvičenia je potrebné otvoriť si príslušnú vetvu, ktorej názov sa skladá:
MIESTNOST + "-" + HODINA ZAČIATKU + "-" + DEN
Ak teda navštevujete cvičenie pondelok o 08:00 v RA323, tak sa vaša vetva bude volať: RA323-08-PON
Cvičenie používa framework vaííčko dostupný v repozitári https://github.com/thevajko/vaiicko. Pre úspešné riešenie
projektu je potrebné spustiť docker konfiguráciu zo súboru docker\docker-compose.yml
.