<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Saasma</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Saasma"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Saasma"/>
	<updated>2026-05-05T19:19:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131463</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131463"/>
		<updated>2018-06-08T20:33:04Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Projekti repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval 27.05 seisuga: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
Uuendatud .zip fail 08.06 seisuga: https://github.com/sikumiku/TaisKohtApi/archive/7acbc702b13550daee840069ca9be886807dd900.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/owner&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 01.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;br /&gt;
&lt;br /&gt;
=== 05.06.2018 ===&lt;br /&gt;
Lisatud XML retsensioon meeskonnale MOT&lt;br /&gt;
&lt;br /&gt;
=== 08.06.2018 ===&lt;br /&gt;
Lisatud uus projekti .zip muudatustega ja täiendustega&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131450</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131450"/>
		<updated>2018-06-08T18:54:45Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Logiraamat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval 27.05 seisuga: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
Uuendatud .zip fail 08.06 seisuga: http://enos.itcollege.ee/~saasma/VR2/TaisKoht/&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/owner&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 01.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;br /&gt;
&lt;br /&gt;
=== 05.06.2018 ===&lt;br /&gt;
Lisatud XML retsensioon meeskonnale MOT&lt;br /&gt;
&lt;br /&gt;
=== 08.06.2018 ===&lt;br /&gt;
Lisatud uus projekti .zip muudatustega ja täiendustega&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131449</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131449"/>
		<updated>2018-06-08T18:52:44Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Projekti repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval 27.05 seisuga: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
Uuendatud .zip fail 08.06 seisuga: http://enos.itcollege.ee/~saasma/VR2/TaisKoht/&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/owner&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 01.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;br /&gt;
&lt;br /&gt;
=== 05.06.2018 ===&lt;br /&gt;
Lisatud XML retsensioon meeskonnale MOT&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131350</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131350"/>
		<updated>2018-06-05T18:32:16Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Logiraamat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 01.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;br /&gt;
&lt;br /&gt;
=== 05.06.2018 ===&lt;br /&gt;
Lisatud XML retsensioon meeskonnale MOT&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131349</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131349"/>
		<updated>2018-06-05T18:31:47Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Retsensioonid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevapakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#XML_retsensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 01.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:MOT&amp;diff=131348</id>
		<title>Talk:MOT</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:MOT&amp;diff=131348"/>
		<updated>2018-06-05T18:30:46Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* XML retsensioon by meeskond BeerPressure: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Veebiteenuse retsensensioon by meeskond BeerPressure: ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Üldiselt:&#039;&#039;&#039;&lt;br /&gt;
* Puudub README vms. Dokumentatsioon projekti ülespanemiseks ja seadistamiseks.&lt;br /&gt;
* Rollide loomine vigane, seda võiks teha eraldi failis, mis on DAL.App.EF projektis (kasutasime algul sama lähenemist nagu antud projekt). Takistab esialgset andmebaasi uuendust, kui rollid veel puuduvad. Rakenduse installimine tarnitud kujul ei õnnestunud. Selleks et Nuget Package Manageri käsk Update-Database töötaks pidi ajutiselt välja kommenteerima Startup.cs faili rea 153 (// CreateRoles(services).Wait();).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Andmebaasist:&#039;&#039;&#039;&lt;br /&gt;
* Üldiselt paneksin igale väljale juurde AddTime ja UpdateTime see on hea tava millest korduvalt ka andmebaasi alustes räägiti ja rõhutati. Kuid antud projekti juures on see pigem nice-to-have.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Olemitest:&#039;&#039;&#039;&lt;br /&gt;
* Kui juba domainis nimetate kõik olemid singulaarselt siis võiks ju sama teha ka andmebaasis - lisakeerukuse loomine kohas kus see ei ole vajalik.&lt;br /&gt;
* Entity-te arv oli nõutust väiksem - Kokku 8 olemit, millest 1 on many-to-many liittabel ja 1 otsene koopia Identity framework Users tabelist. &lt;br /&gt;
* Olem People mis on põhimõtteliselt Usersite laiend ja sisaldab ka viidet Identity tabelile ApplicationUsers (ApplicationUserId). Juhul kui see on mõeldud rakendusega mitte registreerunud kasutajate võistlusele kirja panemiseks, siis oleks olemil rohkem infot vaja - vähemalt mingigi kontakti väli (email |/&amp;amp; tel.nr. |/&amp;amp; aadress). &lt;br /&gt;
* Competition.Comment on varchar(100) - võiks ja peaks olema varchar(1000)&lt;br /&gt;
* Competition.CompetitionPlaceId - kui võistluse toimumiskoht mingil põhjusel peaks keelduma korraldusest või kui võistlust alles pannakse kokku ja ei ole veel teada kus see toimuma saab siis peaks saama sinna sisestada NULL väärtust.&lt;br /&gt;
* Competition.Time -&amp;gt; Mis aega see näitab? Property nimest seda välja ei loe. Kui StartTime, siis kus on EndTime või Duration?&lt;br /&gt;
* CompetitionPlace.County -&amp;gt; int type enum default väärtus on 0, kuna see pole aga enumi klassis implementeeritud põhjustab see tn. kunagi kuskil vea. (Millisele maakonnale vastab 0?) See on teada tuntud probleem millele google annab hõlpsasti erinevaid lahendusi: näiteks [https://stackoverflow.com/questions/24350377/entity-framework-6-code-first-required-enum-data-type-not-working?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin] ja [https://stackoverflow.com/questions/529929/choosing-the-default-value-of-an-enum-type-without-having-to-change-values/529937?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin].&lt;br /&gt;
* Väljad mis viitavad Identity framework olemitele läbi nende ID-de ei peaks olema nvarchar(max) vaid nvarchar(450) (kuigi isegi see on reaalsuses liiga pikk).&lt;br /&gt;
* PersonInTeam.PersonInTeamId -&amp;gt; ei peaks olema sellist välja üldse, selle tabeli PK peaks olema kombinatsioon nende tabeli ID-st mida ta ühendab. Praegu ei ole unique indeksit üle nende, mis tähendab et sama inimene saab mitu korda sama tiimiga liituda.&lt;br /&gt;
* Participations - Miks selline nimi, kui registreerimine juba oli? Saan aru et selles olemis tahetakse säilitada võistluse tulemusi. Siis võiks ju juba olla CompetitionResults. Kus on aga saavutatud koha numbri talletamine? Kui võistluse punktid ja ajad on kõik kirja saadud siis tahaks ju tulemusi ka kuidagi näha ja võrrelda ning selle võrdluse tulemi kuhugi salvestada.&lt;br /&gt;
* Participations.Time - Mis aega näitab? Eeldan, et võistluse läbimise aega? Kui nii, siis miks ei ole NULL lubatud - mõnedel võistlustel aega ju ei mõõdeta?&lt;br /&gt;
* Participation.Points - Kas igal võistlusel antakse ainult täisarv punkte (int)? Võiks igaks juhuks siiski implementeerida double väärtuse tüübi. Lisaks ei ole võimalik osalust luua ilma punkte teadmata - peaks siis määrama default väärtus. Mõnede võistluste puhul jälle punkte ei anta vaid mõõdetakse aega - võibolla peaks ka NULL-i lubama.&lt;br /&gt;
* Participation.Disqualified - Nullid ei ole lubatud -&amp;gt; järelikult oleks default väärtust vaja.&lt;br /&gt;
* Registrations - Projekti Must have alla on märgitud “Osaleja saab registreerida võistlusele meeskonda” kuid olemis puudub TeamsId ning samuti ei ole seda võimalust kuidagi läbi Servicei implementeeritud.&lt;br /&gt;
* Registrations - Millal registreering tehti on suhteliselt tähtis teada. Paljude võistluste puhul sõltub sellest näiteks registreerimistasu. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DTO-d:&#039;&#039;&#039;&lt;br /&gt;
* Hetkel tundub nagu rakendus otseselt seda abstraktsiooni kihti ära ei kasuta. Kõik DTO-d konverteeritakse ümber 1:1-le Domain objektideks ja vastupidi.&lt;br /&gt;
* Üldiselt oleks vaja teha tööd veel DTOdega, et need rohkem peegeldaksid oma kasutust. Näiteks:&lt;br /&gt;
küsides kõiki võistlusi, kas meil on tarvis avalikustada kliendile, mis on kasutaja ID, kes iga võistluse lõi? DTOsid võiks olla rohkem erinevate kasutusjuhtumite jaoks. &lt;br /&gt;
CompetitionDTO võiks sisaldada ka nimekirja võistlejatest, kus koondatakse info ManyToMany seoste põhjal kasutades vahetabelit, nagu näiteks:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
List&amp;lt;PersonDTO&amp;gt; people = c.Participation&lt;br /&gt;
.FindAll(p =&amp;gt; p.CompetitionId == c.CompetitionId)&lt;br /&gt;
.Select(PersonDTO.CreateFromParticipation)&lt;br /&gt;
.ToList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;API Kontrolleritest:&#039;&#039;&#039;&lt;br /&gt;
* Puudub Swagger startup konfiguratsioon, Swagger annotatsioonid kaotavad mõtte ning pole võimalik kontrollida, kas need on korrektselt loodud.&lt;br /&gt;
* ProducesResponse annotatsiooni pole kusagile lisatud, staatuskoodid on natuke poolikult läbi mõeldud, vähemalt need, mida Swaggeri raames mainitud on&lt;br /&gt;
* Annotatsioon Authorize, kus on ära määratud AuthorizationScheme peaks minema kogu klassi peale, meetodis saab ära määrata vaid selle, mis rollid on lubatud.&lt;br /&gt;
* Kontrollerid enamuses pöörduvad vaid spetsiifiliste domeenide poole ja viivad ellu väga tavalist CRUD funktsionaalsust, mille tõttu tundub, et need on natuke veel toored. Näiteks on välja toodud “must have” nimekirjas projekti analüüsis, et meeskonna liige peaks saama muuta meeskonna andmeid. Antud kontrollerites vaid autentitakse, et kasutaja oleks rollis “participant”, kuid mitte seda, kas ta ka muudetava meeskonna liige on. Samuti pole võimalik kasutajatel näha, palju on mingile võistlusele osalejaid registreerunud, &lt;br /&gt;
* CompetitionsController ei tegele sellega, et tagastada võistlusele registreerunud kasutajaid, selle asemel on olemas ParticipationsController, mis tagastab vahetabeli infot selle kohta, mis võistlusega on seotud mis inimene. See võib olla tohutult suur info, mida hakata filtreerima kliendi poolelt. Rohkem tuleks teha andmete agregeerimist vastavalt teenuse kontekstile.  &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AccountController&#039;&#039;&#039;&lt;br /&gt;
** Response code uue kasutaja loomisel võiks olla 201&lt;br /&gt;
** Puuduvad koodid nagu 429, 500&lt;br /&gt;
** Registreerumisel võiks kontrollida, kas kasutaja on juba olemas, mitte vaid rolli olemasolu&lt;br /&gt;
** Kas kasutajal ei või antud kontekstis olla mitu rolli? Sisselogimisel võetakse rollide seast vaid esimene ja lisatakse juurde Claimile. Võimalus kirjutada ka meetod, mis lisab kasutajale kõik rollid.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CompetitionPlacesController/CompetitionsController/CompetitionTypesController/ParticipationsController/RegistrationsController/TeamsController&#039;&#039;&#039;&lt;br /&gt;
** Antud kontrollerid on kõik väga sarnase loogikaga&lt;br /&gt;
** Get() tagastab vaid koodi 200, tagastuskoodi võimalusi on veel&lt;br /&gt;
** Post() meetod küsib sisse DTOd, mille üheks parameetriks on id, id genereeritakse automaatselt, seda ei peaks panema kaasa postitatavasse mudelisse, mis alles loob objekti&lt;br /&gt;
** Put() puhul sama kriitika, siin on id küll vajalik, aga see juba pannakse kaasa parameetrina eraldi&lt;br /&gt;
** See tundub natuke veidrana üritada kontrollida uuendatud mudeli põhjal, kas tegemist oli BadRequestiga. Eelkõige peaks id puhul üle otsima, kas antud objekt on üldse olemas ja seejärel üritada uuendada, muidu tagastada BadRequest. Kui see ei õnnestu, siis peaks juba errorkood 500 peegeldama seda, et midagi läks teenuse poole peal valesti. &lt;br /&gt;
** Sama kommentaar deletemise kohta, enne tuleks kontrollida, kas objekt on olemas. Siis alles objekt kustutada.&lt;br /&gt;
* &#039;&#039;&#039;PeopleController&#039;&#039;&#039;&lt;br /&gt;
** Kas tõepoolest igaüks saab pärida infot inimeste kohta ja neid postitada? &lt;br /&gt;
* &#039;&#039;&#039;PersonInTeamsController&#039;&#039;&#039; &lt;br /&gt;
** API disaini poole pealt on natuke veider teha vahetabelite kohta kontroller. Tundub loogilisem panna antud kontrolleri meetodid teistesse kontroleritesse, mis on seotud siis kas meeskondade või inimestega. Näiteks küsida PeopleControlleris kõik inimesed, kes on meeskondades või küsida neid meeskonna järgi. TeamsControlleris seevastu anda võimalus lisada uusi inimesi meeskonda, neid muuta või eemaldada.&lt;br /&gt;
** Id järgi ei hakka ükski klient küsima vahetabeli kohta infot, see tundub otstarbetu tegevus, pigem küsida kas meeskonna või inimese id järgi sissekandeid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti kihid/struktuur:&#039;&#039;&#039; &lt;br /&gt;
* Olemas Business Logic, Data Access Layer, DTO’d, Service’id, Unit of Work, domeeniklassid ning API spetsiifilised kontrollerid, mis asuvad oma kaustas põhiprojekti all. &lt;br /&gt;
* DAL omab erinevaid kihte interface’ide ja neid implementeerivate klasside jaoks.&lt;br /&gt;
* Repositooriumitega suhtlemine on abstraktne, kõik käib läbi Data Access Layer’i, mille pööle pöörduvad teenuseklassid ning DAL erinevad kihid hoolitsevad selle eest, et loodaks õiget tüüpi repositooriumeid, andmeid agregeeritakse, uuendatakse ja salvestatakse organiseeritud kujul ning neid tagastatakse teenustele soovitud kujul (DTOd).&lt;br /&gt;
&lt;br /&gt;
== XML retsensioon by meeskond BeerPressure: ==&lt;br /&gt;
&lt;br /&gt;
=== Üldine arvustus ===&lt;br /&gt;
&lt;br /&gt;
* Olemas on kõik nõutud failid: XML fail, XML faili skeemifail, XMLi transformeerimine HTMLi ja XMLi transformeerimine XMLi.&lt;br /&gt;
* Kõik failid valideeruvad eraldiseisvalt. XML fail valideerub ka vastu skeemi faili ja stiilifaile.&lt;br /&gt;
* Failid on hästi jälgitavad ja loetavad.&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
* Nõutud oli, et XML failil on vähemalt 4 loogilist dimensiooni, antud töös on kuni 7 loogilist dimensiooni. &lt;br /&gt;
* Nõutud oli, et kolmel dimensioonil tuleb kasutada attribuute, mis on enamat, kui lihtsalt ID. Antud töös on atribuute, mis on enamat kui ID, kasutatud kolme erineva elemendi juures.&lt;br /&gt;
* Väike tähelepanek, et tavaliselt, kui on mingi element mitmuses, siis selle sees kasutatakse sama nimetust ainsuses, näiteks elemendi &amp;lt;inimesed&amp;gt; sees on &amp;lt;inimene&amp;gt;, antud juhul võiks olla ka elemendi &amp;lt;registrations&amp;gt; sees &amp;lt;registration&amp;gt;. Näiteks, kui on vaja mingi konkreetse registreerimise poole pöörduda, siis võib tekkida segadus, kui selle asemel peab pöörduma person’i või team’i poole.&lt;br /&gt;
&lt;br /&gt;
=== XSD (XML faili skeemifail) ===&lt;br /&gt;
&lt;br /&gt;
* Skeemifail on genereeritud automaatselt ja muudetud on kahte andmetüüpi. &lt;br /&gt;
** Id’del on asendatud type=&amp;quot;xs:unsignedByte&amp;quot; tüübiga type=&amp;quot;xs:int&amp;quot;, mis on ka loogiline, sest esialgne andmetüüp võimaldab salvestada id’sid ainult vahemikus 0-255. &lt;br /&gt;
** PersonalIdCode esialgne type=&amp;quot;xs:unsignedLong&amp;quot; on asendatud type=&amp;quot;xs:string&amp;quot;, mis on samuti sobilik muudatus.&lt;br /&gt;
&lt;br /&gt;
=== XSLT1 (XML&#039;i transformeerimine HTML&#039;i) ===&lt;br /&gt;
&lt;br /&gt;
* Mõlema XSLT faili puhul on tehtud kas näpukas või on sassi aetud faili tüüp, mainitud on XLS mitte XSL/XSLT.&lt;br /&gt;
* Erinevate andmete kuvamiseks HTMLis on kasutatud:&lt;br /&gt;
** ühte for-each tsüklit,&lt;br /&gt;
** ühte if-tingimuslauset,&lt;br /&gt;
** Ühte choose tingimuslauset, mille sees on nii ühel kui teisel juhul üks for-each tsükkel.&lt;br /&gt;
&lt;br /&gt;
=== XSLT1 (XML&#039;i transformeerimine XML&#039;i) ===&lt;br /&gt;
&lt;br /&gt;
* XML kuvamisel on muudetud XML faili struktuuri, selleks on kasutatud kahte for-each tsüklit ja mõlema sees ühte if-tingimuslauset.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131221</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=131221"/>
		<updated>2018-06-04T09:04:08Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Kaitsmisele registreerumine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
Kaitsmisele tuleks registreerida järjest(st iga järgmine lisab vajaliku 15min ajaakna) ja suvalisis kellaaegasid ei hakka kuhugi vahele kirjutama&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;05.06.2018&#039;&#039;&#039;&lt;br /&gt;
*15:00 - Miisiks&lt;br /&gt;
*15:15 - ..&lt;br /&gt;
*15:30 - ..&lt;br /&gt;
*15:45 - ..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;09.06.2018&#039;&#039;&#039;&lt;br /&gt;
*16:00 - Triin Oja&lt;br /&gt;
*16:15 - Beer Pressure&lt;br /&gt;
*16:30 - ..&lt;br /&gt;
*16:45 - ..&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
Lõpptoote [http://enos.itcollege.ee/~sjaanus/c/Airport_solution.zip link]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&#039;&#039;&#039;Meie XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/RaamatuRiiul#XML XML]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie veebiteenuse ja klientrakenduse retsensioonid meeskonnale Miisiiks:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Miisiiks retsensioonid]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2™#Retsentsioonid Maagikud]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
Lõpptoode: TODO&lt;br /&gt;
&lt;br /&gt;
Meie rühma kirjutatud retsentsioonid rühmale Maagikud: tegemisel&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
Projekti retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#Projekti_retsensioon Maagikud]&lt;br /&gt;
&lt;br /&gt;
XML osa retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/LTD#XML_retsensioon RaamatuRiiul]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/e2vu3ukgckyc2x5/MiisiiksWS.zip?dl=0 Veebiteenus]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/iwtheohp5mn0lek/MiisiiksC.zip?dl=0 Klientrakendus]&lt;br /&gt;
&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Miisiiks#XML XML]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid meeskonnale Raavo V2™&lt;br /&gt;
&lt;br /&gt;
Veebiteenus: [https://wiki.itcollege.ee/index.php/Miisiiks#Veebiteenuse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus: [https://wiki.itcollege.ee/index.php/Miisiiks#Klientrakenduse_retsensioon Retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VR2_div Meeskond: &amp;amp;lt;div&amp;amp;gt;]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kaarel Pärtel&lt;br /&gt;
*Marek Juhanson&lt;br /&gt;
*Kai Kallastu&lt;br /&gt;
&lt;br /&gt;
Retsensioonid rühmale [https://wiki.itcollege.ee/index.php/Miisiiks Miisiiks™]: [https://docs.google.com/document/d/1gQmas-Fay_XHHhLInKM92152vYeFdFflDIRozN63mxA/edit?usp=sharing veebiteenus, klientrakendus ja XML]&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed&#039;&#039;&#039;:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson (loobus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039; (seisuga 2. juuni 2018)&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
* .zip fail rakendus ja klient koos: https://www.dropbox.com/s/0qs4zcon2bsnr72/loojang.zip?dl=0&lt;br /&gt;
* veebirakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-app&lt;br /&gt;
* klientrakenduse repo: https://bitbucket.org/itcollegeprojects/loojang-client&lt;br /&gt;
* XML: [https://wiki.itcollege.ee/index.php/Kuldneloojang#XML_.C3.BClesande_kirjeldus link meie Wiki lehele]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid:&#039;&#039;&#039;&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler (loobus)&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava (lahkunud liige)&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
Lähtekood: [http://enos.itcollege.ee/~luksti/CSharp/CSharpResto.zip CSharpResto]&lt;br /&gt;
&lt;br /&gt;
Retsensioonid:&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&#039;&#039;&#039;Projekt:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi TaisKohtApi]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode:&#039;&#039;&#039; [https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip GitHub commit]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XML:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/BeerPressure#XML.2FXSD.2FXSLT Beer Pressure XML/XSD/XSLT]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud XML retsensioon:&#039;&#039;&#039; TODO &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:MOT#Veebiteenuse_retsensensioon_by_meeskond_BeerPressure: Team MOT retsensioon]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud klientrakenduse retsensioon:&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Talk:Kuldneloojang#Klientrakenduse_retsensensioon_by_meeskond_BeerPressure: Team Kuldneloojang retsensioon]&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar (loobus)&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode: &#039;&#039;&#039;  http://enos.itcollege.ee/~mmeizner/MOT/ &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud veebiteenuse ja klientrakenduse retsensioon:&#039;&#039;&#039; [https://docs.google.com/document/d/16WL12wmvQ_TPcY_-4pG_kjwtstQoX5meEYcigE4Febw/edit?usp=sharing: Team Raavo V2]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LabLite Meeskond: LabLite]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alex Kaska&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/AmateurBB Meeskond: AmateurBB]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kivimaa&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MealPlannerSolo Meeskond: MealPlannerSolo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/NutriCheck Meeskond: NutriCheck]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Artyom Likhachev&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131186</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131186"/>
		<updated>2018-06-03T20:46:17Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* 02.06-03.06.2018 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XMLFileXML.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
=== Veebiteenuse retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/MOT MOT] ===&lt;br /&gt;
&lt;br /&gt;
* Puudub README vms. Dokumentatsioon projekti ülespanemiseks ja seadistamiseks.&lt;br /&gt;
* Rollide loomine vigane, seda võiks teha eraldi failis, mis on DAL.App.EF projektis (kasutasime algul sama lähenemist nagu antud projekt). Takistab esialgset andmebaasi uuendust, kui rollid veel puuduvad. Rakenduse installimine tarnitud kujul ei õnnestunud. Selleks et Nuget Package Manageri käsk Update-Database töötaks pidi ajutiselt välja kommenteerima Startup.cs faili rea 153 (// CreateRoles(services).Wait();).&lt;br /&gt;
==== Andmebaasist: ====&lt;br /&gt;
* Üldiselt paneksin igale väljale juurde AddTime ja UpdateTime see on hea tava millest korduvalt ka andmebaasi alustes räägiti ja rõhutati.&lt;br /&gt;
==== Olemitest: ====&lt;br /&gt;
* Kui juba domainis nimetate kõik olemid singulaarselt siis võiks ju sama teha ka andmebaasis - lisakeerukuse loomine kohas kus see ei ole vajalik.&lt;br /&gt;
* Entity-te arv oli nõutust väiksem - Kokku 8 olemit, millest 1 on many-to-many liittabel ja 1 otsene koopia Identity framework Users tabelist. &lt;br /&gt;
* Olem People ~= Users ja sisaldab ka viidet Identity tabelile ApplicationUsers (ApplicationUserId). Juhul kui see on mõeldud rakendusega mitte registreerunud kasutajate võistlusele kirja panemiseks, siis oleks olemil rohkem infot vaja - vähemalt mingigi kontakti väli (email |/&amp;amp; tel.nr. |/&amp;amp; aadress).&lt;br /&gt;
* Competition.Comment on varchar(100) - võiks ja peaks olema varchar(1000)&lt;br /&gt;
* Competition.CompetitionPlaceId - kui võistluse toimumiskoht mingil põhjusel peaks keelduma korraldusest või kui võistlust alles pannakse kokku ja ei ole veel teada kus see toimuma saab siis mis peaks sinna sisestama (NOT NULL =&amp;gt; NULL)&lt;br /&gt;
* Competition.Time -&amp;gt; Mis aega see näitab? Property nimest seda välja ei loe. Kui StartTime, siis kus on EndTime või Duration?&lt;br /&gt;
* CompetitionPlace.County -&amp;gt; int type enum default väärtus on 0, kuna see pole aga enumi klassis implementeeritud põhjustab see vea. (Millisele maakonnale vastab 0?) See teada tuntud probleem millele google annab hõlpsasti erinevaid lahendusi: näiteks [https://stackoverflow.com/questions/24350377/entity-framework-6-code-first-required-enum-data-type-not-working?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin] ja [https://stackoverflow.com/questions/529929/choosing-the-default-value-of-an-enum-type-without-having-to-change-values/529937?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin].&lt;br /&gt;
* Väljad mis viitavad Identity framework olemitele läbi nende ID-de ei peaks olema nvarchar(max) vaid nvarchar(450) (kuigi isegi see on reaalsuses liiga pikk).&lt;br /&gt;
* PersonInTeam.PersonInTeamId -&amp;gt; ei peaks olema sellist välja üldse, selle tabeli PK peaks olema kombinatsioon nende tabeli ID-st mida ta ühendab. Praegu ei ole unique indeksit üle nende, mis tähendab et sama inimene saab mitu korda sama tiimiga liituda.&lt;br /&gt;
* Participations - Miks selline nimi, kui registreerimine juba oli? Saan aru et selles olemis tahetakse säilitada võistluse tulemusi. Siis võiks ju juba olla CompetitionResults. Kus on aga saavutatud koha numbri talletamine? Kui võistluse punktid ja ajad on kõik kirja saadud siis tahaks ju tulemusi ka kuidagi näha ja võrrelda ning selle võrdluse tulemi kuhugi salvestada.&lt;br /&gt;
* Participations.Time - Mis aega näitab? Eeldan, et võistluse läbimise aega? Kui nii, siis miks ei ole NULL lubatud - mõnedel võistlustel aega ju ei mõõdeta?&lt;br /&gt;
* Participation.Points - Kas igal võistlusel antakse ainult täisarv punkte (int)? Võiks igaks juhuks siiski implementeerida double väärtuse tüübi. Lisaks ei ole võimalik osalust luua ilma punkte teadmata - peaks siis määrama default väärtus. Mõnede võistluste puhul jälle punkte ei anta vaid mõõdetakse aega.&lt;br /&gt;
* Participation.Disqualified - Nullid ei ole lubatud -&amp;gt; järelikult oleks default väärtust vaja.&lt;br /&gt;
* Registrations - Projekti Must have alla on märgitud “Osaleja saab registreerida võistlusele meeskonda” kuid olemis puudub TeamsId ning samuti ei ole seda võimalust kuidagi läbi Servicei implementeeritud.&lt;br /&gt;
* Registrations - Millal registreering tehti on suhteliselt tähtis teada. Paljude võistluste puhul sõltub sellest näiteks registreerimistasu. &lt;br /&gt;
==== DTO-d: ====&lt;br /&gt;
* Täiesti mõttetult sisse toodud kiht, lihtsalt selleks et nii oli ette nähtud. Kõik DTO-d konverteeritakse ümber 1:1-le Domain objektideks ja vastupidi.&lt;br /&gt;
* Üldiselt oleks vaja teha tööd veel DTOdega, et need rohkem peegeldaksid oma kasutust. Näiteks:&lt;br /&gt;
** küsides kõiki võistlusi, kas meil on tarvis avalikustada kliendile, mis on kasutaja ID, kes iga võistluse lõi? DTOsid võiks olla rohkem erinevate kasutusjuhtumite jaoks. &lt;br /&gt;
** CompetitionDTO võiks sisaldada ka nimekirja võistlejatest, kus koondatakse info ManyToMany seoste põhjal kasutades vahetabelit, nagu näiteks:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
List&amp;lt;PersonDTO&amp;gt; people = c.Participation&lt;br /&gt;
.FindAll(p =&amp;gt; p.CompetitionId == c.CompetitionId)&lt;br /&gt;
.Select(PersonDTO.CreateFromParticipation)&lt;br /&gt;
.ToList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== API Kontrolleritest: ====&lt;br /&gt;
* Puudub Swagger startup konfiguratsioon, Swagger annotatsioonid kaotavad mõtte ning pole võimalik kontrollida, kas need on korrektselt loodud.&lt;br /&gt;
* ProducesResponse annotatsiooni pole kusagile lisatud, staatuskoodid on natuke poolikult läbi mõeldud, vähemalt need, mida Swaggeri raames mainitud on&lt;br /&gt;
*Annotatsioon Authorize, kus on ära määratud AuthorizationScheme peaks minema kogu klassi peale, meetodis saab ära määrata vaid selle, mis rollid on lubatud.&lt;br /&gt;
* AccountController&lt;br /&gt;
** Response code uue kasutaja loomisel võiks olla 201&lt;br /&gt;
** Puuduvad koodid nagu 429, 500&lt;br /&gt;
** Registreerumisel võiks kontrollida, kas kasutaja on juba olemas, mitte vaid rolli olemasolu&lt;br /&gt;
** Kas kasutajal ei või antud kontekstis olla mitu rolli? Sisselogimisel võetakse rollide seast vaid esimene ja lisatakse juurde Claimile. Võimalus kirjutada ka meetod, mis lisab kasutajale kõik rollid.&lt;br /&gt;
* CompetitionPlacesController/CompetitionsController/CompetitionTypesController/ParticipationsController/RegistrationsController/TeamsController &lt;br /&gt;
** Antud kontrollerid on kõik väga sarnase loogikaga&lt;br /&gt;
** Get() tagastab vaid koodi 200, tagastuskoodi võimalusi on veel&lt;br /&gt;
** Post() meetod küsib sisse DTOd, mille üheks parameetriks on id, id genereeritakse automaatselt, seda ei peaks panema kaasa postitatavasse mudelisse, mis alles loob objekti&lt;br /&gt;
** Put() puhul sama kriitika, siin on id küll vajalik, aga see juba pannakse kaasa parameetrina eraldi&lt;br /&gt;
** See tundub natuke veidrana üritada kontrollida uuendatud mudeli põhjal, kas tegemist oli BadRequestiga. Eelkõige peaks id puhul üles otsima, kas antud objekt on üldse olemas ja seejärel üritada uuendada, muidu tagastada BadRequest. Kui see ei õnnestu, siis peaks juba errorkood 500 peegeldama seda, et midagi läks teenuse poole peal valesti. &lt;br /&gt;
** Sama kommentaar deletemise kohta, enne tuleks kontrollida, kas objekt on olemas. Siis alles objekt kustutada.&lt;br /&gt;
* PeopleController&lt;br /&gt;
** Kas tõepoolest igaüks saab pärida infot inimeste kohta ja neid postitada? &lt;br /&gt;
* PersonInTeamsController &lt;br /&gt;
** API disaini poole pealt on natuke veider teha vahetabelite kohta kontroller. Tundub loogilisem panna antud kontrolleri meetodid teistesse kontroleritesse, mis on seotud siis kas meeskondade või inimestega. Näiteks küsida ** PeopleControlleris kõik inimesed, kes on meeskondades või küsida neid meeskonna järgi. TeamsControlleris seevastu anda võimalus lisada uusi inimesi meeskonda, neid muuta või eemaldada.&lt;br /&gt;
** Id järgi ei hakka ükski klient küsima vahetabeli kohta infot, see tundub otstarbetu tegevus, pigem küsida kas meeskonna või inimese id järgi sissekandeid&lt;br /&gt;
* Kriitika kontrollerite kohta: kontrollerid enamuses pöörduvad vaid spetsiifiliste domeenide poole ja viivad ellu väga tavalist CRUD funktsionaalsust, mille tõttu tundub, et need on natuke veel toored. Näiteks on välja toodud “must have” nimekirjas projekti analüüsis, et meeskonna liige peaks saama muuta meeskonna andmeid. Antud kontrollerites vaid autentitakse, et kasutaja oleks rollis “participant”, kuid mitte seda, kas ta ka muudetava meeskonna liige on. Samuti pole võimalik kasutajatel näha, palju on mingile võistlusele osalejaid registreerunud, CompetitionsController ei tegele sellega, et tagastada võistlusele registreerunud kasutajaid, selle asemel on olemas ParticipationsController, mis tagastab vahetabeli infot selle kohta, mis võistlusega on seotud mis inimene. See võib olla tohutult suur info, mida hakata filtreerima kliendi poolelt. Rohkem tuleks teha andmete agregeerimist vastavalt teenuse kontekstile.&lt;br /&gt;
&lt;br /&gt;
==== Projekti kihid/struktuur: ====&lt;br /&gt;
* Olemas Business Logic, Data Access Layer, DTO’d, Service’id, Unit of Work, domeeniklassid ning API spetsiifilised kontrollerid, mis asuvad oma kaustas põhiprojekti all . DAL omab erinevaid kihte interface’ide ja neid implementeerivate klasside jaoks. Repositooriumitega suhtlemine on abstraktne, kõik käib läbi Data Access Layer’i, mille pööle pöörduvad teenuseklassid ning DAL erinevad kihid hoolitsevad selle eest, et loodaks õiget tüüpi repositooriumeid, andmeid agregeeritakse, uuendatakse ja salvestatakse organiseeritud kujul ning neid tagastatakse teenustele soovitud kujul (DTOd).&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 01.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131185</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131185"/>
		<updated>2018-06-03T20:45:26Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* API Kontrolleritest: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XMLFileXML.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
=== Veebiteenuse retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/MOT MOT] ===&lt;br /&gt;
&lt;br /&gt;
* Puudub README vms. Dokumentatsioon projekti ülespanemiseks ja seadistamiseks.&lt;br /&gt;
* Rollide loomine vigane, seda võiks teha eraldi failis, mis on DAL.App.EF projektis (kasutasime algul sama lähenemist nagu antud projekt). Takistab esialgset andmebaasi uuendust, kui rollid veel puuduvad. Rakenduse installimine tarnitud kujul ei õnnestunud. Selleks et Nuget Package Manageri käsk Update-Database töötaks pidi ajutiselt välja kommenteerima Startup.cs faili rea 153 (// CreateRoles(services).Wait();).&lt;br /&gt;
==== Andmebaasist: ====&lt;br /&gt;
* Üldiselt paneksin igale väljale juurde AddTime ja UpdateTime see on hea tava millest korduvalt ka andmebaasi alustes räägiti ja rõhutati.&lt;br /&gt;
==== Olemitest: ====&lt;br /&gt;
* Kui juba domainis nimetate kõik olemid singulaarselt siis võiks ju sama teha ka andmebaasis - lisakeerukuse loomine kohas kus see ei ole vajalik.&lt;br /&gt;
* Entity-te arv oli nõutust väiksem - Kokku 8 olemit, millest 1 on many-to-many liittabel ja 1 otsene koopia Identity framework Users tabelist. &lt;br /&gt;
* Olem People ~= Users ja sisaldab ka viidet Identity tabelile ApplicationUsers (ApplicationUserId). Juhul kui see on mõeldud rakendusega mitte registreerunud kasutajate võistlusele kirja panemiseks, siis oleks olemil rohkem infot vaja - vähemalt mingigi kontakti väli (email |/&amp;amp; tel.nr. |/&amp;amp; aadress).&lt;br /&gt;
* Competition.Comment on varchar(100) - võiks ja peaks olema varchar(1000)&lt;br /&gt;
* Competition.CompetitionPlaceId - kui võistluse toimumiskoht mingil põhjusel peaks keelduma korraldusest või kui võistlust alles pannakse kokku ja ei ole veel teada kus see toimuma saab siis mis peaks sinna sisestama (NOT NULL =&amp;gt; NULL)&lt;br /&gt;
* Competition.Time -&amp;gt; Mis aega see näitab? Property nimest seda välja ei loe. Kui StartTime, siis kus on EndTime või Duration?&lt;br /&gt;
* CompetitionPlace.County -&amp;gt; int type enum default väärtus on 0, kuna see pole aga enumi klassis implementeeritud põhjustab see vea. (Millisele maakonnale vastab 0?) See teada tuntud probleem millele google annab hõlpsasti erinevaid lahendusi: näiteks [https://stackoverflow.com/questions/24350377/entity-framework-6-code-first-required-enum-data-type-not-working?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin] ja [https://stackoverflow.com/questions/529929/choosing-the-default-value-of-an-enum-type-without-having-to-change-values/529937?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin].&lt;br /&gt;
* Väljad mis viitavad Identity framework olemitele läbi nende ID-de ei peaks olema nvarchar(max) vaid nvarchar(450) (kuigi isegi see on reaalsuses liiga pikk).&lt;br /&gt;
* PersonInTeam.PersonInTeamId -&amp;gt; ei peaks olema sellist välja üldse, selle tabeli PK peaks olema kombinatsioon nende tabeli ID-st mida ta ühendab. Praegu ei ole unique indeksit üle nende, mis tähendab et sama inimene saab mitu korda sama tiimiga liituda.&lt;br /&gt;
* Participations - Miks selline nimi, kui registreerimine juba oli? Saan aru et selles olemis tahetakse säilitada võistluse tulemusi. Siis võiks ju juba olla CompetitionResults. Kus on aga saavutatud koha numbri talletamine? Kui võistluse punktid ja ajad on kõik kirja saadud siis tahaks ju tulemusi ka kuidagi näha ja võrrelda ning selle võrdluse tulemi kuhugi salvestada.&lt;br /&gt;
* Participations.Time - Mis aega näitab? Eeldan, et võistluse läbimise aega? Kui nii, siis miks ei ole NULL lubatud - mõnedel võistlustel aega ju ei mõõdeta?&lt;br /&gt;
* Participation.Points - Kas igal võistlusel antakse ainult täisarv punkte (int)? Võiks igaks juhuks siiski implementeerida double väärtuse tüübi. Lisaks ei ole võimalik osalust luua ilma punkte teadmata - peaks siis määrama default väärtus. Mõnede võistluste puhul jälle punkte ei anta vaid mõõdetakse aega.&lt;br /&gt;
* Participation.Disqualified - Nullid ei ole lubatud -&amp;gt; järelikult oleks default väärtust vaja.&lt;br /&gt;
* Registrations - Projekti Must have alla on märgitud “Osaleja saab registreerida võistlusele meeskonda” kuid olemis puudub TeamsId ning samuti ei ole seda võimalust kuidagi läbi Servicei implementeeritud.&lt;br /&gt;
* Registrations - Millal registreering tehti on suhteliselt tähtis teada. Paljude võistluste puhul sõltub sellest näiteks registreerimistasu. &lt;br /&gt;
==== DTO-d: ====&lt;br /&gt;
* Täiesti mõttetult sisse toodud kiht, lihtsalt selleks et nii oli ette nähtud. Kõik DTO-d konverteeritakse ümber 1:1-le Domain objektideks ja vastupidi.&lt;br /&gt;
* Üldiselt oleks vaja teha tööd veel DTOdega, et need rohkem peegeldaksid oma kasutust. Näiteks:&lt;br /&gt;
** küsides kõiki võistlusi, kas meil on tarvis avalikustada kliendile, mis on kasutaja ID, kes iga võistluse lõi? DTOsid võiks olla rohkem erinevate kasutusjuhtumite jaoks. &lt;br /&gt;
** CompetitionDTO võiks sisaldada ka nimekirja võistlejatest, kus koondatakse info ManyToMany seoste põhjal kasutades vahetabelit, nagu näiteks:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
List&amp;lt;PersonDTO&amp;gt; people = c.Participation&lt;br /&gt;
.FindAll(p =&amp;gt; p.CompetitionId == c.CompetitionId)&lt;br /&gt;
.Select(PersonDTO.CreateFromParticipation)&lt;br /&gt;
.ToList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== API Kontrolleritest: ====&lt;br /&gt;
* Puudub Swagger startup konfiguratsioon, Swagger annotatsioonid kaotavad mõtte ning pole võimalik kontrollida, kas need on korrektselt loodud.&lt;br /&gt;
* ProducesResponse annotatsiooni pole kusagile lisatud, staatuskoodid on natuke poolikult läbi mõeldud, vähemalt need, mida Swaggeri raames mainitud on&lt;br /&gt;
*Annotatsioon Authorize, kus on ära määratud AuthorizationScheme peaks minema kogu klassi peale, meetodis saab ära määrata vaid selle, mis rollid on lubatud.&lt;br /&gt;
* AccountController&lt;br /&gt;
** Response code uue kasutaja loomisel võiks olla 201&lt;br /&gt;
** Puuduvad koodid nagu 429, 500&lt;br /&gt;
** Registreerumisel võiks kontrollida, kas kasutaja on juba olemas, mitte vaid rolli olemasolu&lt;br /&gt;
** Kas kasutajal ei või antud kontekstis olla mitu rolli? Sisselogimisel võetakse rollide seast vaid esimene ja lisatakse juurde Claimile. Võimalus kirjutada ka meetod, mis lisab kasutajale kõik rollid.&lt;br /&gt;
* CompetitionPlacesController/CompetitionsController/CompetitionTypesController/ParticipationsController/RegistrationsController/TeamsController &lt;br /&gt;
** Antud kontrollerid on kõik väga sarnase loogikaga&lt;br /&gt;
** Get() tagastab vaid koodi 200, tagastuskoodi võimalusi on veel&lt;br /&gt;
** Post() meetod küsib sisse DTOd, mille üheks parameetriks on id, id genereeritakse automaatselt, seda ei peaks panema kaasa postitatavasse mudelisse, mis alles loob objekti&lt;br /&gt;
** Put() puhul sama kriitika, siin on id küll vajalik, aga see juba pannakse kaasa parameetrina eraldi&lt;br /&gt;
** See tundub natuke veidrana üritada kontrollida uuendatud mudeli põhjal, kas tegemist oli BadRequestiga. Eelkõige peaks id puhul üles otsima, kas antud objekt on üldse olemas ja seejärel üritada uuendada, muidu tagastada BadRequest. Kui see ei õnnestu, siis peaks juba errorkood 500 peegeldama seda, et midagi läks teenuse poole peal valesti. &lt;br /&gt;
** Sama kommentaar deletemise kohta, enne tuleks kontrollida, kas objekt on olemas. Siis alles objekt kustutada.&lt;br /&gt;
* PeopleController&lt;br /&gt;
** Kas tõepoolest igaüks saab pärida infot inimeste kohta ja neid postitada? &lt;br /&gt;
* PersonInTeamsController &lt;br /&gt;
** API disaini poole pealt on natuke veider teha vahetabelite kohta kontroller. Tundub loogilisem panna antud kontrolleri meetodid teistesse kontroleritesse, mis on seotud siis kas meeskondade või inimestega. Näiteks küsida ** PeopleControlleris kõik inimesed, kes on meeskondades või küsida neid meeskonna järgi. TeamsControlleris seevastu anda võimalus lisada uusi inimesi meeskonda, neid muuta või eemaldada.&lt;br /&gt;
** Id järgi ei hakka ükski klient küsima vahetabeli kohta infot, see tundub otstarbetu tegevus, pigem küsida kas meeskonna või inimese id järgi sissekandeid&lt;br /&gt;
* Kriitika kontrollerite kohta: kontrollerid enamuses pöörduvad vaid spetsiifiliste domeenide poole ja viivad ellu väga tavalist CRUD funktsionaalsust, mille tõttu tundub, et need on natuke veel toored. Näiteks on välja toodud “must have” nimekirjas projekti analüüsis, et meeskonna liige peaks saama muuta meeskonna andmeid. Antud kontrollerites vaid autentitakse, et kasutaja oleks rollis “participant”, kuid mitte seda, kas ta ka muudetava meeskonna liige on. Samuti pole võimalik kasutajatel näha, palju on mingile võistlusele osalejaid registreerunud, CompetitionsController ei tegele sellega, et tagastada võistlusele registreerunud kasutajaid, selle asemel on olemas ParticipationsController, mis tagastab vahetabeli infot selle kohta, mis võistlusega on seotud mis inimene. See võib olla tohutult suur info, mida hakata filtreerima kliendi poolelt. Rohkem tuleks teha andmete agregeerimist vastavalt teenuse kontekstile.&lt;br /&gt;
&lt;br /&gt;
==== Projekti kihid/struktuur: ====&lt;br /&gt;
* Olemas Business Logic, Data Access Layer, DTO’d, Service’id, Unit of Work, domeeniklassid ning API spetsiifilised kontrollerid, mis asuvad oma kaustas põhiprojekti all . DAL omab erinevaid kihte interface’ide ja neid implementeerivate klasside jaoks. Repositooriumitega suhtlemine on abstraktne, kõik käib läbi Data Access Layer’i, mille pööle pöörduvad teenuseklassid ning DAL erinevad kihid hoolitsevad selle eest, et loodaks õiget tüüpi repositooriumeid, andmeid agregeeritakse, uuendatakse ja salvestatakse organiseeritud kujul ning neid tagastatakse teenustele soovitud kujul (DTOd).&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 02.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131184</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131184"/>
		<updated>2018-06-03T20:44:46Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* API Kontrolleritest: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XMLFileXML.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
=== Veebiteenuse retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/MOT MOT] ===&lt;br /&gt;
&lt;br /&gt;
* Puudub README vms. Dokumentatsioon projekti ülespanemiseks ja seadistamiseks.&lt;br /&gt;
* Rollide loomine vigane, seda võiks teha eraldi failis, mis on DAL.App.EF projektis (kasutasime algul sama lähenemist nagu antud projekt). Takistab esialgset andmebaasi uuendust, kui rollid veel puuduvad. Rakenduse installimine tarnitud kujul ei õnnestunud. Selleks et Nuget Package Manageri käsk Update-Database töötaks pidi ajutiselt välja kommenteerima Startup.cs faili rea 153 (// CreateRoles(services).Wait();).&lt;br /&gt;
==== Andmebaasist: ====&lt;br /&gt;
* Üldiselt paneksin igale väljale juurde AddTime ja UpdateTime see on hea tava millest korduvalt ka andmebaasi alustes räägiti ja rõhutati.&lt;br /&gt;
==== Olemitest: ====&lt;br /&gt;
* Kui juba domainis nimetate kõik olemid singulaarselt siis võiks ju sama teha ka andmebaasis - lisakeerukuse loomine kohas kus see ei ole vajalik.&lt;br /&gt;
* Entity-te arv oli nõutust väiksem - Kokku 8 olemit, millest 1 on many-to-many liittabel ja 1 otsene koopia Identity framework Users tabelist. &lt;br /&gt;
* Olem People ~= Users ja sisaldab ka viidet Identity tabelile ApplicationUsers (ApplicationUserId). Juhul kui see on mõeldud rakendusega mitte registreerunud kasutajate võistlusele kirja panemiseks, siis oleks olemil rohkem infot vaja - vähemalt mingigi kontakti väli (email |/&amp;amp; tel.nr. |/&amp;amp; aadress).&lt;br /&gt;
* Competition.Comment on varchar(100) - võiks ja peaks olema varchar(1000)&lt;br /&gt;
* Competition.CompetitionPlaceId - kui võistluse toimumiskoht mingil põhjusel peaks keelduma korraldusest või kui võistlust alles pannakse kokku ja ei ole veel teada kus see toimuma saab siis mis peaks sinna sisestama (NOT NULL =&amp;gt; NULL)&lt;br /&gt;
* Competition.Time -&amp;gt; Mis aega see näitab? Property nimest seda välja ei loe. Kui StartTime, siis kus on EndTime või Duration?&lt;br /&gt;
* CompetitionPlace.County -&amp;gt; int type enum default väärtus on 0, kuna see pole aga enumi klassis implementeeritud põhjustab see vea. (Millisele maakonnale vastab 0?) See teada tuntud probleem millele google annab hõlpsasti erinevaid lahendusi: näiteks [https://stackoverflow.com/questions/24350377/entity-framework-6-code-first-required-enum-data-type-not-working?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin] ja [https://stackoverflow.com/questions/529929/choosing-the-default-value-of-an-enum-type-without-having-to-change-values/529937?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin].&lt;br /&gt;
* Väljad mis viitavad Identity framework olemitele läbi nende ID-de ei peaks olema nvarchar(max) vaid nvarchar(450) (kuigi isegi see on reaalsuses liiga pikk).&lt;br /&gt;
* PersonInTeam.PersonInTeamId -&amp;gt; ei peaks olema sellist välja üldse, selle tabeli PK peaks olema kombinatsioon nende tabeli ID-st mida ta ühendab. Praegu ei ole unique indeksit üle nende, mis tähendab et sama inimene saab mitu korda sama tiimiga liituda.&lt;br /&gt;
* Participations - Miks selline nimi, kui registreerimine juba oli? Saan aru et selles olemis tahetakse säilitada võistluse tulemusi. Siis võiks ju juba olla CompetitionResults. Kus on aga saavutatud koha numbri talletamine? Kui võistluse punktid ja ajad on kõik kirja saadud siis tahaks ju tulemusi ka kuidagi näha ja võrrelda ning selle võrdluse tulemi kuhugi salvestada.&lt;br /&gt;
* Participations.Time - Mis aega näitab? Eeldan, et võistluse läbimise aega? Kui nii, siis miks ei ole NULL lubatud - mõnedel võistlustel aega ju ei mõõdeta?&lt;br /&gt;
* Participation.Points - Kas igal võistlusel antakse ainult täisarv punkte (int)? Võiks igaks juhuks siiski implementeerida double väärtuse tüübi. Lisaks ei ole võimalik osalust luua ilma punkte teadmata - peaks siis määrama default väärtus. Mõnede võistluste puhul jälle punkte ei anta vaid mõõdetakse aega.&lt;br /&gt;
* Participation.Disqualified - Nullid ei ole lubatud -&amp;gt; järelikult oleks default väärtust vaja.&lt;br /&gt;
* Registrations - Projekti Must have alla on märgitud “Osaleja saab registreerida võistlusele meeskonda” kuid olemis puudub TeamsId ning samuti ei ole seda võimalust kuidagi läbi Servicei implementeeritud.&lt;br /&gt;
* Registrations - Millal registreering tehti on suhteliselt tähtis teada. Paljude võistluste puhul sõltub sellest näiteks registreerimistasu. &lt;br /&gt;
==== DTO-d: ====&lt;br /&gt;
* Täiesti mõttetult sisse toodud kiht, lihtsalt selleks et nii oli ette nähtud. Kõik DTO-d konverteeritakse ümber 1:1-le Domain objektideks ja vastupidi.&lt;br /&gt;
* Üldiselt oleks vaja teha tööd veel DTOdega, et need rohkem peegeldaksid oma kasutust. Näiteks:&lt;br /&gt;
** küsides kõiki võistlusi, kas meil on tarvis avalikustada kliendile, mis on kasutaja ID, kes iga võistluse lõi? DTOsid võiks olla rohkem erinevate kasutusjuhtumite jaoks. &lt;br /&gt;
** CompetitionDTO võiks sisaldada ka nimekirja võistlejatest, kus koondatakse info ManyToMany seoste põhjal kasutades vahetabelit, nagu näiteks:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
List&amp;lt;PersonDTO&amp;gt; people = c.Participation&lt;br /&gt;
.FindAll(p =&amp;gt; p.CompetitionId == c.CompetitionId)&lt;br /&gt;
.Select(PersonDTO.CreateFromParticipation)&lt;br /&gt;
.ToList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== API Kontrolleritest: ====&lt;br /&gt;
* Puudub Swagger startup konfiguratsioon, Swagger annotatsioonid kaotavad mõtte ning pole võimalik kontrollida, kas need on korrektselt loodud.&lt;br /&gt;
* ProducesResponse annotatsiooni pole kusagile lisatud, staatuskoodid on natuke poolikult läbi mõeldud, vähemalt need, mida Swaggeri raames mainitud on&lt;br /&gt;
*Annotatsioon Authorize, kus on ära määratud AuthorizationScheme peaks minema kogu klassi peale, meetodis saab ära määrata vaid selle, mis rollid on lubatud.&lt;br /&gt;
* AccountController&lt;br /&gt;
** Response code uue kasutaja loomisel võiks olla 201&lt;br /&gt;
** Puuduvad koodid nagu 429, 500&lt;br /&gt;
** Registreerumisel võiks kontrollida, kas kasutaja on juba olemas, mitte vaid rolli olemasolu&lt;br /&gt;
** Kas kasutajal ei või antud kontekstis olla mitu rolli? Sisselogimisel võetakse rollide seast vaid esimene ja lisatakse juurde Claimile. Võimalus kirjutada ka meetod, mis lisab kasutajale kõik rollid.&lt;br /&gt;
* CompetitionPlacesController/CompetitionsController/CompetitionTypesController/ParticipationsController/RegistrationsController/TeamsController &lt;br /&gt;
** Antud kontrollerid on kõik väga sarnase loogikaga&lt;br /&gt;
** Get() tagastab vaid koodi 200, tagastuskoodi võimalusi on veel&lt;br /&gt;
** Post() meetod küsib sisse DTOd, mille üheks parameetriks on id, id genereeritakse automaatselt, seda ei peaks panema kaasa postitatavasse mudelisse, mis alles loob objekti&lt;br /&gt;
** Put() puhul sama kriitika, siin on id küll vajalik, aga see juba pannakse kaasa parameetrina eraldi&lt;br /&gt;
** See tundub natuke veidrana üritada kontrollida uuendatud mudeli põhjal, kas tegemist oli BadRequestiga. Eelkõige peaks id puhul üles otsima, kas antud objekt on üldse olemas ja seejärel üritada uuendada, muidu tagastada BadRequest. Kui see ei õnnestu, siis peaks juba errorkood 500 peegeldama seda, et midagi läks teenuse poole peal valesti. &lt;br /&gt;
** Sama kommentaar deletemise kohta, enne tuleks kontrollida, kas objekt on olemas. Siis alles objekt kustutada.&lt;br /&gt;
* PeopleController&lt;br /&gt;
** Kas tõepoolest igaüks saab pärida infot inimeste kohta ja neid postitada? &lt;br /&gt;
* PersonInTeamsController &lt;br /&gt;
** API disaini poole pealt on natuke veider teha vahetabelite kohta kontroller. Tundub loogilisem panna antud kontrolleri meetodid teistesse kontroleritesse, mis on seotud siis kas meeskondade või inimestega. Näiteks küsida ** PeopleControlleris kõik inimesed, kes on meeskondades või küsida neid meeskonna järgi. TeamsControlleris seevastu anda võimalus lisada uusi inimesi meeskonda, neid muuta või eemaldada.&lt;br /&gt;
Id järgi ei hakka ükski klient küsima vahetabeli kohta infot, see tundub otstarbetu tegevus, pigem küsida kas meeskonna või inimese id järgi sissekandeid&lt;br /&gt;
* Kriitika kontrollerite kohta: kontrollerid enamuses pöörduvad vaid spetsiifiliste domeenide poole ja viivad ellu väga tavalist CRUD funktsionaalsust, mille tõttu tundub, et need on natuke veel toored. Näiteks on välja toodud “must have” nimekirjas projekti analüüsis, et meeskonna liige peaks saama muuta meeskonna andmeid. Antud kontrollerites vaid autentitakse, et kasutaja oleks rollis “participant”, kuid mitte seda, kas ta ka muudetava meeskonna liige on. Samuti pole võimalik kasutajatel näha, palju on mingile võistlusele osalejaid registreerunud, CompetitionsController ei tegele sellega, et tagastada võistlusele registreerunud kasutajaid, selle asemel on olemas ParticipationsController, mis tagastab vahetabeli infot selle kohta, mis võistlusega on seotud mis inimene. See võib olla tohutult suur info, mida hakata filtreerima kliendi poolelt. Rohkem tuleks teha andmete agregeerimist vastavalt teenuse kontekstile.&lt;br /&gt;
&lt;br /&gt;
==== Projekti kihid/struktuur: ====&lt;br /&gt;
* Olemas Business Logic, Data Access Layer, DTO’d, Service’id, Unit of Work, domeeniklassid ning API spetsiifilised kontrollerid, mis asuvad oma kaustas põhiprojekti all . DAL omab erinevaid kihte interface’ide ja neid implementeerivate klasside jaoks. Repositooriumitega suhtlemine on abstraktne, kõik käib läbi Data Access Layer’i, mille pööle pöörduvad teenuseklassid ning DAL erinevad kihid hoolitsevad selle eest, et loodaks õiget tüüpi repositooriumeid, andmeid agregeeritakse, uuendatakse ja salvestatakse organiseeritud kujul ning neid tagastatakse teenustele soovitud kujul (DTOd).&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 02.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131182</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131182"/>
		<updated>2018-06-03T20:43:49Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* API Kontrolleritest: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XMLFileXML.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
=== Veebiteenuse retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/MOT MOT] ===&lt;br /&gt;
&lt;br /&gt;
* Puudub README vms. Dokumentatsioon projekti ülespanemiseks ja seadistamiseks.&lt;br /&gt;
* Rollide loomine vigane, seda võiks teha eraldi failis, mis on DAL.App.EF projektis (kasutasime algul sama lähenemist nagu antud projekt). Takistab esialgset andmebaasi uuendust, kui rollid veel puuduvad. Rakenduse installimine tarnitud kujul ei õnnestunud. Selleks et Nuget Package Manageri käsk Update-Database töötaks pidi ajutiselt välja kommenteerima Startup.cs faili rea 153 (// CreateRoles(services).Wait();).&lt;br /&gt;
==== Andmebaasist: ====&lt;br /&gt;
* Üldiselt paneksin igale väljale juurde AddTime ja UpdateTime see on hea tava millest korduvalt ka andmebaasi alustes räägiti ja rõhutati.&lt;br /&gt;
==== Olemitest: ====&lt;br /&gt;
* Kui juba domainis nimetate kõik olemid singulaarselt siis võiks ju sama teha ka andmebaasis - lisakeerukuse loomine kohas kus see ei ole vajalik.&lt;br /&gt;
* Entity-te arv oli nõutust väiksem - Kokku 8 olemit, millest 1 on many-to-many liittabel ja 1 otsene koopia Identity framework Users tabelist. &lt;br /&gt;
* Olem People ~= Users ja sisaldab ka viidet Identity tabelile ApplicationUsers (ApplicationUserId). Juhul kui see on mõeldud rakendusega mitte registreerunud kasutajate võistlusele kirja panemiseks, siis oleks olemil rohkem infot vaja - vähemalt mingigi kontakti väli (email |/&amp;amp; tel.nr. |/&amp;amp; aadress).&lt;br /&gt;
* Competition.Comment on varchar(100) - võiks ja peaks olema varchar(1000)&lt;br /&gt;
* Competition.CompetitionPlaceId - kui võistluse toimumiskoht mingil põhjusel peaks keelduma korraldusest või kui võistlust alles pannakse kokku ja ei ole veel teada kus see toimuma saab siis mis peaks sinna sisestama (NOT NULL =&amp;gt; NULL)&lt;br /&gt;
* Competition.Time -&amp;gt; Mis aega see näitab? Property nimest seda välja ei loe. Kui StartTime, siis kus on EndTime või Duration?&lt;br /&gt;
* CompetitionPlace.County -&amp;gt; int type enum default väärtus on 0, kuna see pole aga enumi klassis implementeeritud põhjustab see vea. (Millisele maakonnale vastab 0?) See teada tuntud probleem millele google annab hõlpsasti erinevaid lahendusi: näiteks [https://stackoverflow.com/questions/24350377/entity-framework-6-code-first-required-enum-data-type-not-working?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin] ja [https://stackoverflow.com/questions/529929/choosing-the-default-value-of-an-enum-type-without-having-to-change-values/529937?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin].&lt;br /&gt;
* Väljad mis viitavad Identity framework olemitele läbi nende ID-de ei peaks olema nvarchar(max) vaid nvarchar(450) (kuigi isegi see on reaalsuses liiga pikk).&lt;br /&gt;
* PersonInTeam.PersonInTeamId -&amp;gt; ei peaks olema sellist välja üldse, selle tabeli PK peaks olema kombinatsioon nende tabeli ID-st mida ta ühendab. Praegu ei ole unique indeksit üle nende, mis tähendab et sama inimene saab mitu korda sama tiimiga liituda.&lt;br /&gt;
* Participations - Miks selline nimi, kui registreerimine juba oli? Saan aru et selles olemis tahetakse säilitada võistluse tulemusi. Siis võiks ju juba olla CompetitionResults. Kus on aga saavutatud koha numbri talletamine? Kui võistluse punktid ja ajad on kõik kirja saadud siis tahaks ju tulemusi ka kuidagi näha ja võrrelda ning selle võrdluse tulemi kuhugi salvestada.&lt;br /&gt;
* Participations.Time - Mis aega näitab? Eeldan, et võistluse läbimise aega? Kui nii, siis miks ei ole NULL lubatud - mõnedel võistlustel aega ju ei mõõdeta?&lt;br /&gt;
* Participation.Points - Kas igal võistlusel antakse ainult täisarv punkte (int)? Võiks igaks juhuks siiski implementeerida double väärtuse tüübi. Lisaks ei ole võimalik osalust luua ilma punkte teadmata - peaks siis määrama default väärtus. Mõnede võistluste puhul jälle punkte ei anta vaid mõõdetakse aega.&lt;br /&gt;
* Participation.Disqualified - Nullid ei ole lubatud -&amp;gt; järelikult oleks default väärtust vaja.&lt;br /&gt;
* Registrations - Projekti Must have alla on märgitud “Osaleja saab registreerida võistlusele meeskonda” kuid olemis puudub TeamsId ning samuti ei ole seda võimalust kuidagi läbi Servicei implementeeritud.&lt;br /&gt;
* Registrations - Millal registreering tehti on suhteliselt tähtis teada. Paljude võistluste puhul sõltub sellest näiteks registreerimistasu. &lt;br /&gt;
==== DTO-d: ====&lt;br /&gt;
* Täiesti mõttetult sisse toodud kiht, lihtsalt selleks et nii oli ette nähtud. Kõik DTO-d konverteeritakse ümber 1:1-le Domain objektideks ja vastupidi.&lt;br /&gt;
* Üldiselt oleks vaja teha tööd veel DTOdega, et need rohkem peegeldaksid oma kasutust. Näiteks:&lt;br /&gt;
** küsides kõiki võistlusi, kas meil on tarvis avalikustada kliendile, mis on kasutaja ID, kes iga võistluse lõi? DTOsid võiks olla rohkem erinevate kasutusjuhtumite jaoks. &lt;br /&gt;
** CompetitionDTO võiks sisaldada ka nimekirja võistlejatest, kus koondatakse info ManyToMany seoste põhjal kasutades vahetabelit, nagu näiteks:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
List&amp;lt;PersonDTO&amp;gt; people = c.Participation&lt;br /&gt;
.FindAll(p =&amp;gt; p.CompetitionId == c.CompetitionId)&lt;br /&gt;
.Select(PersonDTO.CreateFromParticipation)&lt;br /&gt;
.ToList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== API Kontrolleritest: ====&lt;br /&gt;
* Puudub Swagger startup konfiguratsioon, Swagger annotatsioonid kaotavad mõtte ning pole võimalik kontrollida, kas need on korrektselt loodud.&lt;br /&gt;
* ProducesResponse annotatsiooni pole kusagile lisatud, staatuskoodid on natuke poolikult läbi mõeldud, vähemalt need, mida Swaggeri raames mainitud on&lt;br /&gt;
*Annotatsioon Authorize, kus on ära määratud AuthorizationScheme peaks minema kogu klassi peale, meetodis saab ära määrata vaid selle, mis rollid on lubatud.&lt;br /&gt;
* AccountController&lt;br /&gt;
** Response code uue kasutaja loomisel võiks olla 201&lt;br /&gt;
** Puuduvad koodid nagu 429, 500&lt;br /&gt;
** Registreerumisel võiks kontrollida, kas kasutaja on juba olemas, mitte vaid rolli olemasolu&lt;br /&gt;
** Kas kasutajal ei või antud kontekstis olla mitu rolli? Sisselogimisel võetakse rollide seast vaid esimene ja lisatakse juurde Claimile. Võimalus kirjutada ka meetod, mis lisab kasutajale kõik rollid.&lt;br /&gt;
** CompetitionPlacesController/CompetitionsController/CompetitionTypesController/ParticipationsController/RegistrationsController/TeamsController. Antud kontrollerid on kõik väga sarnase loogikaga&lt;br /&gt;
** Get() tagastab vaid koodi 200, tagastuskoodi võimalusi on veel&lt;br /&gt;
** Post() meetod küsib sisse DTOd, mille üheks parameetriks on id, id genereeritakse automaatselt, seda ei peaks panema kaasa postitatavasse mudelisse, mis alles loob objekti&lt;br /&gt;
** Put() puhul sama kriitika, siin on id küll vajalik, aga see juba pannakse kaasa parameetrina eraldi&lt;br /&gt;
** See tundub natuke veidrana üritada kontrollida uuendatud mudeli põhjal, kas tegemist oli BadRequestiga. Eelkõige peaks id puhul üles otsima, kas antud objekt on üldse olemas ja seejärel üritada uuendada, muidu tagastada BadRequest. Kui see ei õnnestu, siis peaks juba errorkood 500 peegeldama seda, et midagi läks teenuse poole peal valesti. &lt;br /&gt;
** Sama kommentaar deletemise kohta, enne tuleks kontrollida, kas objekt on olemas. Siis alles objekt kustutada.&lt;br /&gt;
* PeopleController&lt;br /&gt;
** Kas tõepoolest igaüks saab pärida infot inimeste kohta ja neid postitada? &lt;br /&gt;
* PersonInTeamsController &lt;br /&gt;
** API disaini poole pealt on natuke veider teha vahetabelite kohta kontroller. Tundub loogilisem panna antud kontrolleri meetodid teistesse kontroleritesse, mis on seotud siis kas meeskondade või inimestega. Näiteks küsida ** PeopleControlleris kõik inimesed, kes on meeskondades või küsida neid meeskonna järgi. TeamsControlleris seevastu anda võimalus lisada uusi inimesi meeskonda, neid muuta või eemaldada.&lt;br /&gt;
Id järgi ei hakka ükski klient küsima vahetabeli kohta infot, see tundub otstarbetu tegevus, pigem küsida kas meeskonna või inimese id järgi sissekandeid&lt;br /&gt;
* Kriitika kontrollerite kohta: kontrollerid enamuses pöörduvad vaid spetsiifiliste domeenide poole ja viivad ellu väga tavalist CRUD funktsionaalsust, mille tõttu tundub, et need on natuke veel toored. Näiteks on välja toodud “must have” nimekirjas projekti analüüsis, et meeskonna liige peaks saama muuta meeskonna andmeid. Antud kontrollerites vaid autentitakse, et kasutaja oleks rollis “participant”, kuid mitte seda, kas ta ka muudetava meeskonna liige on. Samuti pole võimalik kasutajatel näha, palju on mingile võistlusele osalejaid registreerunud, CompetitionsController ei tegele sellega, et tagastada võistlusele registreerunud kasutajaid, selle asemel on olemas ParticipationsController, mis tagastab vahetabeli infot selle kohta, mis võistlusega on seotud mis inimene. See võib olla tohutult suur info, mida hakata filtreerima kliendi poolelt. Rohkem tuleks teha andmete agregeerimist vastavalt teenuse kontekstile.&lt;br /&gt;
&lt;br /&gt;
==== Projekti kihid/struktuur: ====&lt;br /&gt;
* Olemas Business Logic, Data Access Layer, DTO’d, Service’id, Unit of Work, domeeniklassid ning API spetsiifilised kontrollerid, mis asuvad oma kaustas põhiprojekti all . DAL omab erinevaid kihte interface’ide ja neid implementeerivate klasside jaoks. Repositooriumitega suhtlemine on abstraktne, kõik käib läbi Data Access Layer’i, mille pööle pöörduvad teenuseklassid ning DAL erinevad kihid hoolitsevad selle eest, et loodaks õiget tüüpi repositooriumeid, andmeid agregeeritakse, uuendatakse ja salvestatakse organiseeritud kujul ning neid tagastatakse teenustele soovitud kujul (DTOd).&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 02.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131180</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131180"/>
		<updated>2018-06-03T20:42:22Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Retsensioonid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XMLFileXML.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
=== Veebiteenuse retsensioon meeskonnale [https://wiki.itcollege.ee/index.php/MOT MOT] ===&lt;br /&gt;
&lt;br /&gt;
* Puudub README vms. Dokumentatsioon projekti ülespanemiseks ja seadistamiseks.&lt;br /&gt;
* Rollide loomine vigane, seda võiks teha eraldi failis, mis on DAL.App.EF projektis (kasutasime algul sama lähenemist nagu antud projekt). Takistab esialgset andmebaasi uuendust, kui rollid veel puuduvad. Rakenduse installimine tarnitud kujul ei õnnestunud. Selleks et Nuget Package Manageri käsk Update-Database töötaks pidi ajutiselt välja kommenteerima Startup.cs faili rea 153 (// CreateRoles(services).Wait();).&lt;br /&gt;
==== Andmebaasist: ====&lt;br /&gt;
* Üldiselt paneksin igale väljale juurde AddTime ja UpdateTime see on hea tava millest korduvalt ka andmebaasi alustes räägiti ja rõhutati.&lt;br /&gt;
==== Olemitest: ====&lt;br /&gt;
* Kui juba domainis nimetate kõik olemid singulaarselt siis võiks ju sama teha ka andmebaasis - lisakeerukuse loomine kohas kus see ei ole vajalik.&lt;br /&gt;
* Entity-te arv oli nõutust väiksem - Kokku 8 olemit, millest 1 on many-to-many liittabel ja 1 otsene koopia Identity framework Users tabelist. &lt;br /&gt;
* Olem People ~= Users ja sisaldab ka viidet Identity tabelile ApplicationUsers (ApplicationUserId). Juhul kui see on mõeldud rakendusega mitte registreerunud kasutajate võistlusele kirja panemiseks, siis oleks olemil rohkem infot vaja - vähemalt mingigi kontakti väli (email |/&amp;amp; tel.nr. |/&amp;amp; aadress).&lt;br /&gt;
* Competition.Comment on varchar(100) - võiks ja peaks olema varchar(1000)&lt;br /&gt;
* Competition.CompetitionPlaceId - kui võistluse toimumiskoht mingil põhjusel peaks keelduma korraldusest või kui võistlust alles pannakse kokku ja ei ole veel teada kus see toimuma saab siis mis peaks sinna sisestama (NOT NULL =&amp;gt; NULL)&lt;br /&gt;
* Competition.Time -&amp;gt; Mis aega see näitab? Property nimest seda välja ei loe. Kui StartTime, siis kus on EndTime või Duration?&lt;br /&gt;
* CompetitionPlace.County -&amp;gt; int type enum default väärtus on 0, kuna see pole aga enumi klassis implementeeritud põhjustab see vea. (Millisele maakonnale vastab 0?) See teada tuntud probleem millele google annab hõlpsasti erinevaid lahendusi: näiteks [https://stackoverflow.com/questions/24350377/entity-framework-6-code-first-required-enum-data-type-not-working?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin] ja [https://stackoverflow.com/questions/529929/choosing-the-default-value-of-an-enum-type-without-having-to-change-values/529937?utm_medium=organic&amp;amp;utm_source=google_rich_qa&amp;amp;utm_campaign=google_rich_qa siin].&lt;br /&gt;
* Väljad mis viitavad Identity framework olemitele läbi nende ID-de ei peaks olema nvarchar(max) vaid nvarchar(450) (kuigi isegi see on reaalsuses liiga pikk).&lt;br /&gt;
* PersonInTeam.PersonInTeamId -&amp;gt; ei peaks olema sellist välja üldse, selle tabeli PK peaks olema kombinatsioon nende tabeli ID-st mida ta ühendab. Praegu ei ole unique indeksit üle nende, mis tähendab et sama inimene saab mitu korda sama tiimiga liituda.&lt;br /&gt;
* Participations - Miks selline nimi, kui registreerimine juba oli? Saan aru et selles olemis tahetakse säilitada võistluse tulemusi. Siis võiks ju juba olla CompetitionResults. Kus on aga saavutatud koha numbri talletamine? Kui võistluse punktid ja ajad on kõik kirja saadud siis tahaks ju tulemusi ka kuidagi näha ja võrrelda ning selle võrdluse tulemi kuhugi salvestada.&lt;br /&gt;
* Participations.Time - Mis aega näitab? Eeldan, et võistluse läbimise aega? Kui nii, siis miks ei ole NULL lubatud - mõnedel võistlustel aega ju ei mõõdeta?&lt;br /&gt;
* Participation.Points - Kas igal võistlusel antakse ainult täisarv punkte (int)? Võiks igaks juhuks siiski implementeerida double väärtuse tüübi. Lisaks ei ole võimalik osalust luua ilma punkte teadmata - peaks siis määrama default väärtus. Mõnede võistluste puhul jälle punkte ei anta vaid mõõdetakse aega.&lt;br /&gt;
* Participation.Disqualified - Nullid ei ole lubatud -&amp;gt; järelikult oleks default väärtust vaja.&lt;br /&gt;
* Registrations - Projekti Must have alla on märgitud “Osaleja saab registreerida võistlusele meeskonda” kuid olemis puudub TeamsId ning samuti ei ole seda võimalust kuidagi läbi Servicei implementeeritud.&lt;br /&gt;
* Registrations - Millal registreering tehti on suhteliselt tähtis teada. Paljude võistluste puhul sõltub sellest näiteks registreerimistasu. &lt;br /&gt;
==== DTO-d: ====&lt;br /&gt;
* Täiesti mõttetult sisse toodud kiht, lihtsalt selleks et nii oli ette nähtud. Kõik DTO-d konverteeritakse ümber 1:1-le Domain objektideks ja vastupidi.&lt;br /&gt;
* Üldiselt oleks vaja teha tööd veel DTOdega, et need rohkem peegeldaksid oma kasutust. Näiteks:&lt;br /&gt;
** küsides kõiki võistlusi, kas meil on tarvis avalikustada kliendile, mis on kasutaja ID, kes iga võistluse lõi? DTOsid võiks olla rohkem erinevate kasutusjuhtumite jaoks. &lt;br /&gt;
** CompetitionDTO võiks sisaldada ka nimekirja võistlejatest, kus koondatakse info ManyToMany seoste põhjal kasutades vahetabelit, nagu näiteks:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
List&amp;lt;PersonDTO&amp;gt; people = c.Participation&lt;br /&gt;
.FindAll(p =&amp;gt; p.CompetitionId == c.CompetitionId)&lt;br /&gt;
.Select(PersonDTO.CreateFromParticipation)&lt;br /&gt;
.ToList();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== API Kontrolleritest: ====&lt;br /&gt;
* Puudub Swagger startup konfiguratsioon, Swagger annotatsioonid kaotavad mõtte ning pole võimalik kontrollida, kas need on korrektselt loodud.&lt;br /&gt;
* ProducesResponse annotatsiooni pole kusagile lisatud, staatuskoodid on natuke poolikult läbi mõeldud, vähemalt need, mida Swaggeri raames mainitud on&lt;br /&gt;
*Annotatsioon Authorize, kus on ära määratud AuthorizationScheme peaks minema kogu klassi peale, meetodis saab ära määrata vaid selle, mis rollid on lubatud.&lt;br /&gt;
* AccountController&lt;br /&gt;
** Response code uue kasutaja loomisel võiks olla 201&lt;br /&gt;
** Puuduvad koodid nagu 429, 500&lt;br /&gt;
** Registreerumisel võiks kontrollida, kas kasutaja on juba olemas, mitte vaid rolli olemasolu&lt;br /&gt;
** Kas kasutajal ei või antud kontekstis olla mitu rolli? Sisselogimisel võetakse rollide seast vaid esimene ja lisatakse juurde Claimile. Võimalus kirjutada ka meetod, mis lisab kasutajale kõik rollid.&lt;br /&gt;
** CompetitionPlacesController/CompetitionsController/CompetitionTypesController/ParticipationsController/RegistrationsController/TeamsController&lt;br /&gt;
Antud kontrollerid on kõik väga sarnase loogikaga&lt;br /&gt;
** Get() tagastab vaid koodi 200, tagastuskoodi võimalusi on veel&lt;br /&gt;
** Post() meetod küsib sisse DTOd, mille üheks parameetriks on id, id genereeritakse automaatselt, seda ei peaks panema kaasa postitatavasse mudelisse, mis alles loob objekti&lt;br /&gt;
** Put() puhul sama kriitika, siin on id küll vajalik, aga see juba pannakse kaasa parameetrina eraldi&lt;br /&gt;
** See tundub natuke veidrana üritada kontrollida uuendatud mudeli põhjal, kas tegemist oli BadRequestiga. Eelkõige peaks id puhul üles otsima, kas antud objekt on üldse olemas ja seejärel üritada uuendada, muidu tagastada BadRequest. Kui see ei õnnestu, siis peaks juba errorkood 500 peegeldama seda, et midagi läks teenuse poole peal valesti. &lt;br /&gt;
** Sama kommentaar deletemise kohta, enne tuleks kontrollida, kas objekt on olemas. Siis alles objekt kustutada.&lt;br /&gt;
* PeopleController&lt;br /&gt;
** Kas tõepoolest igaüks saab pärida infot inimeste kohta ja neid postitada? &lt;br /&gt;
* PersonInTeamsController &lt;br /&gt;
** API disaini poole pealt on natuke veider teha vahetabelite kohta kontroller. Tundub loogilisem panna antud kontrolleri meetodid teistesse kontroleritesse, mis on seotud siis kas meeskondade või inimestega. Näiteks küsida ** PeopleControlleris kõik inimesed, kes on meeskondades või küsida neid meeskonna järgi. TeamsControlleris seevastu anda võimalus lisada uusi inimesi meeskonda, neid muuta või eemaldada.&lt;br /&gt;
Id järgi ei hakka ükski klient küsima vahetabeli kohta infot, see tundub otstarbetu tegevus, pigem küsida kas meeskonna või inimese id järgi sissekandeid&lt;br /&gt;
* Kriitika kontrollerite kohta: kontrollerid enamuses pöörduvad vaid spetsiifiliste domeenide poole ja viivad ellu väga tavalist CRUD funktsionaalsust, mille tõttu tundub, et need on natuke veel toored. Näiteks on välja toodud “must have” nimekirjas projekti analüüsis, et meeskonna liige peaks saama muuta meeskonna andmeid. Antud kontrollerites vaid autentitakse, et kasutaja oleks rollis “participant”, kuid mitte seda, kas ta ka muudetava meeskonna liige on. Samuti pole võimalik kasutajatel näha, palju on mingile võistlusele osalejaid registreerunud, CompetitionsController ei tegele sellega, et tagastada võistlusele registreerunud kasutajaid, selle asemel on olemas ParticipationsController, mis tagastab vahetabeli infot selle kohta, mis võistlusega on seotud mis inimene. See võib olla tohutult suur info, mida hakata filtreerima kliendi poolelt. Rohkem tuleks teha andmete agregeerimist vastavalt teenuse kontekstile.  &lt;br /&gt;
&lt;br /&gt;
==== Projekti kihid/struktuur: ====&lt;br /&gt;
* Olemas Business Logic, Data Access Layer, DTO’d, Service’id, Unit of Work, domeeniklassid ning API spetsiifilised kontrollerid, mis asuvad oma kaustas põhiprojekti all . DAL omab erinevaid kihte interface’ide ja neid implementeerivate klasside jaoks. Repositooriumitega suhtlemine on abstraktne, kõik käib läbi Data Access Layer’i, mille pööle pöörduvad teenuseklassid ning DAL erinevad kihid hoolitsevad selle eest, et loodaks õiget tüüpi repositooriumeid, andmeid agregeeritakse, uuendatakse ja salvestatakse organiseeritud kujul ning neid tagastatakse teenustele soovitud kujul (DTOd).&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;br /&gt;
&lt;br /&gt;
=== 02.06-03.06.2018 ===&lt;br /&gt;
Tegeletud XML ja XSLT failide täiustamisega ja retsensioonide kirjutamisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131176</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131176"/>
		<updated>2018-06-03T20:34:33Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;XMLFileXML.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;2&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Hapukoor&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Alma hapukoor&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Täis Kõht&amp;lt;/title&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1 style=&amp;quot;color:DodgerBlue&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@url&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Kontakt number: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@contactnumber&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;email: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;@email&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Aadress: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:when test=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;menus/menu&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:sort select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;h3&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;xsl:if test=&amp;quot;activefrom != &#039;&#039; and activeto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;substring(activeto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;ul&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;li&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;br/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:sort select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;availablefrom != &#039;&#039; and availableto != &#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availablefrom,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; kuni &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;substring(availableto,1,10)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; - &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;  &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;span style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@glutenfree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;G &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@lactosefree=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;L &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:if test=&amp;quot;@vegan=&#039;true&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;V &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &amp;lt;/span&amp;gt;&lt;br /&gt;
                  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;xsl:for-each select=&amp;quot;ingredients/ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;position()!=last()&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;p style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@price!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@price&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt; / Päevapakkumise hind: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;@dailyprice!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;@dailyprice&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;-&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
                  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                  &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:text&amp;gt;Hinnang praele: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                    &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;br/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                  &amp;lt;/div&amp;gt;&lt;br /&gt;
                  &amp;lt;br/&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;div style=&amp;quot;background-color:LightGray;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;Hinnang restoranile: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;rating/@ratingvalue!=&#039;&#039;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;rating/@ratingvalue&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:text&amp;gt;Ei ole veel hinnatud!&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;rating/comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;username&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:text&amp;gt;: &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;commenttext&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;br/&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;p&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;*G - gluteenivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;L - laktoosivaba, &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:text&amp;gt;V - vegan &amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
XML&#039;is kuvatakse elemendid ja atribuudid eesti keeles. Kuvatakse restorani andmed ja toidud, mille hinnang on 8 või rohkem punkti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;restoranid&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:for-each select=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;restoran url=&amp;quot;{@url}&amp;quot; telefon=&amp;quot;{@contactnumber}&amp;quot; email=&amp;quot;{@email}&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:value-of select=&amp;quot;name&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;/nimi&amp;gt;&lt;br /&gt;
          &amp;lt;aadress&amp;gt;&lt;br /&gt;
            &amp;lt;postiaadress&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/addressfirstline&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/postiaadress&amp;gt;&lt;br /&gt;
            &amp;lt;linn&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/locality&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/linn&amp;gt;&lt;br /&gt;
            &amp;lt;indeks&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/postcode&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/indeks&amp;gt;&lt;br /&gt;
            &amp;lt;riik&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;address/@country&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/riik&amp;gt;&lt;br /&gt;
          &amp;lt;/aadress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;parimadToidud&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:when test=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;menus/menu/dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;dishes/dish&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:if test=&amp;quot;rating/@ratingvalue &amp;amp;gt;= 8.0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;heaToit hinnang=&amp;quot;{rating/@ratingvalue}&amp;quot; paevaPakkumiseHind=&amp;quot;{@dailyprice}&amp;quot; hind=&amp;quot;{@price}&amp;quot; &lt;br /&gt;
                             vegan=&amp;quot;{@vegan}&amp;quot; laktoosivaba=&amp;quot;{@lactosefree}&amp;quot; gluteenivaba=&amp;quot;{@glutenfree}&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;nimi&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/nimi&amp;gt;&lt;br /&gt;
                      &amp;lt;kirjeldus&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/kirjeldus&amp;gt;&lt;br /&gt;
                    &amp;lt;/heaToit&amp;gt;&lt;br /&gt;
                  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
          &amp;lt;/parimadToidud&amp;gt;&lt;br /&gt;
        &amp;lt;/restoran&amp;gt;&lt;br /&gt;
      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
    &amp;lt;/restoranid&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Retsensioonid ==&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131109</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131109"/>
		<updated>2018-06-02T21:28:40Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* XML/XSD/XSLT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;2018-05-28T12:00:00&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;2018-06-25T12:00:00&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; price=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;2018-05-27T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;2018-05-28T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; price=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; price=&amp;quot;3.8&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; price=&amp;quot;3.9&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; price=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;2018-05-25T12:00:00&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;2018-06-25T12:00:00&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; price=&amp;quot;4.5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; minOccurs=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot; minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131044</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131044"/>
		<updated>2018-06-01T18:18:10Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Logiraamat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;6/25/2018 12:00:00 PM&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;4&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating&amp;gt;&lt;br /&gt;
              &amp;lt;ratingvalue&amp;gt;4&amp;lt;/ratingvalue&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot; repetitioninterval=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;activeto/&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;5&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;3.8&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating/&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;3.9&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;14&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;availableto/&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;5/25/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;6/25/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;4.5&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;availableto/&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 31.05-01.06.2018 ===&lt;br /&gt;
Tegeletud XML, XSD ja XSLT failide loomisega.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131043</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131043"/>
		<updated>2018-06-01T18:17:07Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;6/25/2018 12:00:00 PM&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;4&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating&amp;gt;&lt;br /&gt;
              &amp;lt;ratingvalue&amp;gt;4&amp;lt;/ratingvalue&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot; repetitioninterval=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;activeto/&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;5&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;3.8&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating/&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;3.9&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;14&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;availableto/&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;5/25/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;6/25/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;4.5&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;availableto/&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(HTML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT(XML) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131042</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=131042"/>
		<updated>2018-06-01T18:14:54Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: Ta2isKo6ht-DB-FINAL.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
(master branchi viimane commit esitamise ajal)&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi/archive/61438e187a1a972410c8a3bc6274d69489d00aa6.zip&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
* Esimese admin kasutaja loomiseks tuleb kasutaja registreerida admin@gmail.com e-mailiga&lt;br /&gt;
&lt;br /&gt;
== XML/XSD/XSLT ==&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;restaurants&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;1&amp;quot; url=&amp;quot;https://kuuspelmeeni.ee&amp;quot; contactnumber=&amp;quot;507783342&amp;quot; email=&amp;quot;kuuspelmeeni@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kuus Pelmeeni]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;1&amp;quot; repetitioninterval=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Päevamenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/activefrom&amp;gt;&lt;br /&gt;
        &amp;lt;activeto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/activeto&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;1&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;550&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;&amp;quot; dailyprice=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[8 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[8 pelmeeni 6 asemel serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim päevaroog viimasel ajal.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion id=&amp;quot;1&amp;quot; type=&amp;quot;visual&amp;quot; classname=&amp;quot;bold-red-border-2px&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;name&amp;gt;2px red border&amp;lt;/name&amp;gt;&lt;br /&gt;
              &amp;lt;description&amp;gt;&amp;lt;![CDATA[Displays a 2px wide red border around the component that is promoted.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;validto&amp;gt;6/25/2018 12:00:00 PM&amp;lt;/validto&amp;gt;&lt;br /&gt;
            &amp;lt;/promotion&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;2&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;320&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;4&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kurgisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Erinevatel viisidel töödeldud kurk serveeritud koos jõhvikatega. Tervislik amps.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom&amp;gt;5/27/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
            &amp;lt;availableto&amp;gt;5/28/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating&amp;gt;&lt;br /&gt;
              &amp;lt;ratingvalue&amp;gt;4&amp;lt;/ratingvalue&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Jäin veel väga näljaseks peale selle söömist.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
      &amp;lt;menu id=&amp;quot;2&amp;quot; repetitioninterval=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;&amp;lt;![CDATA[Põhimenüü]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;activefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;activeto/&amp;gt;&lt;br /&gt;
        &amp;lt;dishes&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;4&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;550&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;5&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[6 pelmeeni]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[6 pelmeeni serveeritud tervisliku koguse hapukoore ja tilliga]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients&amp;gt;&lt;br /&gt;
              &amp;lt;ingredient id=&amp;quot;1&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;Sealiha&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;description&amp;gt;Rakvere sealiha&amp;lt;/description&amp;gt;&lt;br /&gt;
              &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
            &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;9.5&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Käin seda iga päev söömas.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim toit selles restoranis.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;5&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;460&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;3.8&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Kartulisalat]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Sinki sisaldav traditsiooniline kartulisalat.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating/&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
          &amp;lt;dish id=&amp;quot;6&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;610&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;3.9&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&amp;lt;![CDATA[Šokolaadikook]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahvatlev glasuuritud šokolaadikook.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
            &amp;lt;availableto/&amp;gt;&lt;br /&gt;
            &amp;lt;servetime/&amp;gt;&lt;br /&gt;
            &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
            &amp;lt;rating ratingvalue=&amp;quot;7.8&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;comments&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Šokolaadikooki on keeruline metsa keerata.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
                  &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
                  &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/comments&amp;gt;&lt;br /&gt;
            &amp;lt;/rating&amp;gt;&lt;br /&gt;
            &amp;lt;promotion/&amp;gt;&lt;br /&gt;
          &amp;lt;/dish&amp;gt;&lt;br /&gt;
        &amp;lt;/dishes&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/menu&amp;gt;&lt;br /&gt;
    &amp;lt;/menus&amp;gt;&lt;br /&gt;
    &amp;lt;dishes/&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;1&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Tatari 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;10132&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;7.5&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Parim restoran üldse!]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma sain ainult 5 pelmeeni. Ootasin kuute.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
  &amp;lt;restaurant id=&amp;quot;2&amp;quot; url=&amp;quot;https://kolmkokka.ee&amp;quot; contactnumber=&amp;quot;6522351&amp;quot; email=&amp;quot;kolmkokka@gmail.com&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;&amp;lt;![CDATA[Kolm kokka]]&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;menus/&amp;gt;&lt;br /&gt;
    &amp;lt;dishes&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;7&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;false&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;470&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;14&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ahjulõhe juurikatega]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ahjulõhe serveeritud püreestatud porgandite ja lillkapsaga.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;availableto/&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;11&amp;quot; amountunit=&amp;quot;tk&amp;quot; amount=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ahjulõhe&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Värske ahjulõhe]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;12&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud porgand&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti porgand, mis on kergelt püreestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;13&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Püreestatud lillkapsas&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Eesti lillkapsas, mis on kergelt püreestatud ja maitsestatud]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8.9&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Kindlasti minu üks lemmikuid.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Pole midagi halba öelda.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;tiiuviiu&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;0730a7b7-3a9c-4e26-962f-da9a8daeab8a&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;8&amp;quot; vegan=&amp;quot;true&amp;quot; lactosefree=&amp;quot;true&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;true&amp;quot; kcal=&amp;quot;&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;&amp;quot; dailyprice=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Ingverisupp]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Ingveriga vürtsistatud ingverisupp, mis viib keele alla.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom&amp;gt;5/25/2018 12:00:00 PM&amp;lt;/availablefrom&amp;gt;&lt;br /&gt;
        &amp;lt;availableto&amp;gt;6/25/2018 12:00:00 PM&amp;lt;/availableto&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients&amp;gt;&lt;br /&gt;
          &amp;lt;ingredient id=&amp;quot;14&amp;quot; amountunit=&amp;quot;g&amp;quot; amount=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Ingver&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&amp;lt;![CDATA[Tükeldatud ingver]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
          &amp;lt;/ingredient&amp;gt;&lt;br /&gt;
        &amp;lt;/ingredients&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Liiga palju ingverit.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
      &amp;lt;dish id=&amp;quot;9&amp;quot; vegan=&amp;quot;false&amp;quot; lactosefree=&amp;quot;false&amp;quot; glutenfree=&amp;quot;true&amp;quot; daily=&amp;quot;false&amp;quot; kcal=&amp;quot;340&amp;quot; weightg=&amp;quot;&amp;quot; price=&amp;quot;4.5&amp;quot; dailyprice=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;![CDATA[Apelsinijäätis]]&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;&amp;lt;![CDATA[Apelsinimaitseline jäätis serveeritud riivitud apelsinikoorega.]]&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;availablefrom/&amp;gt;&lt;br /&gt;
        &amp;lt;availableto/&amp;gt;&lt;br /&gt;
        &amp;lt;servetime/&amp;gt;&lt;br /&gt;
        &amp;lt;ingredients/&amp;gt;&lt;br /&gt;
        &amp;lt;rating ratingvalue=&amp;quot;8&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;comments&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Väga huvitav magustoit, prooviks veel.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
            &amp;lt;comment&amp;gt;&lt;br /&gt;
              &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Üks mu lemmikuid magustoite.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
              &amp;lt;username&amp;gt;ingupingu22&amp;lt;/username&amp;gt;&lt;br /&gt;
              &amp;lt;userid&amp;gt;45b09f05-33fd-4041-995e-ecdb7ec61939&amp;lt;/userid&amp;gt;&lt;br /&gt;
            &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;/comments&amp;gt;&lt;br /&gt;
        &amp;lt;/rating&amp;gt;&lt;br /&gt;
        &amp;lt;promotion/&amp;gt;&lt;br /&gt;
      &amp;lt;/dish&amp;gt;&lt;br /&gt;
    &amp;lt;/dishes&amp;gt;&lt;br /&gt;
    &amp;lt;address id=&amp;quot;2&amp;quot; country=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;addressfirstline&amp;gt;Laia 12&amp;lt;/addressfirstline&amp;gt;&lt;br /&gt;
      &amp;lt;locality&amp;gt;Tallinn&amp;lt;/locality&amp;gt;&lt;br /&gt;
      &amp;lt;postcode&amp;gt;13022&amp;lt;/postcode&amp;gt;&lt;br /&gt;
      &amp;lt;region&amp;gt;Harjumaa&amp;lt;/region&amp;gt;&lt;br /&gt;
    &amp;lt;/address&amp;gt;&lt;br /&gt;
    &amp;lt;promotion/&amp;gt;&lt;br /&gt;
    &amp;lt;rating ratingvalue=&amp;quot;8.1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;comments&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Hinnad on natuke liiga kallid minu jaoks, aga toit om maitsev.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;peeterpakiraam66&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a9dd653-30fb-40ab-97b1-33cb82d336eb&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Ma kindlasti telliks kala uuesti. Väga mahlakas oli.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;kyllikekallike1&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;6af271dd-0e11-4ae6-98be-111762664318&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;comment&amp;gt;&lt;br /&gt;
          &amp;lt;commenttext&amp;gt;&amp;lt;![CDATA[Asukoht oli päris tore. Miljöö ka.]]&amp;gt;&amp;lt;/commenttext&amp;gt;&lt;br /&gt;
          &amp;lt;username&amp;gt;mutikas3&amp;lt;/username&amp;gt;&lt;br /&gt;
          &amp;lt;userid&amp;gt;3a29b94a-3f17-469d-a44d-f7d85e98dd3e&amp;lt;/userid&amp;gt;&lt;br /&gt;
        &amp;lt;/comment&amp;gt;&lt;br /&gt;
      &amp;lt;/comments&amp;gt;&lt;br /&gt;
    &amp;lt;/rating&amp;gt;&lt;br /&gt;
  &amp;lt;/restaurant&amp;gt;&lt;br /&gt;
&amp;lt;/restaurants&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;restaurants&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;restaurant&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;menus&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;activeto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                              &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                  &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                                    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                                      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                        &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                                      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                                    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                                  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                                &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                              &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                            &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;promotion&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;validto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;type&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:attribute name=&amp;quot;classname&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:unsignedShort&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;repetitioninterval&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;dishes&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;dish&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availablefrom&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;availableto&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;servetime&amp;quot; type=&amp;quot;xs:dateTime&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;ingredients&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence minOccurs=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;ingredient&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;name&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amountunit&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;amount&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                          &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                            &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                          &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                        &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;vegan&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;lactosefree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;glutenfree&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;daily&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;kcal&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;weightg&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;price&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;dailyprice&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;address&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;addressfirstline&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;locality&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;postcode&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;region&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;country&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;promotion&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;rating&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;comments&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;comment&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;commenttext&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;userid&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;ratingvalue&amp;quot; type=&amp;quot;xs:decimal&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:int&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;url&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;contactnumber&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;email&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130890</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130890"/>
		<updated>2018-05-27T20:08:37Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: TäisKõht-2018-05-27 21 58.png]]&lt;br /&gt;
&lt;br /&gt;
== Projekti repository ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
Zip fail saadaval: &lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleRestaurantDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants/addUserToRestaurant&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO newRestaurant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostRestaurantDTO restaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PostRestaurantDTO updatedRestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO menuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO newMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostMenuDTO menuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO updatedMenu&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Menus/{id}/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int menuId, int[] dishIds&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;SimpleDishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/dishes/search?title=th&amp;amp;priceLimit=null&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title, decimal? priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt; result&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO dishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO newDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostDishDTO dishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO updatedDish&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/Dishes/{id}/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId, PostIngredientForDishDTO[] ingredients&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO i&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO newIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PostIngredientDTO ingredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO updatedIngredient&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RatingLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO dto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO newRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RatingLogForEntityDTO ratingDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RatingLogDTO updatedRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE api/v1/ratings/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===RequestLog===&lt;br /&gt;
&#039;&#039;&#039;GET: api/v1/usageData/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RequestLogDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130869</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130869"/>
		<updated>2018-05-27T19:17:22Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Idee */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
=== Esialgne prototüüp ===&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.1]&lt;br /&gt;
&lt;br /&gt;
=== Prototüübi muutus projekti käigus ===&lt;br /&gt;
&lt;br /&gt;
Prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/T%C3%A4isK%C3%B5ht/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon vol.2]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: TäisKõht-2018-05-27 21 58.png]]&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/search?title=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/pricelimit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: decimal priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantId&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishRating&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantRating&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130866</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130866"/>
		<updated>2018-05-27T19:11:34Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Lõpptoote kasutusjuhend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: TäisKõht-2018-05-27 21 58.png]]&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO newPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO updatedPromotion&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/search?title=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/pricelimit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: decimal priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantId&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishRating&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantRating&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Kloonida kohalikku arvutisse repository aadressilt [https://github.com/sikumiku/TaisKohtApi https://github.com/sikumiku/TaisKohtApi]&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* Frontend rakenduse kasutamiseks valida Startup meetoditest IIS Express, veebiteenuse ja Swaggeri kasutamiseks käivitada Api Swagger&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130863</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130863"/>
		<updated>2018-05-27T19:07:58Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: TäisKõht-2018-05-27 21 58.png]]&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO promotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/search?title=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/pricelimit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: decimal priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantId&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishRating&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantRating&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
* Installida NodeJS&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install webpack -g&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source&amp;gt;npm install -cli -g&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130860</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130860"/>
		<updated>2018-05-27T19:04:20Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti algus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus - projekti lõpp ==&lt;br /&gt;
&lt;br /&gt;
[[File: TäisKõht-2018-05-27 21 58.png]]&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel registerViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: LoginViewModel model&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accounts===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/getAllUsersInRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/accounts/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id, UpdateUserDTO userDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/accounts/addRoleToUser&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string role, string userId&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/accounts/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: PromotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, PromotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restaurants===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/restaurants/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Menus===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dishes===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/search?title=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: string title&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/pricelimit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: decimal priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ingredients===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PUT /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id, IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DELETE /api/v1/ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ratings===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishId&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantId&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int dishRating&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;POST /api/v1/ratings/restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt;  &lt;br /&gt;
Params: int restaurantRating&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:T%C3%A4isK%C3%B5ht-2018-05-27_21_58.png&amp;diff=130859</id>
		<title>File:TäisKõht-2018-05-27 21 58.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:T%C3%A4isK%C3%B5ht-2018-05-27_21_58.png&amp;diff=130859"/>
		<updated>2018-05-27T19:03:59Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130824</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130824"/>
		<updated>2018-05-27T17:15:28Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* API v1 dokumentatsioon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
===Promotions===&lt;br /&gt;
&#039;&#039;&#039;GET /api/v1/promotions &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; &lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;PromotionDTO&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Promotions/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Promotions&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Promotions &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: PromotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: PromotionDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; PUT /api/v1/Promotions/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id, PromotionDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Promotions/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; DELETE /api/v1/Promotions/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Restaurants &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants/search?name=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Restaurants/search?name=th &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: string name&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants/Top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Restaurants/Top &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Restaurants/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants/{userId}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Restaurants/{userId} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int userId&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Restaurants &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; PUT /api/v1/Restaurants/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id, RestaurantDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; DELETE /api/v1/Restaurants/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Users&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Users &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;UserDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Users/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Users/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Users&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Users &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: UserDTO&lt;br /&gt;
&lt;br /&gt;
Returns: UserDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Users/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; PUT /api/v1/Users/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id, UserDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Users/deactivate/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; PUT /api/v1/Users/deactivate/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Users/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; DELETE /api/v1/Users/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Menus &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;MenuDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Menus/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Menus&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Menus &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: MenuDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; PUT /api/v1/Menus/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id, MenuDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Menus/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; DELETE /api/v1/Menus/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Dishes &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes/Daily&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Dishes/Daily &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: bool vegan, bool glutenFree, bool lactoseFree&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes/search?title=th&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Dishes/search?title=th &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: string title&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes/Price&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Dishes/Price &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: decimal priceLimit&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes/Top&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Dishes/Top &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int amount&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;DishDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Dishes/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Dishes &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; PUT /api/v1/Dishes/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id, DishDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Dishes/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; DELETE /api/v1/Dishes/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Ingredients &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: List&amp;lt;IngredientDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Ingredients/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ingredients&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Ingredients &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: IngredientDTO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; PUT /api/v1/Ingredients/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id, IngredientDTO&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ingredients/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; DELETE /api/v1/Ingredients/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int id&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ratings/Dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Ratings/Dish/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int dishId&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ratings/Restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Ratings/Restaurant/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int restaurantId&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ratings/Dish/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Ratings/Dish/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int dishRating&lt;br /&gt;
&lt;br /&gt;
Returns: DishDTO, int dishRating&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Ratings/Restaurant/{id}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Ratings/Restaurant/{id} &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: int restaurantRating&lt;br /&gt;
&lt;br /&gt;
Returns: RestaurantDTO, int restaurantRating&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Account/login&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Account/login &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: LoginViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Account/register&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Account/register &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: RegisterViewModel&lt;br /&gt;
&lt;br /&gt;
Returns: token&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Account/logout&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Account/logout &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Account/addRole&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; POST /api/v1/Account/addRole &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: role&lt;br /&gt;
&lt;br /&gt;
Returns: -&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;br /&gt;
&lt;br /&gt;
=== 05-06.05.2018 ===&lt;br /&gt;
Osalesime hackathonil. Lisatud controllerid, service&#039;id koos vajalike kihtidega.&lt;br /&gt;
&lt;br /&gt;
=== 16.05.2018 ===&lt;br /&gt;
Uuendatud andmebaasimudelit, DTO&#039;sid.&lt;br /&gt;
&lt;br /&gt;
=== 18-19.05.2018 ===&lt;br /&gt;
Lisatud klientrakendus, security, äriloogikat.&lt;br /&gt;
&lt;br /&gt;
=== 20.05.2018 ===&lt;br /&gt;
Lisatud API dokumentatsioon.&lt;br /&gt;
&lt;br /&gt;
=== 22-24.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id.&lt;br /&gt;
&lt;br /&gt;
=== 25-27.05.2018 ===&lt;br /&gt;
Uuendatud contoller&#039;eid, service&#039;id. Lisatud kasutajate ja rollide kontrolle meetoditesse. Täiustatud klientrakendust. Swagger dokumentatsioon.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130727</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130727"/>
		<updated>2018-05-20T11:59:27Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* API v1 dokumentatsioon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Restaurants &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
&lt;br /&gt;
Tagastab: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130726</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130726"/>
		<updated>2018-05-20T11:59:13Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
&lt;br /&gt;
== API v1 dokumentatsioon ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;/api/v1/Restaurants&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source&amp;gt; GET /api/v1/Restaurants &amp;lt;/source&amp;gt;&lt;br /&gt;
Params: -&lt;br /&gt;
Tagastab: List&amp;lt;RestaurantDTO&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130392</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130392"/>
		<updated>2018-04-19T21:36:02Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Logiraamat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;br /&gt;
&lt;br /&gt;
=== 19.04.2018 ===&lt;br /&gt;
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=130331</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018&amp;diff=130331"/>
		<updated>2018-04-08T19:52:40Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Meeskond: BeerPressure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2018=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API2/ASP.NET Core 2.0/WCF võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;01.aprill 2018&#039;&#039;&#039;. Lisaks on  &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;27. mai 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;03. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2018#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;01. juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;05.juuni 2018&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), paigaldusjuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/7):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilirakendused/Angularis/reactis loodud klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
* Korraliku arhitektuuriga kirjutatud kood&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena(ASP.NET veebirakendus või hoopis Angulari või Reacti baasil), töölauarakendusena(WPF) või mobiilse rakendusena(Xamarin)&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
==Kaitsmisele registreerumine==&lt;br /&gt;
&lt;br /&gt;
=Teemad 2018 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2018=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/HairSaloon Meeskond: HairSaloon]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaido Henrik Elias&lt;br /&gt;
* Arvo Paomees&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VariousArtists Meeskond: VariousArtists]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Ruudi Vinter&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
* Madis Heinsoo&lt;br /&gt;
* Pavel Fleišer&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Maagikud Meeskond: Maagikud]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristina Rästas&lt;br /&gt;
*Simo Jaanus&lt;br /&gt;
*Artur Tammiste&lt;br /&gt;
*Rauno Lõhmus&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RaamatuRiiul Meeskond: RaamatuRiiul]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Alo Avi&lt;br /&gt;
* Arnika Rästa&lt;br /&gt;
* Marite Rammo&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Autolugu Meeskond: Autolugu]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Põlma&lt;br /&gt;
* Karl Erik Õunapuu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/VRII2018 Meeskond: VRII2018]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaspar Kaal&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Rahel Kangur&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Raavo_V2%E2%84%A2 Meeskond: Raavo V2™]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Peeter Fridolin&lt;br /&gt;
* Kristo Leesmann&lt;br /&gt;
* Rando Rommot&lt;br /&gt;
* Erik Kaup&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Pillarofautumn Meeskond: Pillar of Autumn ]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Põder&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Raido Vell&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/jaatuli Meeskond: JääTuli]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tarmo Luugus&lt;br /&gt;
*Leho Kivistik&lt;br /&gt;
*Hannes Mäeorg&lt;br /&gt;
*Marten Tammeleht&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/JustABot Meeskond: JustABot]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Argo Hansen&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond_Pakiraam Meeskond: Pakiraam]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Kristo Naeris&lt;br /&gt;
*Margus Kildemaa&lt;br /&gt;
*Indro Kottise&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/GoFood Meeskond: GoFood]===&lt;br /&gt;
Liikmed: &lt;br /&gt;
&lt;br /&gt;
* Rando Kurel&lt;br /&gt;
* Henrik Prangel&lt;br /&gt;
* Markus Mänd&lt;br /&gt;
* Edgar Tereping&lt;br /&gt;
* Jane Kaldma&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/LTD Meeskond: LearnToDrive]===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
*Kert Saarma&lt;br /&gt;
*Eve Ormisson&lt;br /&gt;
*Villem Markus Loigom&lt;br /&gt;
*Carlos Kirtsi&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Miisiiks Meeskond: Miisiiks]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Christo Aruste&lt;br /&gt;
*Heleriin Malkov&lt;br /&gt;
*Tõnis Prants&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BSIS Meeskond: BSIS]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Germo Väli&lt;br /&gt;
* siin on vaba koht kui on huvi projekti vastu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BestInShow Meeskond: BestInShow]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Abner&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/WatchWinders Meeskond: WatchWinders]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Toomas Juhkov&lt;br /&gt;
* Kunnar Kukk&lt;br /&gt;
* Tiit Kuuskmäe&lt;br /&gt;
&lt;br /&gt;
===[[ Kuldneloojang | Meeskond: Kuldne loojang]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andrus Seiman&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
* Kristjan Peterson&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Ophelia Meeskond: Ophelia]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
* Jorma Rebane&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/SharpRestoVRII Meeskond: SharpRestoVRII]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andres Aava&lt;br /&gt;
* Henri Annilo&lt;br /&gt;
* Jaan Koolmeister&lt;br /&gt;
* Lauri Üksti&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/BeerPressure Meeskond: BeerPressure]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&lt;br /&gt;
===[[ Memorize | Meeskond: Memorize]]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam&lt;br /&gt;
* Olle Mikk&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/UCanDo Meeskond: UCanDo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron&lt;br /&gt;
* Liina Saar&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS:&#039;&#039;&#039; Coming...&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/MOT Meeskond: MOT]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Merike Meizner&lt;br /&gt;
* Helen Oppar&lt;br /&gt;
* Hardi Tiitus&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:_MealPlanner Meeskond: MealPlanner]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Triin Oja&lt;br /&gt;
*Rein Remsu&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Meeskond:Curry Meeskond: Curry]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Hammas Meeskond: Hammas]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sten Lunden&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130322</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130322"/>
		<updated>2018-04-08T10:30:22Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Logiraamat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;br /&gt;
&lt;br /&gt;
=== 08.04.2018 ===&lt;br /&gt;
Tehtud muudatused analüüsis vastavalt tagasisidele.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130320</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130320"/>
		<updated>2018-04-08T10:28:27Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Kasutatav arendustehnoloogia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + React&#039;i.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130319</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130319"/>
		<updated>2018-04-08T10:23:31Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Nice-to-have funktsionaalsus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET MVC Web API tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + Angular/Backbone/React.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130318</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=130318"/>
		<updated>2018-04-08T10:23:22Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Rakenduse must-have funktsionaalsus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma (arendaja)&lt;br /&gt;
* Evelin Jõgi (arendaja)&lt;br /&gt;
* Martin Kask (projektijuht, arendaja)&lt;br /&gt;
* Marko Nõu (arendaja)&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Toidukohtade põhimenüüde ja päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Soovime pakkuda toidukohtade põhimenüüde ja päevapakkumiste teenust. On olemas mitmeid kodulehti “päevapakkumised”, kus on kirjas toidukohtade päevapraed. Kuid tavaliselt sellistel lehtedel ei ole masinloetavaid andmeid ehk siis varianti, et saad saata API pihta mingi kuupäeva koos päevapraadidega andmete uuendamiseks ja saad sama API käest küsida tänaseid päevapraade. Andmeid võiks saada küsida restorani, kuupäeva, asukoha või otsisõna/otsisõnaosa põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad teenuse pakkujad vastavat informatsiooni uuendama mitmes erinevas kohas - nii erinevates portaalides, kui ka enda veebileheküljel. Samuti oleks toidukohtade kogu menüü haldamine ühes kohas.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
== Kasutatav arendustehnoloogia ==&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel kasutame ASP.NET MVC Web API tehnoloogiat ja kursusel õpitud arendusmustreid.&lt;br /&gt;
&lt;br /&gt;
Klientrakenduse loomisel kasutame Node.js + Angular/Backbone/React.&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse analüüs ==&lt;br /&gt;
Pakume toidukohtade põhimenüüde ja päevapakkumiste teenust, kuhu on kokku koondatud erinevate toidukohtade menüüd üle Eesti. Põhimenüü alla kuuluvad pikaajalised menüüd, mis kehtivad püsivalt, hooajaliselt või mingil konkreetsel nädalapäeval. Päevapakkumiste alla kuuluvad konkreetse kuupäevaga seotud päevapakkumised. Päevapakkumiste korral kuvatakse lisainfona, kas pakkumine kehtib mingis konkreetses ajavahemikus või kogu toidukoha lahtioleku aja.&lt;br /&gt;
&lt;br /&gt;
Eesmärk on koguda ühte kohta kokku erinevate toidukohtade menüüd ja päevapakkumised, et kliendid saaksid mugavalt ja kiiresti oma valikuid teha. Kliendid käivad enamasti päevapakkumisi söömas lõuna ajal ja selleks ettenähtud aeg on piiratud. Sellepärast on oluline, et klient saaks teha oma valiku võimalikult kiiresti. Tänu loodavale veebiteenusele ei pea kliendid käima erinevates portaalides, et tutvuda erinevate toidukohtade pakkumistega. Kuna teenust on mugav kasutada ja klient saab oma valiku kiiresti tehtud, siis tõenäoliselt teeb klient valiku selles keskkonnas olevate toiduasutuste seast. Lisaks võimaldab teenus toiduasutustel paika panna oma pikaajalisem põhimenüü ning seda rakenduses ja võimalusel ka söögikohas kuvada. Sellepärast on ka toidukohtade huvi antud keskkonnas üleval olla ja meiega oma andmeid jagada, sest see suurendab nende klientuuri ning muudab oma menüü haldamise kergemaks.&lt;br /&gt;
&lt;br /&gt;
Veebiteenuse loomisel lähtume eelkõige sellest, et kliendil oleks teenust mugav kasutada ja ta saaks oma valiku kiiresti tehtud. Arvestame, et kliendid on erinevad. Mõni eelistab mõnda kindlat toidukohta, sel juhul saab ta valida oma soovitud kohad ja võrrelda nende kohtade tänase päeva pakkumisi ning menüüsid. Mõnele inimesele on oluline pakutav söök ja ta eelistab pakkumist otsida prae nimetuses oleva sõna või sõnaosa järgi ning lähtuda seejärel valiku tegemisel toidukoha keskmisest hindest või toidu hinnast. Mõne kliendi jaoks on oluline hind ja selleks, et oma valikut teha sobivas hinnavahemikus on tal võimalik sisestada maksimum hinna piirang. Kindlasti on antud teenuse juures kõikide klientide jaoks oluline päevapakkumiste asukohapõhine eristatus. Kliendid, kes soovivad oma konto luua, võivad oma eelistatud valikud meelde jätta ja järgmisel korral kuvatakse neid talle automaatselt.&lt;br /&gt;
&lt;br /&gt;
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.&lt;br /&gt;
&lt;br /&gt;
Arvestades pakutava teenusega, siis näeme, et aktiivseim teenuse kasutamine võib olla tööpäevadel vahemikus 11.00-15.00, kui kliendid tutvuvad päevapakkumistega. Teenus peab tekkivale koormusele vastu pidama.&lt;br /&gt;
&lt;br /&gt;
Teenuse pakkumine peab olema turvaline. Selle tagamiseks tuleb sisestatavaid andmeid valideerida ja andmebaasi sisestavate andmete mahtu piirata. Toidukohtade sisestatud andmed peavad olema kaitstud, et toitude koostised ei saaks avalikuks. Põhjendatud juhtudel on võimalik kasutajaid lukku panna.&lt;br /&gt;
&lt;br /&gt;
== Kasutajad ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.&lt;br /&gt;
* Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.&lt;br /&gt;
* Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.&lt;br /&gt;
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.&lt;br /&gt;
* Külastaja - klient, kes valib söögikohta. Tema on huvitatud eelkõige sellest, et teenust saaks kasutada mugavalt ja kiirelt ning toidukohtade valik oleks võimalikult suur.&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Kasutajad saavad sisse logida&lt;br /&gt;
* Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient&lt;br /&gt;
* Kasutajate arvepidamine kasutajate lõikes:&lt;br /&gt;
** sisselogimise kuupäev, kellaaeg&lt;br /&gt;
** pakkumiste lisamine&lt;br /&gt;
** pakkumiste muutmine&lt;br /&gt;
** pakkumiste kustutamine&lt;br /&gt;
** õiguste kehtimise periood (tasuta ja tellimusega toidukoht)&lt;br /&gt;
** pakkumistele klikkimise arv&lt;br /&gt;
* Kasutajaid on võimalik hallata:&lt;br /&gt;
** kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine&lt;br /&gt;
** Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna&lt;br /&gt;
* Päevapakkumisi/menüüsid saab küsida: &lt;br /&gt;
** toidukoha järgi, &lt;br /&gt;
** kuupäeva põhiselt (ainult päevapakkumisi), &lt;br /&gt;
** asukoha põhiselt,&lt;br /&gt;
** toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,&lt;br /&gt;
** hinna põhiselt (max hinna piirang).&lt;br /&gt;
* Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have funktsionaalsus ==&lt;br /&gt;
&lt;br /&gt;
* Info selle kohta, kas päevapakkumine on otsas&lt;br /&gt;
* Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Toidule saab anda hindeid ja kuvatakse keskmist hinnet.&lt;br /&gt;
* Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.&lt;br /&gt;
* Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.&lt;br /&gt;
* Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.&lt;br /&gt;
* Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.&lt;br /&gt;
* Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.&lt;br /&gt;
* Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.&lt;br /&gt;
* Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasi ülesehitus ==&lt;br /&gt;
&lt;br /&gt;
[[File: BeerPressureAndmebaasimudel.png]]&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 26.03.2018 ===&lt;br /&gt;
&lt;br /&gt;
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Täiendasime veebiteenuse analüüsi.&lt;br /&gt;
 &lt;br /&gt;
Esmase andmebaasi mudeli koostamine.&lt;br /&gt;
&lt;br /&gt;
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.&lt;br /&gt;
&lt;br /&gt;
=== 30.03.2018 ===&lt;br /&gt;
Valmis andmebaasimudel.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129789</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129789"/>
		<updated>2018-03-27T06:26:58Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Idee */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On päris mitu kodulehte ‘päevapakkumised’ kus kirjas toidukohtade päevapraed jms. mida sellistel lehtedel pole, on masiloetavad andmed ehk siis variant, et saad saata API pihta mingi kuupäeva koos päevapraadidega&lt;br /&gt;
ja saad sama API käest küsida tänased päevapraed kas firma, kuupäeva või asukoha põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad nad vastavat informatsiooni uuendama mitmes erinevas kohas - nii portaalides, kui ka enda leheküljel.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp: [http://enos.itcollege.ee/~saasma/VR2/Proto/K%C3%B5htT%C3%A4is/#g=1&amp;amp;p=home navigeeritav versioon]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs&#039;&#039;&#039; &lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud lõpptoote retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Projekti Prototüüp:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have sisu ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have lisad ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Postitatud esimeste analüüsi arutelute põhjal valminud algne prototüüp&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129788</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129788"/>
		<updated>2018-03-27T06:25:46Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* 25.03.2018 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On päris mitu kodulehte ‘päevapakkumised’ kus kirjas toidukohtade päevapraed jms. mida sellistel lehtedel pole, on masiloetavad andmed ehk siis variant, et saad saata API pihta mingi kuupäeva koos päevapraadidega&lt;br /&gt;
ja saad sama API käest küsida tänased päevapraed kas firma, kuupäeva või asukoha põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad nad vastavat informatsiooni uuendama mitmes erinevas kohas - nii portaalides, kui ka enda leheküljel.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs&#039;&#039;&#039; &lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud lõpptoote retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Projekti Prototüüp:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have sisu ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have lisad ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;br /&gt;
&lt;br /&gt;
=== 27.03.2018 ===&lt;br /&gt;
Postitatud esimeste analüüsi arutelute põhjal valminud algne prototüüp&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129787</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129787"/>
		<updated>2018-03-27T06:24:20Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Idee */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On päris mitu kodulehte ‘päevapakkumised’ kus kirjas toidukohtade päevapraed jms. mida sellistel lehtedel pole, on masiloetavad andmed ehk siis variant, et saad saata API pihta mingi kuupäeva koos päevapraadidega&lt;br /&gt;
ja saad sama API käest küsida tänased päevapraed kas firma, kuupäeva või asukoha põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad nad vastavat informatsiooni uuendama mitmes erinevas kohas - nii portaalides, kui ka enda leheküljel.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
&lt;br /&gt;
Esialgne prototüüp&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs&#039;&#039;&#039; &lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud lõpptoote retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Projekti Prototüüp:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have sisu ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have lisad ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129786</id>
		<title>BeerPressure</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=BeerPressure&amp;diff=129786"/>
		<updated>2018-03-27T06:23:32Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Meeskond ja rollid ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
* Martin Kask&lt;br /&gt;
* Marko Nõu&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&#039;&#039;&#039;Päevapakkumiste teenus&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
On päris mitu kodulehte ‘päevapakkumised’ kus kirjas toidukohtade päevapraed jms. mida sellistel lehtedel pole, on masiloetavad andmed ehk siis variant, et saad saata API pihta mingi kuupäeva koos päevapraadidega&lt;br /&gt;
ja saad sama API käest küsida tänased päevapraed kas firma, kuupäeva või asukoha põhiselt. Selline teenus lihtsustaks ka toidukohtade päevapakkumiste haldamist, kuna praegu peavad nad vastavat informatsiooni uuendama mitmes erinevas kohas - nii portaalides, kui ka enda leheküljel.&lt;br /&gt;
&lt;br /&gt;
[[File:TäisKõhtProto1.mp4]]&lt;br /&gt;
Esialgne prototüüp&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs&#039;&#039;&#039; &lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meie kirjutatud lõpptoote retsensioon&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Projekti Prototüüp:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Lõpptoote kasutusjuhend ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Rakenduse must-have sisu ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Nice-to-have lisad ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Logiraamat ==&lt;br /&gt;
&lt;br /&gt;
===07.02.2018===&lt;br /&gt;
Gupi loomine ning suhtluskanali seadistamine&lt;br /&gt;
&lt;br /&gt;
=== 24.03.2018 ===&lt;br /&gt;
Trello boardi loomine&lt;br /&gt;
&lt;br /&gt;
=== 25.03.2018 ===&lt;br /&gt;
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:T%C3%A4isK%C3%B5htProto1.mp4&amp;diff=129785</id>
		<title>File:TäisKõhtProto1.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:T%C3%A4isK%C3%B5htProto1.mp4&amp;diff=129785"/>
		<updated>2018-03-27T06:21:51Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117568</id>
		<title>Talk:FoodBytes</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117568"/>
		<updated>2017-02-01T19:33:56Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Retsensioon meeskond FoodBytes projektile=&lt;br /&gt;
Koostanud:[[Meeskond: Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post)]]&lt;br /&gt;
&lt;br /&gt;
==Analüüsi retsensioon==&lt;br /&gt;
&lt;br /&gt;
FoodBytes rakenduse idee on hästi selgitatud ning retseptiraamatu funktsionaalsus on piisavalt arusaadav välisele lugejale. Positiivne on ka see, et andmebaasi struktuuri peale on mõeldud, mille põhjal saab juba rakendada funktsionaalsusi, mis on projekti “Must have” nimekirjas. Erinevate tabelite seosed on läbimõeldud ning võimaldab siduda retsepte kategooriate ja koostisosadega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Küll aga on tabelite nimetused natuke segased. Loogiline tunduks tabel, mis jätaks välja sõna “toiduaine”, kuna koostisosa ning toiduaine on üks ja sama asi. Pakuks allolevat struktuuri Retseptide, Toiduaine ning Koostise tabelite asemele, mille puhul on RetseptiKoostisosad vaid siduva tabeli rollis ja ei ole vaja juurde tuua uut terminit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Retseptid (RetseptID, retseptinimi, kirjeldus, juhend, kuupäev, kasutaja_id, kategooria_id, (pilt_id))&lt;br /&gt;
* Koostisosad (KoostisosaID, koostisosa)&lt;br /&gt;
* RetseptiKoostisosad (RetseptID, KoostisosaID, kogus, yhik_id)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rakenduse ägedamaks muutmiseks võiks olla võimalus ka retsepti lisamise juures lisada tehtud toidu pilt nagu netiblogides või kokaraamatutes. Inimesed söövad ju eelkõige silmadega. Võiks lisada selle võimaluse “nice to have” funktsionaalsuse juurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tekkis mõttekoht seoses kasutajate lisamise ja kontode loomisega. Kuna rakendus on mõeldud koduseks kasutamiseks arvutis, siis näib paroolide loomine kontodele liialdusena. Piisaks ju lihtsalt kui rakenduse kasutaja saab valida või muuta, kes ta täpsemalt on. Samuti kui vaadata ainult “must have” funktsionaalsust, siis ei läheks kasutajate registreerimist ja paroolide haldust jne vaja. Piisab lihtsalt kui retseptiautoriks märkida kellegi nimi.&lt;br /&gt;
&lt;br /&gt;
Teine idee oleks eraldada toitumispäeviku/ajaloo jälgimine retseptide küljest ja vast siduda see otseselt kasutajaga. Ehk siis andmebaasis “tehtud” tabel paikneks kasutaja küljes ja seal oleks lisaks ka kasutajaId, mis võimaldaks üpriski kiiresti otsida hiljem, et mis retsepte kasutaja on teinud ja nii toitumispäevikut kuvada.&lt;br /&gt;
&lt;br /&gt;
==Lõpp-produkti retsensioon==&lt;br /&gt;
Koostanud:[[Meeskond: Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post)]]&lt;br /&gt;
&lt;br /&gt;
Retsensiooni üldmulje on see, et paljude plaanitud funktsionaalsustega ei jõudnud meeskond valmis, kuna analüüsi põhjal tundus, et plaanid olid palju suuremad. Rakendus on lihtne ja väikese korrigeerimise järel saab seda ka edukalt kasutada retseptide loomiseks, vaatamiseks ja kustutamiseks (mõningate ebamugavustega). Kahju, et funktsionaalsusi, mida me lootsime näha ei ole tehtud (piltide lisamine ja paroolide ära jätmine), kuid eks need olid ka soovituslikud ettepanekud. &lt;br /&gt;
&lt;br /&gt;
Toome allpool välja mõned põhilised punktid, mida tähele panime.&lt;br /&gt;
&lt;br /&gt;
===Plussid===&lt;br /&gt;
&lt;br /&gt;
* Kood kompileerub.&lt;br /&gt;
* Lihtne disain, less is more&lt;br /&gt;
* Error check on implementeeritud, retsepte saab avada iga inimene, kuid neid võib kustutada vaid originaalne looja. Ilma sisse logimata ei saa retsepte lisada.&lt;br /&gt;
* Kasutatud on MVVM arhitektuuri, kus on eraldatud objektid, päringud, äriloogika ja esitlus (viimase kahe sisu on veidikene segamini).&lt;br /&gt;
* Retseptide lisamine ja kustutamine toimib.&lt;br /&gt;
* Andmebaas tundub mõistliku struktuuriga (antud funktsionaalsuste juures).&lt;br /&gt;
&lt;br /&gt;
===Miinused===&lt;br /&gt;
* Ei saa lisada uut kasutajat (üritab NULL väärtust salvestada kasutaja tabelis).&lt;br /&gt;
* Ei saa vaadata looduid retsepte ilma otsimata&lt;br /&gt;
* Saab otsida vaid nime järgi (mitte kategooria järgi nagu eesmärkides)&lt;br /&gt;
* Retsepti lisamisel lisatakse “yhik”, “kategooria” tabelitesse uued väljad ka mitteunikaalsete väärtuste puhul, mis ei anna eraldi tabelitele eraldi otstarbekust&lt;br /&gt;
* Loodud retsepti ei saa avada (vea tekitab vigane ühiku kuvamine retseptis, töötab ilma ühiku kuvamiseta), lohiseva koodi tõttu on raske kindlaks teha, mida üldse üritatakse võrdsustada Textblcokiga txtblck2, mis antud juhul ka retsepti avamist takistab (ära tuleb kaotada +1 variablist findyhik).&lt;br /&gt;
* Retsepte ei saa muuta, peab uuesti looma.&lt;br /&gt;
* Välja logides jätab nii kasutajanime kui ka paroolivälja täidetuks&lt;br /&gt;
* Kakskeelsus ja segased nimetused koodis (eesti ja inglise keel) &lt;br /&gt;
&lt;br /&gt;
===Soovitused===&lt;br /&gt;
* Kas koostisosade puhul on vajalik, et kasutaja ise lisab teksti? Kui tabelisse lisataks unikaalsed väärtused, oleks efektiivsem anda rippmenüüst kasutajatele ette valik, mida lisada&lt;br /&gt;
* Sisse logituna võiks ära kaotada nupu nagu “registreeri uus kasutaja”&lt;br /&gt;
* Loetavuse mõttes kasutada paremini namespace&#039;i näiteks Service klassides (using FoodBytes.BusinessObjects)&lt;br /&gt;
* Disain on selge, kuid võiks olla viimistletum. Disainielemente on väga vähe, mis informatsiooni paremini esile tooksid.&lt;br /&gt;
&lt;br /&gt;
===Kokkuvõte===&lt;br /&gt;
&lt;br /&gt;
Kuigi põhifunksionaalsused on saavutatud, projekt on struktureeritud MVVM arhitektuuriga, andmebaas on selgete omadustega ja programmi üldpildist on kerge aru saada, jääb projekt natukene lahjaks. Programmi seadistamiseks on vaja luua kohalik andmebaas etteantud scriptiga ning enamus funktsionaalsusi pole üldse võimalik kasutada, sest hetkeseisuga ei õnnestu programmil edukalt uut kasutajat andmebaasi lisada. Seda tuleb teha käsitsi. Samuti üks suurimaid programmi omadusi peaks olema see, et kasutajad saavad lihtsa vaevaga vaadata kasutajate loodud retsepte. Hetkel saab neid vaadata ainult siis, kui retsepti nimi on meeles ja seda Otsinguribalt otsida. Retsepte pole võimalik avada, kui just ei kommenteeri välja ühikute kuvamist või ei paranda koodis viga. &lt;br /&gt;
&lt;br /&gt;
Vaatamata projekti struktuurist ja paljudest meetoditest, tekib segadust ViewModeli ja View külje peal. Meetodid on lohisevad ning liiga palju koodi pesitseb just WPF poole peal, mitte ViewModel poole peal. &lt;br /&gt;
&lt;br /&gt;
Programmil on palju potentsiaali, kuna idee on hea ja retsepti lisamine andmebaasi töötab. Samuti on ka projekti struktuur paigas, mis vajab korrigeerimist View ja ViewModeli poole pealt. Korda tuleks teha ka vead, mis takistavad programmil töötamast nagu uue kasutaja lisamine ning retsepti avamine (ühiku kuvamine).&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117565</id>
		<title>Talk:FoodBytes</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117565"/>
		<updated>2017-02-01T19:26:25Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Retsensioon meeskond FoodBytes projektile=&lt;br /&gt;
Koostanud:[[Meeskond: Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post)]]&lt;br /&gt;
&lt;br /&gt;
==Analüüsi retsensioon==&lt;br /&gt;
&lt;br /&gt;
FoodBytes rakenduse idee on hästi selgitatud ning retseptiraamatu funktsionaalsus on piisavalt arusaadav välisele lugejale. Positiivne on ka see, et andmebaasi struktuuri peale on mõeldud, mille põhjal saab juba rakendada funktsionaalsusi, mis on projekti “Must have” nimekirjas. Erinevate tabelite seosed on läbimõeldud ning võimaldab siduda retsepte kategooriate ja koostisosadega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Küll aga on tabelite nimetused natuke segased. Loogiline tunduks tabel, mis jätaks välja sõna “toiduaine”, kuna koostisosa ning toiduaine on üks ja sama asi. Pakuks allolevat struktuuri Retseptide, Toiduaine ning Koostise tabelite asemele, mille puhul on RetseptiKoostisosad vaid siduva tabeli rollis ja ei ole vaja juurde tuua uut terminit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Retseptid (RetseptID, retseptinimi, kirjeldus, juhend, kuupäev, kasutaja_id, kategooria_id, (pilt_id))&lt;br /&gt;
* Koostisosad (KoostisosaID, koostisosa)&lt;br /&gt;
* RetseptiKoostisosad (RetseptID, KoostisosaID, kogus, yhik_id)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rakenduse ägedamaks muutmiseks võiks olla võimalus ka retsepti lisamise juures lisada tehtud toidu pilt nagu netiblogides või kokaraamatutes. Inimesed söövad ju eelkõige silmadega. Võiks lisada selle võimaluse “nice to have” funktsionaalsuse juurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tekkis mõttekoht seoses kasutajate lisamise ja kontode loomisega. Kuna rakendus on mõeldud koduseks kasutamiseks arvutis, siis näib paroolide loomine kontodele liialdusena. Piisaks ju lihtsalt kui rakenduse kasutaja saab valida või muuta, kes ta täpsemalt on. Samuti kui vaadata ainult “must have” funktsionaalsust, siis ei läheks kasutajate registreerimist ja paroolide haldust jne vaja. Piisab lihtsalt kui retseptiautoriks märkida kellegi nimi.&lt;br /&gt;
&lt;br /&gt;
Teine idee oleks eraldada toitumispäeviku/ajaloo jälgimine retseptide küljest ja vast siduda see otseselt kasutajaga. Ehk siis andmebaasis “tehtud” tabel paikneks kasutaja küljes ja seal oleks lisaks ka kasutajaId, mis võimaldaks üpriski kiiresti otsida hiljem, et mis retsepte kasutaja on teinud ja nii toitumispäevikut kuvada.&lt;br /&gt;
&lt;br /&gt;
==Lõpp-produkti retsensioon==&lt;br /&gt;
Koostanud:[[Meeskond: Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post)]]&lt;br /&gt;
&lt;br /&gt;
Retsensiooni üldmulje on see, et paljude plaanitud funktsionaalsustega ei jõudnud meeskond valmis, kuna analüüsi põhjal tundus, et plaanid olid palju suuremad. Rakendus on lihtne ja väikese korrigeerimise järjel saab seda ka edukalt kasutada retseptide loomiseks, vaatamiseks ja kustutamiseks (mõningate ebamugavustega). Kahju, et funktsionaalsusi, mida me lootsime näha ei ole tehtud (piltide lisamine ja paroolide ära jätmine), kuid eks need olid ka soovituslikud ettepanekud. &lt;br /&gt;
&lt;br /&gt;
Toome allpool välja mõned põhilised punktid, mida tähele panime.&lt;br /&gt;
&lt;br /&gt;
===Plussid===&lt;br /&gt;
&lt;br /&gt;
* Kood kompileerub.&lt;br /&gt;
* Lihtne disain, less is more&lt;br /&gt;
* Error check on implementeeritud, retsepte saab avada iga inimene, kuid neid võib kustutada vaid originaalne looja. Ilma sisse logimata ei saa retsepte lisada.&lt;br /&gt;
* Kasutatud on MVVM arhitektuuri, kus on eraldatud objektid, päringud, äriloogika ja esitlus (viimase kahe sisu on veidikene segamini).&lt;br /&gt;
* Retseptide lisamine ja kustutamine toimib.&lt;br /&gt;
* Andmebaas tundub mõistliku struktuuriga (antud funktsionaalsuste juures).&lt;br /&gt;
&lt;br /&gt;
===Miinused===&lt;br /&gt;
* Ei saa lisada uut kasutajat (üritab NULL väärtust salvestada kasutaja tabelis).&lt;br /&gt;
* Ei saa vaadata looduid retsepte ilma otsimata&lt;br /&gt;
* Saab otsida vaid nime järgi (mitte kategooria järgi nagu eesmärkides)&lt;br /&gt;
* Retsepti lisamisel lisatakse “yhik”, “kategooria” tabelitesse uued väljad ka mitteunikaalsete väärtuste puhul, mis ei anna eraldi tabelitele eraldi otstarbekust&lt;br /&gt;
* Loodud retsepti ei saa avada (vea tekitab vigane ühiku kuvamine retseptis, töötab ilma ühiku kuvamiseta), lohiseva koodi tõttu on raske kindlaks teha, mida üldse üritatakse võrdsustada Textblcokiga txtblck2, mis antud juhul ka retsepti avamist takistab (ära tuleb kaotada +1 variablist findyhik).&lt;br /&gt;
* Retsepte ei saa muuta, peab uuesti looma.&lt;br /&gt;
* Välja logides jätab nii kasutajanime kui ka paroolivälja täidetuks &lt;br /&gt;
&lt;br /&gt;
===Soovitused===&lt;br /&gt;
* Kas koostisosade puhul on vajalik, et kasutaja ise lisab teksti? Kui tabelisse lisataks unikaalsed väärtused, oleks efektiivsem anda rippmenüüst kasutajatele ette valik, mida lisada&lt;br /&gt;
* Sisse logituna võiks ära kaotada nupu nagu “registreeri uus kasutaja”&lt;br /&gt;
* Loetavuse mõttes kasutada paremini namespace&#039;i näiteks Service klassides (using FoodBytes.BusinessObjects)&lt;br /&gt;
* Disain on selge, kuid võiks olla viimistletum. Disainielemente on väga vähe, mis informatsiooni paremini esile tooksid.&lt;br /&gt;
&lt;br /&gt;
===Kokkuvõte===&lt;br /&gt;
&lt;br /&gt;
Kuigi põhifunksionaalsused on saavutatud, projekt on struktureeritud MVVM arhitektuuriga, andmebaas on selgete omadustega ja programmi üldpildist on kerge aru saada, jääb projekt natukene lahjaks. Programmi seadistamiseks on vaja luua kohalik andmebaas etteantud scriptiga ning enamus funktsionaalsusi pole üldse võimalik kasutada, sest hetkeseisuga ei õnnestu programmil edukalt uut kasutajat andmebaasi lisada. Seda tuleb teha käsitsi. Samuti üks suurimaid programmi omadusi peaks olema see, et kasutajad saavad lihtsa vaevaga vaadata kasutajate loodud retsepte. Hetkel saab neid vaadata ainult siis, kui retsepti nimi on meeles ja seda Otsinguribalt otsida. Retsepte pole võimalik avada, kui just ei kommenteeri välja ühikute kuvamist. &lt;br /&gt;
&lt;br /&gt;
Vaatamata projekti struktuurist ja paljudest meetoditest, tekib segadust ViewModeli ja View külje peal. Meetodid on lohisevad ning liiga palju koodi pesitseb just WPF poole peal, mitte ViewModel poole peal. &lt;br /&gt;
&lt;br /&gt;
Programmil on palju potentsiaali, kuna idee on hea ja retsepti lisamine andmebaasi töötab. Samuti on ka projekti struktuur paigas, mis vajab korrigeerimist View ja ViewModeli poole pealt. Korda tuleks teha ka vead, mis takistavad programmil töötamast nagu uue kasutaja lisamine ning retsepti avamine (ühiku kuvamine).&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117407</id>
		<title>Talk:FoodBytes</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117407"/>
		<updated>2017-01-30T22:20:20Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Retsensioon: &lt;br /&gt;
&lt;br /&gt;
Meeskond Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post).&lt;br /&gt;
&lt;br /&gt;
FoodBytes rakenduse idee on hästi selgitatud ning retseptiraamatu funktsionaalsus on piisavalt arusaadav välisele lugejale. Positiivne on ka see, et andmebaasi struktuuri peale on mõeldud, mille põhjal saab juba rakendada funktsionaalsusi, mis on projekti “Must have” nimekirjas. Erinevate tabelite seosed on läbimõeldud ning võimaldab siduda retsepte kategooriate ja koostisosadega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Küll aga on tabelite nimetused natuke segased. Loogiline tunduks tabel, mis jätaks välja sõna “toiduaine”, kuna koostisosa ning toiduaine on üks ja sama asi. Pakuks allolevat struktuuri Retseptide, Toiduaine ning Koostise tabelite asemele, mille puhul on RetseptiKoostisosad vaid siduva tabeli rollis ja ei ole vaja juurde tuua uut terminit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Retseptid (RetseptID, retseptinimi, kirjeldus, juhend, kuupäev, kasutaja_id, kategooria_id, (pilt_id))&lt;br /&gt;
* Koostisosad (KoostisosaID, koostisosa)&lt;br /&gt;
* RetseptiKoostisosad (RetseptID, KoostisosaID, kogus, yhik_id)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rakenduse ägedamaks muutmiseks võiks olla võimalus ka retsepti lisamise juures lisada tehtud toidu pilt nagu netiblogides või kokaraamatutes. Inimesed söövad ju eelkõige silmadega. Võiks lisada selle võimaluse “nice to have” funktsionaalsuse juurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tekkis mõttekoht seoses kasutajate lisamise ja kontode loomisega. Kuna rakendus on mõeldud koduseks kasutamiseks arvutis, siis näib paroolide loomine kontodele liialdusena. Piisaks ju lihtsalt kui rakenduse kasutaja saab valida või muuta, kes ta täpsemalt on. Samuti kui vaadata ainult “must have” funktsionaalsust, siis ei läheks kasutajate registreerimist ja paroolide haldust jne vaja. Piisab lihtsalt kui retseptiautoriks märkida kellegi nimi.&lt;br /&gt;
&lt;br /&gt;
Teine idee oleks eraldada toitumispäeviku/ajaloo jälgimine retseptide küljest ja vast siduda see otseselt kasutajaga. Ehk siis andmebaasis “tehtud” tabel paikneks kasutaja küljes ja seal oleks lisaks ka kasutajaId, mis võimaldaks üpriski kiiresti otsida hiljem, et mis retsepte kasutaja on teinud ja nii toitumispäevikut kuvada.&lt;br /&gt;
&lt;br /&gt;
Lõpptoote retsensioon: Work In Progress&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117406</id>
		<title>Talk:FoodBytes</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=117406"/>
		<updated>2017-01-30T22:20:03Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Retsensioon: &lt;br /&gt;
&lt;br /&gt;
Meeskond Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post).&lt;br /&gt;
&lt;br /&gt;
FoodBytes rakenduse idee on hästi selgitatud ning retseptiraamatu funktsionaalsus on piisavalt arusaadav välisele lugejale. Positiivne on ka see, et andmebaasi struktuuri peale on mõeldud, mille põhjal saab juba rakendada funktsionaalsusi, mis on projekti “Must have” nimekirjas. Erinevate tabelite seosed on läbimõeldud ning võimaldab siduda retsepte kategooriate ja koostisosadega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Küll aga on tabelite nimetused natuke segased. Loogiline tunduks tabel, mis jätaks välja sõna “toiduaine”, kuna koostisosa ning toiduaine on üks ja sama asi. Pakuks allolevat struktuuri Retseptide, Toiduaine ning Koostise tabelite asemele, mille puhul on RetseptiKoostisosad vaid siduva tabeli rollis ja ei ole vaja juurde tuua uut terminit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Retseptid (RetseptID, retseptinimi, kirjeldus, juhend, kuupäev, kasutaja_id, kategooria_id, (pilt_id))&lt;br /&gt;
* Koostisosad (KoostisosaID, koostisosa)&lt;br /&gt;
* RetseptiKoostisosad (RetseptID, KoostisosaID, kogus, yhik_id)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rakenduse ägedamaks muutmiseks võiks olla võimalus ka retsepti lisamise juures lisada tehtud toidu pilt nagu netiblogides või kokaraamatutes. Inimesed söövad ju eelkõige silmadega. Võiks lisada selle võimaluse “nice to have” funktsionaalsuse juurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tekkis mõttekoht seoses kasutajate lisamise ja kontode loomisega. Kuna rakendus on mõeldud koduseks kasutamiseks arvutis, siis näib paroolide loomine kontodele liialdusena. Piisaks ju lihtsalt kui rakenduse kasutaja saab valida või muuta, kes ta täpsemalt on. Samuti kui vaadata ainult “must have” funktsionaalsust, siis ei läheks kasutajate registreerimist ja paroolide haldust jne vaja. Piisab lihtsalt kui retseptiautoriks märkida kellegi nimi.&lt;br /&gt;
&lt;br /&gt;
Lõpptoote retsensioon: Work In Progress&lt;br /&gt;
&lt;br /&gt;
Teine idee oleks eraldada toitumispäeviku/ajaloo jälgimine retseptide küljest ja vast siduda see otseselt kasutajaga. Ehk siis andmebaasis “tehtud” tabel paikneks kasutaja küljes ja seal oleks lisaks ka kasutajaId, mis võimaldaks üpriski kiiresti otsida hiljem, et mis retsepte kasutaja on teinud ja nii toitumispäevikut kuvada.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=117082</id>
		<title>Elekter</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=117082"/>
		<updated>2017-01-24T23:04:11Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine_CSharp_keeles_(2016)]]&lt;br /&gt;
== Meeskond ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Kristo Oidermaa - projektijuht&lt;br /&gt;
* Tiit Post&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&lt;br /&gt;
Korteriühistule või haldusfirmale sobiv programm, mis võimaldab mugavalt hallata kortermajadele laekuvaid arveid, neid jaotada korterite vahel ning kontrollida võlglaste staatust.&lt;br /&gt;
&lt;br /&gt;
[[File:Elekter_logo_3.png]]&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
C#, Windows Presentation Foundation, andmebaasid.&lt;br /&gt;
&lt;br /&gt;
== Analüüs ==&lt;br /&gt;
&#039;&#039;&#039;Rakenduse üldkirjeldus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Tiimi Elekter rakendus on mõeldud korteriühistule või haldusfirmale, et mugavalt hallata ja koostada arveid. Rakendus hõlmab nii laekuvate arvete (haldustasu, koristus, üldelekter, küte, remondifond, prügivedu, kindlustus) süsteemis registreerimist kui ka ühistuliikmetele arvete väljastamist iga kuu kaupa. Samuti peab rakendus ja andmebaas sisaldama kõike muud vajalikku infot, mis kajastuvad tavapärasel korteriühistu poolt saadetaval arvel. &lt;br /&gt;
&lt;br /&gt;
Kasutust leiaks antud rakendus pigem väiksemate haldusfirmade või ühistute endi käes. Suurematel haldusfirmadel on endal sarnased programmid olemas (näiteks Kvatro oma). Tegemist ei oleks ühistule/haldusfirmale sobiva raamatupidamistarkvaraga vaid pigem lisarakendusega, mis on mõeldud eelkõige haldurile ning tulevikus võiks antud rakendus olla otse seotud ka raamatupidamissüsteemiga. Arvatavasti väiksemate haldusfirmade või ühistute puhul käib jagamine paljuski excelis või niipalju kui raamatupidamistarkvara lubab teha.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Täpsem sisu:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Rakendus sisaldab endas kortermajade/ühistuste lisamist, sellega seoses ka kõigi korterite, vastutavate isikute ja nende kontaktide lisamist. Ennekõike on tähtis kätte saada vajalik algandmestik hilisemateks arvutusteks ning kokku leppida, kuidas hakkab toimuma erinevate kululiikide jagamine korterite vahel (ruutmeertri põhiselt, korteri põhiselt või fikseeritud summa).&lt;br /&gt;
&lt;br /&gt;
Teine osa rakendusest on laekunud kommunaalarvete lisamine (elekter, prügi jne). Osad arved laekuvad iga korteri kohta, osad arved on kogu ühistu kanda ja jaotada korterite vahel. Rakendus keskendub just nendele arvetele, mis laekuvad otse ühistule ning mida on vaja ühistuliikmete vahel jaotada. Lisaks tuleb arvetust pidada muude lisakulude üle nagu remondifondid, parkimiskohtade kulud/süsteem jne.&lt;br /&gt;
&lt;br /&gt;
Kolmas osa on arvete koostamise süsteem, mis kõigepealt kontrollib kas kõik soovitava kuu kommunaalarved on laekunud ühistule ning jaotab vastavalt kokkulepitud valemitele need korterite vahel ära. Soov oleks antud arved koostada eraldi dokumendina  ja tuleviku võimalusena saata otse ka vastutavale isikule näiteks e-maili peale.&lt;br /&gt;
&lt;br /&gt;
Neljas osa süsteemist oleks võlglaste/ettemaksete haldus. Süsteem võimaldaks ka arvet pidada iga korteri kohta välja läinud arvete ja laekunud maksete üle ning edasiarendusena võiks arvestada ka viiviseid. Nii saaks iga uue väljastatava arve puhul kohe kajastada ka korteri varasemat võlgnevust või ettemakset. Samuti võiks toimuda automaatsed teavitused või märguanded kui mõne korteri võlgnevus on liiga suureks läinud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eesmärk ja võimalikud tulevikusuunad:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eesmärk on muuta erinevate arvete haldamine ühistutele lihtsamaks rakenduse keskkonna kaudu. Kui ühistu andmed on juba sisestatud kasutaja poolt, on ainuke töö sisestada info erinevate arvete kohta. Tulevikufunktsioonidena võivad lisanduda ka analüüsi pool ja täpsemad otsingufunktsioonid. Näiteks korteritemüügi puhul saab potentsiaalsetele ostjatele näidata täpsemat kommunaalarvete ajalugu iga kuu kaupa.&lt;br /&gt;
&lt;br /&gt;
Samuti võib tulevikus tekkinud andmebaas olla kasulik haldusfirmadele renoveerimiste planeerimisel – näiteks küttearved ruutmeetri kohta renoveerimata ja renoveeritud majas, mis oleks oluline sisend remontide planeerimise protsessis. &lt;br /&gt;
&lt;br /&gt;
Edasiseks arenduseks oleks ühe võimalusena ka korteriomanikule sobiva rakenduse loomine, kus korteriomanik ise saab enda korteriga seotud infot turvaliselt vaadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Milliste osade realiseerimine võib osutuda problemaatiliseks?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Üks tähtsamaid tegevusi on kohe alguses andmebaasid sobivalt valmis disainida juba ette mõelda, et milliseid andmeid on täpselt vaja, et lõppprodukt väljastatava arve põhjal saaks valmis. Üks pool hõlmab kindlasti erinevate korterite/majade sidumist erinevate arvetega, et päringud oleks võimalikud lihtsad ning kiired. &lt;br /&gt;
&lt;br /&gt;
Teine keerulisem pool on vast valmisolek erijuhtudeks. Esineb kortermajasid, kus parkimist kasutavad ainult osa korterid või katusekorruse korteritel on eraldi küttelahendused. Seega võivad kajastuda sama maja erinevate korterite ühistuarvetel ka erinevad kululiigid.&lt;br /&gt;
&lt;br /&gt;
Samuti võib keeruliseks osutuda viiviste ja ettemaksete arvestus. Siinkohal tuleks täpselt välja mõelda, mis ajahetkel hakkab viivise arvestus peale ning mis hetkedel uued arved väljastatakse. Just ajalise mõõte planeerimine on tähtis, et ei tekiks probleeme, kui mõni arve laekub hiljem või varem eeldatavast plaanis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde jaotus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sigrid – user interface ja disain WPFs, väljundi disain ja kood, blogi eest hoolitsemine&lt;br /&gt;
&lt;br /&gt;
Kristo – projektijuht ja järelevalve, teeb kõike natukene &lt;br /&gt;
&lt;br /&gt;
Tiit – kirjutab koodi ja loob andmebaase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Must have: ===&lt;br /&gt;
*	Kortermajade lisamine andmebaasi (vajalik info:maja id, tänava nimi ja maja nr, korterite arv, ruutmeetreid kokku, ühistuinfo ja rekvisiidid)&lt;br /&gt;
*	Korterite lisamine kortermajadele (vajalik info: kortermaja id, korteri nr, suurus ruutmeetrites, omaniku nimi, omaniku kontakid)&lt;br /&gt;
*	Lihtsamad otsingufuntksioonid – näiteks korteriomaniku kontakti leidmiseks&lt;br /&gt;
*	Majade/korterit info muutmine/kustutamine (näiteks uue omaniku kirjapanek)&lt;br /&gt;
*	Laekunud arvete lisamine andmebaasi (vajalik info kortermaja id, arve liik, mis perioodi arve, summa)&lt;br /&gt;
*	Võimalus vaadata, kas kortermaja kohta on kõik arved laekunud enne korterile arve koostamist&lt;br /&gt;
*	Korteritele arvete koostamine koos arvutustega iga kuu kohta ning rakenduses kuvamine&lt;br /&gt;
*	Uute arvete salvestamine (doc/pdf)&lt;br /&gt;
*	Korterite võlgnevuste/ettemaksete üle arvepidamine, koos korteritelt laekunud maksete registreerimisega. Viiviste arvutus ja arvele lisamine.&lt;br /&gt;
*	Lisakululiikide haldus, mille kohta ei laeku arveid või mis ei käi kõigi korterite kohta.&lt;br /&gt;
&lt;br /&gt;
=== Nice to have: ===&lt;br /&gt;
*	Koostatud arvete saatmise võimalus omaniku e-mailile&lt;br /&gt;
*	Võlglastele automaatsete teadete saatmine&lt;br /&gt;
*	Automaatsed meeldetuletused (et mingi arve koostada, kontrollida laekumist.&lt;br /&gt;
*	Erinevad raportid/koondväljavõtted (korterite, majade ja kululiikide kohta)&lt;br /&gt;
*	Veearvete koostamise süsteem, kus iga korter raporteerib näidud ja seeläbi jaotatakse ka veekulud. Hõlmaks ka tasandamist juhtudele kui näite ei raporteerita ja seega automaatseid prognoose.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasimudelid ==&lt;br /&gt;
&lt;br /&gt;
[[File:Elekter Andmebaasi mudel.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Prototüüp ==&lt;br /&gt;
&lt;br /&gt;
Prototüüp asub siin: [https://drive.google.com/open?id=0B13XA4AyIfQNc05vSi1UNTRsbkU prototüüp]&lt;br /&gt;
&lt;br /&gt;
== Workload ==&lt;br /&gt;
&lt;br /&gt;
=== 09.10.2016 ===&lt;br /&gt;
* Tiimi moodustamine ja esimene kogunemine&lt;br /&gt;
* Teema valik ja esimeste tegevussuundade paika panemine&lt;br /&gt;
&lt;br /&gt;
=== 11.10.2016 ===&lt;br /&gt;
* Loodi wiki leht&lt;br /&gt;
&lt;br /&gt;
=== 16.10.2016 ===&lt;br /&gt;
* Loodi ajaveeb: [https://i243elekter.wordpress.com/ https://i243elekter.wordpress.com/]&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti analüüsi osa lõpetamine&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti logo ning programmi loogika: [https://drive.google.com/file/d/0B6rC6xduz_u4YUNzUFN1N3hpQjQ/view?usp=sharing Draw.io&#039;s koostatud skeem]&lt;br /&gt;
&lt;br /&gt;
=== 07.11.2016 ===&lt;br /&gt;
* FoodBytes retsensioon: [[Talk:FoodBytes]]&lt;br /&gt;
&lt;br /&gt;
=== 07.11.2016 ===&lt;br /&gt;
* Lisatud andmebaasiskeem&lt;br /&gt;
&lt;br /&gt;
=== 18.12.2016 ===&lt;br /&gt;
* Saime valmis prototüübi täpselt tähtajaks: [https://drive.google.com/open?id=0B13XA4AyIfQNc05vSi1UNTRsbkU prototüüp]&lt;br /&gt;
&lt;br /&gt;
=== 22.01.2017 ===&lt;br /&gt;
* Viimased uuendused projektis ja valmistatud dokumentatsioon kasutusjuhendiga: [https://drive.google.com/open?id=0B6rC6xduz_u4RXN2ZDNVVTRLeUU lõpp-produkt]&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=117081</id>
		<title>Elekter</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=117081"/>
		<updated>2017-01-24T23:02:55Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Workload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine_CSharp_keeles_(2016)]]&lt;br /&gt;
== Meeskond ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Kristo Oidermaa - projektijuht&lt;br /&gt;
* Tiit Post&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&lt;br /&gt;
Korteriühistule või haldusfirmale sobiv programm, mis võimaldab mugavalt hallata kortermajadele laekuvaid arveid, neid jaotada korterite vahel ning kontrollida võlglaste staatust.&lt;br /&gt;
&lt;br /&gt;
[[File:Elekter_logo_3.png]]&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
C#, Windows Presentation Foundation, andmebaasid.&lt;br /&gt;
&lt;br /&gt;
== Analüüs ==&lt;br /&gt;
&#039;&#039;&#039;Rakenduse üldkirjeldus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Tiimi Elekter rakendus on mõeldud korteriühistule või haldusfirmale, et mugavalt hallata ja koostada arveid. Rakendus hõlmab nii laekuvate arvete (haldustasu, koristus, üldelekter, küte, remondifond, prügivedu, kindlustus) süsteemis registreerimist kui ka ühistuliikmetele arvete väljastamist iga kuu kaupa. Samuti peab rakendus ja andmebaas sisaldama kõike muud vajalikku infot, mis kajastuvad tavapärasel korteriühistu poolt saadetaval arvel. &lt;br /&gt;
&lt;br /&gt;
Kasutust leiaks antud rakendus pigem väiksemate haldusfirmade või ühistute endi käes. Suurematel haldusfirmadel on endal sarnased programmid olemas (näiteks Kvatro oma). Tegemist ei oleks ühistule/haldusfirmale sobiva raamatupidamistarkvaraga vaid pigem lisarakendusega, mis on mõeldud eelkõige haldurile ning tulevikus võiks antud rakendus olla otse seotud ka raamatupidamissüsteemiga. Arvatavasti väiksemate haldusfirmade või ühistute puhul käib jagamine paljuski excelis või niipalju kui raamatupidamistarkvara lubab teha.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Täpsem sisu:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Rakendus sisaldab endas kortermajade/ühistuste lisamist, sellega seoses ka kõigi korterite, vastutavate isikute ja nende kontaktide lisamist. Ennekõike on tähtis kätte saada vajalik algandmestik hilisemateks arvutusteks ning kokku leppida, kuidas hakkab toimuma erinevate kululiikide jagamine korterite vahel (ruutmeertri põhiselt, korteri põhiselt või fikseeritud summa).&lt;br /&gt;
&lt;br /&gt;
Teine osa rakendusest on laekunud kommunaalarvete lisamine (elekter, prügi jne). Osad arved laekuvad iga korteri kohta, osad arved on kogu ühistu kanda ja jaotada korterite vahel. Rakendus keskendub just nendele arvetele, mis laekuvad otse ühistule ning mida on vaja ühistuliikmete vahel jaotada. Lisaks tuleb arvetust pidada muude lisakulude üle nagu remondifondid, parkimiskohtade kulud/süsteem jne.&lt;br /&gt;
&lt;br /&gt;
Kolmas osa on arvete koostamise süsteem, mis kõigepealt kontrollib kas kõik soovitava kuu kommunaalarved on laekunud ühistule ning jaotab vastavalt kokkulepitud valemitele need korterite vahel ära. Soov oleks antud arved koostada eraldi dokumendina  ja tuleviku võimalusena saata otse ka vastutavale isikule näiteks e-maili peale.&lt;br /&gt;
&lt;br /&gt;
Neljas osa süsteemist oleks võlglaste/ettemaksete haldus. Süsteem võimaldaks ka arvet pidada iga korteri kohta välja läinud arvete ja laekunud maksete üle ning edasiarendusena võiks arvestada ka viiviseid. Nii saaks iga uue väljastatava arve puhul kohe kajastada ka korteri varasemat võlgnevust või ettemakset. Samuti võiks toimuda automaatsed teavitused või märguanded kui mõne korteri võlgnevus on liiga suureks läinud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eesmärk ja võimalikud tulevikusuunad:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eesmärk on muuta erinevate arvete haldamine ühistutele lihtsamaks rakenduse keskkonna kaudu. Kui ühistu andmed on juba sisestatud kasutaja poolt, on ainuke töö sisestada info erinevate arvete kohta. Tulevikufunktsioonidena võivad lisanduda ka analüüsi pool ja täpsemad otsingufunktsioonid. Näiteks korteritemüügi puhul saab potentsiaalsetele ostjatele näidata täpsemat kommunaalarvete ajalugu iga kuu kaupa.&lt;br /&gt;
&lt;br /&gt;
Samuti võib tulevikus tekkinud andmebaas olla kasulik haldusfirmadele renoveerimiste planeerimisel – näiteks küttearved ruutmeetri kohta renoveerimata ja renoveeritud majas, mis oleks oluline sisend remontide planeerimise protsessis. &lt;br /&gt;
&lt;br /&gt;
Edasiseks arenduseks oleks ühe võimalusena ka korteriomanikule sobiva rakenduse loomine, kus korteriomanik ise saab enda korteriga seotud infot turvaliselt vaadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Milliste osade realiseerimine võib osutuda problemaatiliseks?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Üks tähtsamaid tegevusi on kohe alguses andmebaasid sobivalt valmis disainida juba ette mõelda, et milliseid andmeid on täpselt vaja, et lõppprodukt väljastatava arve põhjal saaks valmis. Üks pool hõlmab kindlasti erinevate korterite/majade sidumist erinevate arvetega, et päringud oleks võimalikud lihtsad ning kiired. &lt;br /&gt;
&lt;br /&gt;
Teine keerulisem pool on vast valmisolek erijuhtudeks. Esineb kortermajasid, kus parkimist kasutavad ainult osa korterid või katusekorruse korteritel on eraldi küttelahendused. Seega võivad kajastuda sama maja erinevate korterite ühistuarvetel ka erinevad kululiigid.&lt;br /&gt;
&lt;br /&gt;
Samuti võib keeruliseks osutuda viiviste ja ettemaksete arvestus. Siinkohal tuleks täpselt välja mõelda, mis ajahetkel hakkab viivise arvestus peale ning mis hetkedel uued arved väljastatakse. Just ajalise mõõte planeerimine on tähtis, et ei tekiks probleeme, kui mõni arve laekub hiljem või varem eeldatavast plaanis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde jaotus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sigrid – user interface ja disain WPFs, väljundi disain ja kood, blogi eest hoolitsemine&lt;br /&gt;
&lt;br /&gt;
Kristo – projektijuht ja järelevalve, teeb kõike natukene &lt;br /&gt;
&lt;br /&gt;
Tiit – kirjutab koodi ja loob andmebaase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Must have: ===&lt;br /&gt;
*	Kortermajade lisamine andmebaasi (vajalik info:maja id, tänava nimi ja maja nr, korterite arv, ruutmeetreid kokku, ühistuinfo ja rekvisiidid)&lt;br /&gt;
*	Korterite lisamine kortermajadele (vajalik info: kortermaja id, korteri nr, suurus ruutmeetrites, omaniku nimi, omaniku kontakid)&lt;br /&gt;
*	Lihtsamad otsingufuntksioonid – näiteks korteriomaniku kontakti leidmiseks&lt;br /&gt;
*	Majade/korterit info muutmine/kustutamine (näiteks uue omaniku kirjapanek)&lt;br /&gt;
*	Laekunud arvete lisamine andmebaasi (vajalik info kortermaja id, arve liik, mis perioodi arve, summa)&lt;br /&gt;
*	Võimalus vaadata, kas kortermaja kohta on kõik arved laekunud enne korterile arve koostamist&lt;br /&gt;
*	Korteritele arvete koostamine koos arvutustega iga kuu kohta ning rakenduses kuvamine&lt;br /&gt;
*	Uute arvete salvestamine (doc/pdf)&lt;br /&gt;
*	Korterite võlgnevuste/ettemaksete üle arvepidamine, koos korteritelt laekunud maksete registreerimisega. Viiviste arvutus ja arvele lisamine.&lt;br /&gt;
*	Lisakululiikide haldus, mille kohta ei laeku arveid või mis ei käi kõigi korterite kohta.&lt;br /&gt;
&lt;br /&gt;
=== Nice to have: ===&lt;br /&gt;
*	Koostatud arvete saatmise võimalus omaniku e-mailile&lt;br /&gt;
*	Võlglastele automaatsete teadete saatmine&lt;br /&gt;
*	Automaatsed meeldetuletused (et mingi arve koostada, kontrollida laekumist.&lt;br /&gt;
*	Erinevad raportid/koondväljavõtted (korterite, majade ja kululiikide kohta)&lt;br /&gt;
*	Veearvete koostamise süsteem, kus iga korter raporteerib näidud ja seeläbi jaotatakse ka veekulud. Hõlmaks ka tasandamist juhtudele kui näite ei raporteerita ja seega automaatseid prognoose.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasimudelid ==&lt;br /&gt;
&lt;br /&gt;
[[File:Elekter Andmebaasi mudel.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Prototüüp ==&lt;br /&gt;
&lt;br /&gt;
Prototüüp asub siin: [https://drive.google.com/open?id=0B13XA4AyIfQNc05vSi1UNTRsbkU prototüüp]&lt;br /&gt;
&lt;br /&gt;
== Workload ==&lt;br /&gt;
&lt;br /&gt;
=== 09.10.2016 ===&lt;br /&gt;
* Tiimi moodustamine ja esimene kogunemine&lt;br /&gt;
* Teema valik ja esimeste tegevussuundade paika panemine&lt;br /&gt;
&lt;br /&gt;
=== 11.10.2016 ===&lt;br /&gt;
* Loodi wiki leht&lt;br /&gt;
&lt;br /&gt;
=== 16.10.2016 ===&lt;br /&gt;
* Loodi ajaveeb: [https://i243elekter.wordpress.com/ https://i243elekter.wordpress.com/]&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti analüüsi osa lõpetamine&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti logo ning programmi loogika: [https://drive.google.com/file/d/0B6rC6xduz_u4YUNzUFN1N3hpQjQ/view?usp=sharing Draw.io&#039;s koostatud skeem]&lt;br /&gt;
&lt;br /&gt;
=== 07.11.2016 ===&lt;br /&gt;
* FoodBytes retsensioon: [[Talk:FoodBytes]]&lt;br /&gt;
&lt;br /&gt;
=== 07.11.2016 ===&lt;br /&gt;
* Lisatud andmebaasiskeem&lt;br /&gt;
&lt;br /&gt;
=== 18.12.2016 ===&lt;br /&gt;
* Saime valmis prototüübi täpselt tähtajaks: [https://drive.google.com/open?id=0B13XA4AyIfQNc05vSi1UNTRsbkU prototüüp]&lt;br /&gt;
&lt;br /&gt;
== 22.01.2017 ==&lt;br /&gt;
* Viimased uuendused projektis ja valmistatud dokumentatsioon kasutusjuhendiga: [https://drive.google.com/open?id=0B6rC6xduz_u4RXN2ZDNVVTRLeUU lõpp-produkt]&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=114122</id>
		<title>Elekter</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=114122"/>
		<updated>2016-11-07T18:37:48Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Workload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine_CSharp_keeles_(2016)]]&lt;br /&gt;
== Meeskond ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Kristo Oidermaa - projektijuht&lt;br /&gt;
* Tiit Post&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&lt;br /&gt;
Korteriühistule või haldusfirmale sobiv programm, mis võimaldab mugavalt hallata kortermajadele laekuvaid arveid, neid jaotada korterite vahel ning kontrollida võlglaste staatust.&lt;br /&gt;
&lt;br /&gt;
[[File:Elekter_logo_3.png]]&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
C#, Windows Presentation Foundation, andmebaasid.&lt;br /&gt;
&lt;br /&gt;
== Analüüs ==&lt;br /&gt;
&#039;&#039;&#039;Rakenduse üldkirjeldus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Tiimi Elekter rakendus on mõeldud korteriühistule või haldusfirmale, et mugavalt hallata ja koostada arveid. Rakendus hõlmab nii laekuvate arvete (haldustasu, koristus, üldelekter, küte, remondifond, prügivedu, kindlustus) süsteemis registreerimist kui ka ühistuliikmetele arvete väljastamist iga kuu kaupa. Samuti peab rakendus ja andmebaas sisaldama kõike muud vajalikku infot, mis kajastuvad tavapärasel korteriühistu poolt saadetaval arvel. &lt;br /&gt;
&lt;br /&gt;
Kasutust leiaks antud rakendus pigem väiksemate haldusfirmade või ühistute endi käes. Suurematel haldusfirmadel on endal sarnased programmid olemas (näiteks Kvatro oma). Tegemist ei oleks ühistule/haldusfirmale sobiva raamatupidamistarkvaraga vaid pigem lisarakendusega, mis on mõeldud eelkõige haldurile ning tulevikus võiks antud rakendus olla otse seotud ka raamatupidamissüsteemiga. Arvatavasti väiksemate haldusfirmade või ühistute puhul käib jagamine paljuski excelis või niipalju kui raamatupidamistarkvara lubab teha.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Täpsem sisu:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Rakendus sisaldab endas kortermajade/ühistuste lisamist, sellega seoses ka kõigi korterite, vastutavate isikute ja nende kontaktide lisamist. Ennekõike on tähtis kätte saada vajalik algandmestik hilisemateks arvutusteks ning kokku leppida, kuidas hakkab toimuma erinevate kululiikide jagamine korterite vahel (ruutmeertri põhiselt, korteri põhiselt või fikseeritud summa).&lt;br /&gt;
&lt;br /&gt;
Teine osa rakendusest on laekunud kommunaalarvete lisamine (elekter, prügi jne). Osad arved laekuvad iga korteri kohta, osad arved on kogu ühistu kanda ja jaotada korterite vahel. Rakendus keskendub just nendele arvetele, mis laekuvad otse ühistule ning mida on vaja ühistuliikmete vahel jaotada. Lisaks tuleb arvetust pidada muude lisakulude üle nagu remondifondid, parkimiskohtade kulud/süsteem jne.&lt;br /&gt;
&lt;br /&gt;
Kolmas osa on arvete koostamise süsteem, mis kõigepealt kontrollib kas kõik soovitava kuu kommunaalarved on laekunud ühistule ning jaotab vastavalt kokkulepitud valemitele need korterite vahel ära. Soov oleks antud arved koostada eraldi dokumendina  ja tuleviku võimalusena saata otse ka vastutavale isikule näiteks e-maili peale.&lt;br /&gt;
&lt;br /&gt;
Neljas osa süsteemist oleks võlglaste/ettemaksete haldus. Süsteem võimaldaks ka arvet pidada iga korteri kohta välja läinud arvete ja laekunud maksete üle ning edasiarendusena võiks arvestada ka viiviseid. Nii saaks iga uue väljastatava arve puhul kohe kajastada ka korteri varasemat võlgnevust või ettemakset. Samuti võiks toimuda automaatsed teavitused või märguanded kui mõne korteri võlgnevus on liiga suureks läinud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eesmärk ja võimalikud tulevikusuunad:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eesmärk on muuta erinevate arvete haldamine ühistutele lihtsamaks rakenduse keskkonna kaudu. Kui ühistu andmed on juba sisestatud kasutaja poolt, on ainuke töö sisestada info erinevate arvete kohta. Tulevikufunktsioonidena võivad lisanduda ka analüüsi pool ja täpsemad otsingufunktsioonid. Näiteks korteritemüügi puhul saab potentsiaalsetele ostjatele näidata täpsemat kommunaalarvete ajalugu iga kuu kaupa.&lt;br /&gt;
&lt;br /&gt;
Samuti võib tulevikus tekkinud andmebaas olla kasulik haldusfirmadele renoveerimiste planeerimisel – näiteks küttearved ruutmeetri kohta renoveerimata ja renoveeritud majas, mis oleks oluline sisend remontide planeerimise protsessis. &lt;br /&gt;
&lt;br /&gt;
Edasiseks arenduseks oleks ühe võimalusena ka korteriomanikule sobiva rakenduse loomine, kus korteriomanik ise saab enda korteriga seotud infot turvaliselt vaadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Milliste osade realiseerimine võib osutuda problemaatiliseks?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Üks tähtsamaid tegevusi on kohe alguses andmebaasid sobivalt valmis disainida juba ette mõelda, et milliseid andmeid on täpselt vaja, et lõppprodukt väljastatava arve põhjal saaks valmis. Üks pool hõlmab kindlasti erinevate korterite/majade sidumist erinevate arvetega, et päringud oleks võimalikud lihtsad ning kiired. &lt;br /&gt;
&lt;br /&gt;
Teine keerulisem pool on vast valmisolek erijuhtudeks. Esineb kortermajasid, kus parkimist kasutavad ainult osa korterid või katusekorruse korteritel on eraldi küttelahendused. Seega võivad kajastuda sama maja erinevate korterite ühistuarvetel ka erinevad kululiigid.&lt;br /&gt;
&lt;br /&gt;
Samuti võib keeruliseks osutuda viiviste ja ettemaksete arvestus. Siinkohal tuleks täpselt välja mõelda, mis ajahetkel hakkab viivise arvestus peale ning mis hetkedel uued arved väljastatakse. Just ajalise mõõte planeerimine on tähtis, et ei tekiks probleeme, kui mõni arve laekub hiljem või varem eeldatavast plaanis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde jaotus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sigrid – user interface ja disain WPFs, väljundi disain ja kood, blogi eest hoolitsemine&lt;br /&gt;
&lt;br /&gt;
Kristo – projektijuht ja järelevalve, teeb kõike natukene &lt;br /&gt;
&lt;br /&gt;
Tiit – kirjutab koodi ja loob andmebaase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Must have: ===&lt;br /&gt;
*	Kortermajade lisamine andmebaasi (vajalik info:maja id, tänava nimi ja maja nr, korterite arv, ruutmeetreid kokku, ühistuinfo ja rekvisiidid)&lt;br /&gt;
*	Korterite lisamine kortermajadele (vajalik info: kortermaja id, korteri nr, suurus ruutmeetrites, omaniku nimi, omaniku kontakid)&lt;br /&gt;
*	Lihtsamad otsingufuntksioonid – näiteks korteriomaniku kontakti leidmiseks&lt;br /&gt;
*	Majade/korterit info muutmine/kustutamine (näiteks uue omaniku kirjapanek)&lt;br /&gt;
*	Laekunud arvete lisamine andmebaasi (vajalik info kortermaja id, arve liik, mis perioodi arve, summa)&lt;br /&gt;
*	Võimalus vaadata, kas kortermaja kohta on kõik arved laekunud enne korterile arve koostamist&lt;br /&gt;
*	Korteritele arvete koostamine koos arvutustega iga kuu kohta ning rakenduses kuvamine&lt;br /&gt;
*	Uute arvete salvestamine (doc/pdf)&lt;br /&gt;
*	Korterite võlgnevuste/ettemaksete üle arvepidamine, koos korteritelt laekunud maksete registreerimisega. Viiviste arvutus ja arvele lisamine.&lt;br /&gt;
*	Lisakululiikide haldus, mille kohta ei laeku arveid või mis ei käi kõigi korterite kohta.&lt;br /&gt;
&lt;br /&gt;
=== Nice to have: ===&lt;br /&gt;
*	Koostatud arvete saatmise võimalus omaniku e-mailile&lt;br /&gt;
*	Võlglastele automaatsete teadete saatmine&lt;br /&gt;
*	Automaatsed meeldetuletused (et mingi arve koostada, kontrollida laekumist.&lt;br /&gt;
*	Erinevad raportid/koondväljavõtted (korterite, majade ja kululiikide kohta)&lt;br /&gt;
*	Veearvete koostamise süsteem, kus iga korter raporteerib näidud ja seeläbi jaotatakse ka veekulud. Hõlmaks ka tasandamist juhtudele kui näite ei raporteerita ja seega automaatseid prognoose.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasimudelid ==&lt;br /&gt;
&lt;br /&gt;
[[File:Elekter Andmebaasi mudel.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Workload ==&lt;br /&gt;
&lt;br /&gt;
=== 09.10.2016 ===&lt;br /&gt;
* Tiimi moodustamine ja esimene kogunemine&lt;br /&gt;
* Teema valik ja esimeste tegevussuundade paika panemine&lt;br /&gt;
&lt;br /&gt;
=== 11.10.2016 ===&lt;br /&gt;
* Loodi wiki leht&lt;br /&gt;
&lt;br /&gt;
=== 16.10.2016 ===&lt;br /&gt;
* Loodi ajaveeb: [https://i243elekter.wordpress.com/ https://i243elekter.wordpress.com/]&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti analüüsi osa lõpetamine&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti logo ning programmi loogika: [https://drive.google.com/file/d/0B6rC6xduz_u4YUNzUFN1N3hpQjQ/view?usp=sharing Draw.io&#039;s koostatud skeem]&lt;br /&gt;
&lt;br /&gt;
=== 07.11.2016 ===&lt;br /&gt;
* FoodBytes retsensioon: [[Talk:FoodBytes]]&lt;br /&gt;
&lt;br /&gt;
=== 07.11.2016 ===&lt;br /&gt;
* Lisatud andmebaasiskeem&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=114113</id>
		<title>Elekter</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Elekter&amp;diff=114113"/>
		<updated>2016-11-07T18:19:14Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine_CSharp_keeles_(2016)]]&lt;br /&gt;
== Meeskond ==&lt;br /&gt;
&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Kristo Oidermaa - projektijuht&lt;br /&gt;
* Tiit Post&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
&lt;br /&gt;
Korteriühistule või haldusfirmale sobiv programm, mis võimaldab mugavalt hallata kortermajadele laekuvaid arveid, neid jaotada korterite vahel ning kontrollida võlglaste staatust.&lt;br /&gt;
&lt;br /&gt;
[[File:Elekter_logo_3.png]]&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
C#, Windows Presentation Foundation, andmebaasid.&lt;br /&gt;
&lt;br /&gt;
== Analüüs ==&lt;br /&gt;
&#039;&#039;&#039;Rakenduse üldkirjeldus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Tiimi Elekter rakendus on mõeldud korteriühistule või haldusfirmale, et mugavalt hallata ja koostada arveid. Rakendus hõlmab nii laekuvate arvete (haldustasu, koristus, üldelekter, küte, remondifond, prügivedu, kindlustus) süsteemis registreerimist kui ka ühistuliikmetele arvete väljastamist iga kuu kaupa. Samuti peab rakendus ja andmebaas sisaldama kõike muud vajalikku infot, mis kajastuvad tavapärasel korteriühistu poolt saadetaval arvel. &lt;br /&gt;
&lt;br /&gt;
Kasutust leiaks antud rakendus pigem väiksemate haldusfirmade või ühistute endi käes. Suurematel haldusfirmadel on endal sarnased programmid olemas (näiteks Kvatro oma). Tegemist ei oleks ühistule/haldusfirmale sobiva raamatupidamistarkvaraga vaid pigem lisarakendusega, mis on mõeldud eelkõige haldurile ning tulevikus võiks antud rakendus olla otse seotud ka raamatupidamissüsteemiga. Arvatavasti väiksemate haldusfirmade või ühistute puhul käib jagamine paljuski excelis või niipalju kui raamatupidamistarkvara lubab teha.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Täpsem sisu:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Rakendus sisaldab endas kortermajade/ühistuste lisamist, sellega seoses ka kõigi korterite, vastutavate isikute ja nende kontaktide lisamist. Ennekõike on tähtis kätte saada vajalik algandmestik hilisemateks arvutusteks ning kokku leppida, kuidas hakkab toimuma erinevate kululiikide jagamine korterite vahel (ruutmeertri põhiselt, korteri põhiselt või fikseeritud summa).&lt;br /&gt;
&lt;br /&gt;
Teine osa rakendusest on laekunud kommunaalarvete lisamine (elekter, prügi jne). Osad arved laekuvad iga korteri kohta, osad arved on kogu ühistu kanda ja jaotada korterite vahel. Rakendus keskendub just nendele arvetele, mis laekuvad otse ühistule ning mida on vaja ühistuliikmete vahel jaotada. Lisaks tuleb arvetust pidada muude lisakulude üle nagu remondifondid, parkimiskohtade kulud/süsteem jne.&lt;br /&gt;
&lt;br /&gt;
Kolmas osa on arvete koostamise süsteem, mis kõigepealt kontrollib kas kõik soovitava kuu kommunaalarved on laekunud ühistule ning jaotab vastavalt kokkulepitud valemitele need korterite vahel ära. Soov oleks antud arved koostada eraldi dokumendina  ja tuleviku võimalusena saata otse ka vastutavale isikule näiteks e-maili peale.&lt;br /&gt;
&lt;br /&gt;
Neljas osa süsteemist oleks võlglaste/ettemaksete haldus. Süsteem võimaldaks ka arvet pidada iga korteri kohta välja läinud arvete ja laekunud maksete üle ning edasiarendusena võiks arvestada ka viiviseid. Nii saaks iga uue väljastatava arve puhul kohe kajastada ka korteri varasemat võlgnevust või ettemakset. Samuti võiks toimuda automaatsed teavitused või märguanded kui mõne korteri võlgnevus on liiga suureks läinud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Eesmärk ja võimalikud tulevikusuunad:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Eesmärk on muuta erinevate arvete haldamine ühistutele lihtsamaks rakenduse keskkonna kaudu. Kui ühistu andmed on juba sisestatud kasutaja poolt, on ainuke töö sisestada info erinevate arvete kohta. Tulevikufunktsioonidena võivad lisanduda ka analüüsi pool ja täpsemad otsingufunktsioonid. Näiteks korteritemüügi puhul saab potentsiaalsetele ostjatele näidata täpsemat kommunaalarvete ajalugu iga kuu kaupa.&lt;br /&gt;
&lt;br /&gt;
Samuti võib tulevikus tekkinud andmebaas olla kasulik haldusfirmadele renoveerimiste planeerimisel – näiteks küttearved ruutmeetri kohta renoveerimata ja renoveeritud majas, mis oleks oluline sisend remontide planeerimise protsessis. &lt;br /&gt;
&lt;br /&gt;
Edasiseks arenduseks oleks ühe võimalusena ka korteriomanikule sobiva rakenduse loomine, kus korteriomanik ise saab enda korteriga seotud infot turvaliselt vaadata.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Milliste osade realiseerimine võib osutuda problemaatiliseks?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Üks tähtsamaid tegevusi on kohe alguses andmebaasid sobivalt valmis disainida juba ette mõelda, et milliseid andmeid on täpselt vaja, et lõppprodukt väljastatava arve põhjal saaks valmis. Üks pool hõlmab kindlasti erinevate korterite/majade sidumist erinevate arvetega, et päringud oleks võimalikud lihtsad ning kiired. &lt;br /&gt;
&lt;br /&gt;
Teine keerulisem pool on vast valmisolek erijuhtudeks. Esineb kortermajasid, kus parkimist kasutavad ainult osa korterid või katusekorruse korteritel on eraldi küttelahendused. Seega võivad kajastuda sama maja erinevate korterite ühistuarvetel ka erinevad kululiigid.&lt;br /&gt;
&lt;br /&gt;
Samuti võib keeruliseks osutuda viiviste ja ettemaksete arvestus. Siinkohal tuleks täpselt välja mõelda, mis ajahetkel hakkab viivise arvestus peale ning mis hetkedel uued arved väljastatakse. Just ajalise mõõte planeerimine on tähtis, et ei tekiks probleeme, kui mõni arve laekub hiljem või varem eeldatavast plaanis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde jaotus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sigrid – user interface ja disain WPFs, väljundi disain ja kood, blogi eest hoolitsemine&lt;br /&gt;
&lt;br /&gt;
Kristo – projektijuht ja järelevalve, teeb kõike natukene &lt;br /&gt;
&lt;br /&gt;
Tiit – kirjutab koodi ja loob andmebaase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Must have: ===&lt;br /&gt;
*	Kortermajade lisamine andmebaasi (vajalik info:maja id, tänava nimi ja maja nr, korterite arv, ruutmeetreid kokku, ühistuinfo ja rekvisiidid)&lt;br /&gt;
*	Korterite lisamine kortermajadele (vajalik info: kortermaja id, korteri nr, suurus ruutmeetrites, omaniku nimi, omaniku kontakid)&lt;br /&gt;
*	Lihtsamad otsingufuntksioonid – näiteks korteriomaniku kontakti leidmiseks&lt;br /&gt;
*	Majade/korterit info muutmine/kustutamine (näiteks uue omaniku kirjapanek)&lt;br /&gt;
*	Laekunud arvete lisamine andmebaasi (vajalik info kortermaja id, arve liik, mis perioodi arve, summa)&lt;br /&gt;
*	Võimalus vaadata, kas kortermaja kohta on kõik arved laekunud enne korterile arve koostamist&lt;br /&gt;
*	Korteritele arvete koostamine koos arvutustega iga kuu kohta ning rakenduses kuvamine&lt;br /&gt;
*	Uute arvete salvestamine (doc/pdf)&lt;br /&gt;
*	Korterite võlgnevuste/ettemaksete üle arvepidamine, koos korteritelt laekunud maksete registreerimisega. Viiviste arvutus ja arvele lisamine.&lt;br /&gt;
*	Lisakululiikide haldus, mille kohta ei laeku arveid või mis ei käi kõigi korterite kohta.&lt;br /&gt;
&lt;br /&gt;
=== Nice to have: ===&lt;br /&gt;
*	Koostatud arvete saatmise võimalus omaniku e-mailile&lt;br /&gt;
*	Võlglastele automaatsete teadete saatmine&lt;br /&gt;
*	Automaatsed meeldetuletused (et mingi arve koostada, kontrollida laekumist.&lt;br /&gt;
*	Erinevad raportid/koondväljavõtted (korterite, majade ja kululiikide kohta)&lt;br /&gt;
*	Veearvete koostamise süsteem, kus iga korter raporteerib näidud ja seeläbi jaotatakse ka veekulud. Hõlmaks ka tasandamist juhtudele kui näite ei raporteerita ja seega automaatseid prognoose.&lt;br /&gt;
&lt;br /&gt;
== Andmebaasimudelid ==&lt;br /&gt;
&lt;br /&gt;
== Workload ==&lt;br /&gt;
&lt;br /&gt;
=== 09.10.2016 ===&lt;br /&gt;
* Tiimi moodustamine ja esimene kogunemine&lt;br /&gt;
* Teema valik ja esimeste tegevussuundade paika panemine&lt;br /&gt;
&lt;br /&gt;
=== 11.10.2016 ===&lt;br /&gt;
* Loodi wiki leht&lt;br /&gt;
&lt;br /&gt;
=== 16.10.2016 ===&lt;br /&gt;
* Loodi ajaveeb: [https://i243elekter.wordpress.com/ https://i243elekter.wordpress.com/]&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti analüüsi osa lõpetamine&lt;br /&gt;
&lt;br /&gt;
=== 30.10.2016 ===&lt;br /&gt;
* Projekti logo ning programmi loogika: [https://drive.google.com/file/d/0B6rC6xduz_u4YUNzUFN1N3hpQjQ/view?usp=sharing Draw.io&#039;s koostatud skeem]&lt;br /&gt;
&lt;br /&gt;
=== 07.11.2016 ===&lt;br /&gt;
* FoodBytes retsensioon: [[Talk:FoodBytes]]&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=114111</id>
		<title>Talk:FoodBytes</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=114111"/>
		<updated>2016-11-07T18:15:28Z</updated>

		<summary type="html">&lt;p&gt;Saasma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Retsensioon: &lt;br /&gt;
&lt;br /&gt;
Meeskond Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post).&lt;br /&gt;
&lt;br /&gt;
FoodBytes rakenduse idee on hästi selgitatud ning retseptiraamatu funktsionaalsus on piisavalt arusaadav välisele lugejale. Positiivne on ka see, et andmebaasi struktuuri peale on mõeldud, mille põhjal saab juba rakendada funktsionaalsusi, mis on projekti “Must have” nimekirjas. Erinevate tabelite seosed on läbimõeldud ning võimaldab siduda retsepte kategooriate ja koostisosadega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Küll aga on tabelite nimetused natuke segased. Loogiline tunduks tabel, mis jätaks välja sõna “toiduaine”, kuna koostisosa ning toiduaine on üks ja sama asi. Pakuks allolevat struktuuri Retseptide, Toiduaine ning Koostise tabelite asemele, mille puhul on RetseptiKoostisosad vaid siduva tabeli rollis ja ei ole vaja juurde tuua uut terminit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Retseptid (RetseptID, retseptinimi, kirjeldus, juhend, kuupäev, kasutaja_id, kategooria_id, (pilt_id))&lt;br /&gt;
* Koostisosad (KoostisosaID, koostisosa)&lt;br /&gt;
* RetseptiKoostisosad (RetseptID, KoostisosaID, kogus, yhik_id)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rakenduse ägedamaks muutmiseks võiks olla võimalus ka retsepti lisamise juures lisada tehtud toidu pilt nagu netiblogides või kokaraamatutes. Inimesed söövad ju eelkõige silmadega. Võiks lisada selle võimaluse “nice to have” funktsionaalsuse juurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tekkis mõttekoht seoses kasutajate lisamise ja kontode loomisega. Kuna rakendus on mõeldud koduseks kasutamiseks arvutis, siis näib paroolide loomine kontodele liialdusena. Piisaks ju lihtsalt kui rakenduse kasutaja saab valida või muuta, kes ta täpsemalt on. Samuti kui vaadata ainult “must have” funktsionaalsust, siis ei läheks kasutajate registreerimist ja paroolide haldust jne vaja. Piisab lihtsalt kui retseptiautoriks märkida kellegi nimi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teine idee oleks eraldada toitumispäeviku/ajaloo jälgimine retseptide küljest ja vast siduda see otseselt kasutajaga. Ehk siis andmebaasis “tehtud” tabel paikneks kasutaja küljes ja seal oleks lisaks ka kasutajaId, mis võimaldaks üpriski kiiresti otsida hiljem, et mis retsepte kasutaja on teinud ja nii toitumispäevikut kuvada.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=113914</id>
		<title>Juhend: Kodutöö aines &quot;Programmeerimine CSharp keeles&quot; (2016)</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=113914"/>
		<updated>2016-11-04T12:50:05Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Meeskond: Elekter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Kodutöö aines &amp;quot;Programmeerimine C# keeles&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline arenduskogemus .NET keskkonnas ning arendada meeskonnatöö kogemust ja analüüsivõimet. Kasutada arendusprotsessis koodihoidlat.&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
Ühte projektimeeskonda kuulub 3-5 tudengit(Soovituslik meeskonna suurus on 3-4). Ühel teemal võib teostada projekti üks või mitu meeskonda.Töö käiku kajastatakse https://wiki.itcollege.ee keskkonnas või soovi korral võib seda teha ka ajaveebis(blogis).&lt;br /&gt;
Ajaveebi pidamise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg ja dokumentatsioon) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest. Ajaveebi loob ja ajaveebi haldab projektimeeskond vabalt valitud (avalikus) keskkonnas. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti loomine ja arendamine &#039;&#039;&#039;&lt;br /&gt;
Projekt lisatakse versioonihaldusesse, kasutades selleks [Team Foundation Service&#039;it http://tfs.visualstudio.com/] ning õppejõule antakse ligipääs. Õppejõu live id: maitposka ät hotmail.com . Projekt peab olema alates algfaasist lisatud TFSi ning kogu tööprotsess toimub versioonihaldust kasutades&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde esitamine&#039;&#039;&#039; (prototüüb ja lõpptoode)&lt;br /&gt;
Töö esitamisel pakitakse see kokku ning lisatakse wiki leheküljele link lähtekoodile. Kui töö lähtekoodi ei soovita mingil põhjusel avalikustata, tuleb õppejõuga selle jaoks sõlmida eraldi kokkulepe. Lähtekood on vajalik, et tööd oleks võimalik hinnata nii õppejõul kui kaastudengitel selle kohta retsensiooni kirjutada.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Team Foundation Service kasutamine&#039;&#039;&#039; (tänasel päeval &#039;&#039; Visual Studio online&#039;&#039;)&lt;br /&gt;
[http://www.visualstudio.com/get-started/sign-up-for-visual-studio-online Step-by-Step juhend]&lt;br /&gt;
&lt;br /&gt;
NB! Versioonihalduse kohta jagab õppejõud materjale.&lt;br /&gt;
&lt;br /&gt;
==Tähtaegadest kinnipidamine==&lt;br /&gt;
Projekt jaguneb alamosadeks, millele on määratud tähtajad. Tähtaegade ületamisel võimalike punkte ei kaotata. Kui töö aga on esitatud tähtajaks, siis on võimalik selle eest teenida boonuspunkte (enamasti 0-10% võimalikust maksimumist boonust). Enne tähtaega esitatud töö ei tähenda automaatselt maksimumpunkte, kui see ei ole sooritatud korralikult.&lt;br /&gt;
&lt;br /&gt;
NB! Juhul kui analüüsi tähtajast on möödunud nädal, määrab õppejõud meeskonnale ise vabalt valitud ülesande, mis on võetud näidis teemade alt. Peale seda ei ole võimalik teemat enam muuta.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. Tehnilisi ja vormistuslike puudujääke on võimalik korvata lisavõimaluste realiseerimisega.Üldjuhul tuleb loodud lahendust ka praktikumides või loengutes teistele tudengitele tutvustada (ca 10 min).&lt;br /&gt;
Nagu eelpool mainitud, koosneb projekt erinevatest osadest. Punktide arvu määramisel arvestatakse ka tähtajast kinni pidamist, mille toimimisloogika on kirjeldatud eespool.&lt;br /&gt;
&lt;br /&gt;
===Meeskonna kokkupanek ja idee===&lt;br /&gt;
&#039;&#039;&#039;27.10.2016&#039;&#039;&#039; (2p) (Kuna vahepeal oli loengute toimumise kord paigast ära ning TFSi loomisega on segadust olnud, siis nihutan seda tähtaega)&lt;br /&gt;
&lt;br /&gt;
Tekitatakse meeskonna wiki lehekülg. Meeskonnal peab olema nimi ning see koosneb  kolmest kuni viiest liikmest. Määratakse projektijuht. Juhul kui hakatakse blogi pidama kuskil mujal keskkonnas ilmub selle kohta link. Lühidalt peaks kirjeldama idee olemust nii, et selle üldine suund oleks arusaadav. Samuti peab olema märgitud tehnoloogia, milles hakatakse rakendust looma. Meeskond on loonud TFSi konto ning on saatnud õppejõule kutse.&lt;br /&gt;
&lt;br /&gt;
===Analüüs===&lt;br /&gt;
&#039;&#039;&#039;01.11.2016&#039;&#039;&#039; (4p)&lt;br /&gt;
Analüütilise osa eesmärgiks on arendada tudengite analüüsioskust, mida on vaja ka päris tarkvaraarenduse protsessi juures.&#039;&#039;&#039;NB! Miinimum sõnade arv 700&#039;&#039;&#039; Selle osa käigus peab valmima loodava rakenduse analüüs, mis sisaldab muu hulgas ka:&lt;br /&gt;
*Analüüs rakendusele. (Mida see endas sisaldab? Mis on selle eesmärk? Mida tavakasutaja sellega teha saaks? Milliste osade realiseerimine võib osutuda problemaatiliseks?) Kui on tööjaotus paigas, siis tuua ka see välja.&lt;br /&gt;
*Tuua välja nimekiri funktsionaalsusest, mida plaanitakse kindlasti teostada(&#039;&#039;Must have&#039;&#039;)&lt;br /&gt;
*Nimekiri funktsionaalsustest, mis võiks olla, aga mida ei pruugita ajapuuduse tõttu realiseerida.(&#039;&#039;Nice to have&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.11.2016 (3p)&lt;br /&gt;
&lt;br /&gt;
===Prototüüp + esitlemine===&lt;br /&gt;
&#039;&#039;&#039;20.11.2016 &#039;&#039;&#039;(10p)&lt;br /&gt;
&lt;br /&gt;
Valmib projekti esmane realisatsioon. Laias laastus on peafunktsionaalsused realiseeritud(Nimekiri funktsionaalsusest, mida plaanitakse teostada). Rakenduses on loodud erinevad vaated, mis võimaldavad ülevaate rakendusest saada.&lt;br /&gt;
&lt;br /&gt;
20. novembril esitatakse prototüüp, mida kaitstakse sellele järgneval nädalal. NB! Juhul kui prototüüpi ei kaitsa ja ei esitata, siis ei ole võimalik selle osa eest punkte saada.&lt;br /&gt;
&lt;br /&gt;
===Lõpptoode===&lt;br /&gt;
&#039;&#039;&#039;18.12.2016&#039;&#039;&#039;(30p)&lt;br /&gt;
Selleks faasiks peab projekt maksimumpuntkide saavutamiseks olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.01.2016(4p)&lt;br /&gt;
&lt;br /&gt;
===Esitlus/Kaitsmine=== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Toimub loengutes/praktikumides või kokkulepitud ajal enne eksamit&#039;&#039;&#039; &#039;&#039;(3p) &#039;&#039;&lt;br /&gt;
Esitlusel kaitstakse projekti. Tutvustatakse tehnoloogiat, mida kasutati rakenduse realiseerimiseks.  Lühidalt räägitakse tööjaotusest ning probleemidest, mis tekkisid projekti realiseerimisel. Näidatakse lähtekoodi ja demonstreeritakse oma rakendust teistele tudengitele, kes võivad selle kohta küsimusi küsida. Kestvus ~20min.&lt;br /&gt;
&lt;br /&gt;
====Kaitsmise ajad====&lt;br /&gt;
&lt;br /&gt;
Siia alla ilmuvad detsembris kaitsmise ajad.&lt;br /&gt;
&lt;br /&gt;
Ideaalne esitlus, sisaldab endas ka powerpointi, kus on&lt;br /&gt;
*väljatoodud meeskonna nimi ja liikmed&lt;br /&gt;
*idee&lt;br /&gt;
*realiseerimine&lt;br /&gt;
*mis oli keerukas?&lt;br /&gt;
*mida uut õpiti?&lt;br /&gt;
*mõnede keerulisemate probleemide lahendamine&lt;br /&gt;
*meeskonnaliikmete panus&lt;br /&gt;
&lt;br /&gt;
Kaitsmise käigus vaadatakse üle ka kood.&lt;br /&gt;
&lt;br /&gt;
=Teemad 2016 sügis=&lt;br /&gt;
Kodutööna tuleb luua:&lt;br /&gt;
&lt;br /&gt;
==Nõuded rakendusele==&lt;br /&gt;
Loodav rakendus peab:&lt;br /&gt;
* Peab kasutama andmebaasi (erikokkuleppel ka XML formaadis andmeallikat)&lt;br /&gt;
**Andmebaasis peab olema vähemalt 6 andmebaasi tabelit&lt;br /&gt;
* Peab võimaldama tegevuste kohta registri pidamist (logi)&lt;br /&gt;
**Rakenduses tehtavad tegevused salvestatakse&lt;br /&gt;
* Kasutama kasutajaliidesena ühte järgmistest: Windows Presentation Foundation, Windows Phone , Windows Store App või ASP.Net&lt;br /&gt;
* Kood on kommenteeritud ning rakendus on varustatud dokumentatsiooniga&lt;br /&gt;
* Maksimumpunktide jaoks kasutatakse vastavalt valitud tehnoloogiale soovitatud arendusmustreid&lt;br /&gt;
* Kood on kirjutatud C# programmeerimiskeeles&lt;br /&gt;
**Kuna aine nimi on &amp;quot;Programmeerimine C# keeles&amp;quot; ei tohi esitada rakendust, mis on loodud Javas, PHPs vms keeles&lt;br /&gt;
* Rakendus on jaotatud kihtidesse&lt;br /&gt;
&#039;&#039;&#039;Loodav rakendus peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
*Kood on kommenteeritud&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea äriidee&lt;br /&gt;
&lt;br /&gt;
==Kodune raamatukogu==&lt;br /&gt;
Kodudes on tihti erinevaid raamatuid (filme, muud nänni) ja sõbrad tahavad neid vahel laenutada.&lt;br /&gt;
Loo rakendus, mis&lt;br /&gt;
* Võimaldaks sisestada kodused raamatud&lt;br /&gt;
* Võimaldaks luua laenutajate profiile&lt;br /&gt;
* Raamatuid välja laenutada (tähtajaliselt)&lt;br /&gt;
* Laseks koostada erinevaid aruandeid (kodusolevad raamatud, väljalaenutatud raamatud, tähtaja ületanud laenutused  jne)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Kui laenutaja profiilis on e-mail, siis saada automaatselt e-kiri „kallis sõber see ja see, Sinu käes on minu raamat, kas tood tagasi ka?”&lt;br /&gt;
* Kuva hoiatused, kui laenutaja laenutuste ajalugu on vilets või kui mõni raamat on tagastamata.&lt;br /&gt;
* Lase lisada raamatutele pilt&lt;br /&gt;
* Loo lihtne veebiliides (et sõbrad saaksid veebist vaadata, mis raamatud kasutajal  kodus veel alles on)&lt;br /&gt;
Või&lt;br /&gt;
&lt;br /&gt;
==CRM==&lt;br /&gt;
Oma klientidest peab olema ülevaade.&lt;br /&gt;
Loo rakendus, mis võimaldab:&lt;br /&gt;
* Kliente ning nende kontaktisikuid sisestada, muuta ning kustutada&lt;br /&gt;
* Võimalda sisestada kliendikontakte&lt;br /&gt;
* Koostada hinnapakkumisi klientidele, kusjuures hinnapakkumine lisatakse süsteemi ka kui kliendikontakt ning saadetakse samast süsteemist kliendile.&lt;br /&gt;
* Kliendi andmete vaatamisel kuvatakse ka kliendikontaktid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Loo võimalus, kus kontaktisiku sünnipäeva saabumisel saadetakse automaatselt inimesele meil õnnesoovidega&lt;br /&gt;
* Õnnitlusmeilide template’sid võiks olla mitu&lt;br /&gt;
* Loo võimalus kliendi huvide (huvialade) kajastamiseks süsteemis&lt;br /&gt;
&lt;br /&gt;
==Mäng(Unit)==&lt;br /&gt;
Loodav mäng peab sisaldama:&lt;br /&gt;
* Erinevaid tasemeid&lt;br /&gt;
* Punktiarvestust&lt;br /&gt;
* XBox puldi tuge&lt;br /&gt;
* Klaviatuurilt juhtimise tuge&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Loodav mäng peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea &#039;&#039;story&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Meeskonnad 2016=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kuri Kohvikupidaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Egert Aia&lt;br /&gt;
Meeskonna koduleht: [[Kuri_Kohvikupidaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
Kättesaadav siit: https://drive.google.com/open?id=0BxPYMOn_Lvs6U3g2Rm53TTNZWmc&lt;br /&gt;
&lt;br /&gt;
Sisse saab logida jalutsis vajutades login&lt;br /&gt;
&lt;br /&gt;
admini log:   1@eesti.ee&lt;br /&gt;
&lt;br /&gt;
admini pw:    a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS! Checkboxe valides vali esimest checkboxi nii et teed selle aktiivseks ja siis võtad linnukese jälle ära, pärast seda kõik checkboxid töötavad ilusti! =)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Pirate Netflix===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Joosep Voolmaa&lt;br /&gt;
Meeskonna koduleht: [[Pirate_Netflix]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: D♭===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Arusalu&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Roomet Saadi&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: D♭]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ParkWell===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
Meeskonna koduleht: [[ParkWell]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://park-well.visualstudio.com/ParkWell SIIN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Bomory===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
Meeskonna koduleht: [[Bomory]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://eikbomory.visualstudio.com/Bomory&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs&#039;&#039;&#039;&lt;br /&gt;
Õppejõule saadetud 01.11.2016.&lt;br /&gt;
https://wiki.itcollege.ee/index.php/Bomory#Anal.C3.BC.C3.BCs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kassarakendus===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Meelis Sääsk&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
Meeskonna koduleht: [[Kassarakendus]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Pie Piper===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Villem Markus Loigom&lt;br /&gt;
* Olari Pipenberg&lt;br /&gt;
* Uku-Mart Uprus&lt;br /&gt;
* Ardo Erik&lt;br /&gt;
Meeskonna koduleht: [[Pie_Piper]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
NA&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
NA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Hidden Mustard===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andreas Kirotar&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Anneli Asser&lt;br /&gt;
Meeskonna koduleht: [[Hidden_Mustard]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: B12===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
Meeskonna koduleht: [[B12]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://b12tiim.visualstudio.com/B12/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Elibrium ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Häkkinen&lt;br /&gt;
* Karl Frank&lt;br /&gt;
Meeskonna koduleht: [[Elibrium]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://m-hakkinen.visualstudio.com/Elibrium&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
*Analüüsi retsensioon meeskonnale &#039;&#039;&#039;Gurmaanid&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Gurmaanid siin]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CozinHero ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kai Kallastu&lt;br /&gt;
Meeskonna koduleht: [[CozinHero]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://metsvahi.visualstudio.com/CozinHero&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Bank ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aleksei Kopõlov&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Sander Perens&lt;br /&gt;
* Tarvo Sbitnev&lt;br /&gt;
Meeskonna koduleht: [https://wiki.itcollege.ee/index.php/Bank Bank]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://perens.visualstudio.com/Projekt%20Bank/tiimi%20nimi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ATDV===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aldin Talve - arendaja&lt;br /&gt;
* Delia Viirmaa - projektijuht&lt;br /&gt;
* Mart-Erki Nõumees - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[ATDV]]&lt;br /&gt;
&lt;br /&gt;
ADTV TFS: [https://adtvmn.visualstudio.com/ADTV SIIN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sõnajalg===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Argo Hansen&lt;br /&gt;
* Ragnar Rästas&lt;br /&gt;
Meeskonna koduleht: [[Sõnajalg]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://sonajalg-itk.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond:Gurmaanid===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Brita Pentšuk&lt;br /&gt;
* Ott Sõerumäe&lt;br /&gt;
Meeskonna koduleht: [[Gurmaanid]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Korterid Kõrgel Künkal===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Edward Mardo&lt;br /&gt;
Meeskonna koduleht: [[Korterid_Kõrgel_Künkal]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Librarians===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kerttu Liis Lootus&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
Meeskonna koduleht: [[Librarians]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://klootus.visualstudio.com/Librarians&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Brainery===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Elina Kuldkepp&lt;br /&gt;
* Berit Põldoja&lt;br /&gt;
* Taavi Teearu&lt;br /&gt;
Meeskonna koduleht: [[Brainery]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Rent A Book===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aapo Kersalu&lt;br /&gt;
* Kristjan Kotto&lt;br /&gt;
* Paul John Niidas&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Rent A Book]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&amp;quot; &lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: BMS===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kert Kukk&lt;br /&gt;
Meeskonna koduleht: [[BMS]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Dogify===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht [[Dogify]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; https://rososa.visualstudio.com/Dogify/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ForeverNotes===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
Meeskonna koduleht: [[ForeverNotes]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: NullPointerException===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kertu Nurmberg&lt;br /&gt;
* Tõnis Piirits&lt;br /&gt;
Meeskonna koduleht: [[NullPointerException]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; https://null-pointer-exception.visualstudio.com/CSGO%20Triggerbot&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Autoparandaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Viilveer&lt;br /&gt;
Meeskonna koduleht: [[Autoparandaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://tostukid.visualstudio.com&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Paabel===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rutt Lindström&lt;br /&gt;
* Esta Prangel&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Liina Abner&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Paabel]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO Projekti &amp;quot;Isearve&amp;quot; retsensioon: [[Talk:Isearve]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Agraarbeib===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaia Runthal&lt;br /&gt;
* Marianne Trubetskoi&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Agraarbeib]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://kaia.visualstudio.com/MeieTalu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs (01.11)&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Analyys Analüüs Wikis]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüsi retsensioon (08.11) TODO&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/AnalüüsiRetsensioon Retsensioon meeskonna [[Elekter]] analüüsile]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototüüp (20.11) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Prototüüp Prototüüp]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode (18.12) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Lõpptoode Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoote retsensioon (08.01) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/LõpptooteRetsensioon Retsensioon meeskonna ??? tootele]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: MoneyG 1.0===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Saar&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[MoneyG 1.0]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [http://452b.visualstudio.com]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
===Meeskond: Laener===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask - programmeerija&lt;br /&gt;
* Marko Nõu - programmeerija&lt;br /&gt;
* Anto Animägi - projektijuht&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Laener]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://kaskmartin.visualstudio.com/Laener]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Vitamin C#===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Rene Väli&lt;br /&gt;
* Kaia Tomson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Vitamin C#]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://fevertree.visualstudio.com/Vitamiin%20Csharp https://fevertree.visualstudio.com/Vitamiin%20Csharp]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kingalaenutus===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristi Saare&lt;br /&gt;
* Kersti Maurer&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Kingalaenutus]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;projekti TFS: https://kingalaenutus.visualstudio.com/Kingalaenutus&#039;&#039;&#039;&lt;br /&gt;
NB! Õppejõud lisatud itcollege aadressiga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Isearve ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Isearve]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://isearve.visualstudio.com/IseArve https://isearve.visualstudio.com/IseArve]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: DevHelp===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger (projektijuht)&lt;br /&gt;
* Mikk Erlenheim&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
Meeskonna koduleht: [[DevHelp]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://devhelp.visualstudio.com/]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Elekter ===&lt;br /&gt;
&#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Kristo Oidermaa&lt;br /&gt;
* Tiit Post&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [[Elekter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; [https://elekter.visualstudio.com/Elekter/ https://elekter.visualstudio.com/Elekter]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039; Projekt FoodBytes (TODO)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Battle2048===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andrus Seiman&lt;br /&gt;
*Annely Aasalaid&lt;br /&gt;
*Kristjan Peterson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Battle2048]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: EasyDesk===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[EasyDesk]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://marjup.visualstudio.com/EasyDesk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Ajamasin===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Hellerma&lt;br /&gt;
* Teele Sepman&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:[[Ajamasin]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://teelesepman.visualstudio.com/Ajamasin/ (https://ajamasin.visualstudio.com/Ajamasin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Jarvis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
&lt;br /&gt;
* Grigori Palamartšuk - Scrum Master &amp;amp; Product owner&lt;br /&gt;
* Andrei Grigorjev - arendaja&lt;br /&gt;
* Artyom Likhachev - arendaja&lt;br /&gt;
* Maksim Tšeljabov - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [https://wiki.itcollege.ee/index.php/JARVIS Jarvis]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://grigorip.visualstudio.com/Jarvis Jarvis]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
===Meeskond: TikTokTek===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Eva Ibrus&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht&#039;&#039;&#039;&lt;br /&gt;
[[TikTokTek]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://tiktoktek.visualstudio.com&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Rahaplaneerija===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Maila Keerus&lt;br /&gt;
* Kersti Miller&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
[[Rahaplaneerija]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://rahaplaneerija.visualstudio.com/Rahaplaneerija Rahaplaneerija]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;:&lt;br /&gt;
[[Talk:EasyDesk]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Garden of Towers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Nele Sergejeva&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/Garden_of_Towers&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://gardenoftowers.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: FoodCab===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mario Mustasaar&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/FoodCab&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://foodcab.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: MyLibrary===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam - projektijuht, arendaja&lt;br /&gt;
* Olle Mikk - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: https://mylibrary16.wordpress.com/&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: OnTime ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tatjana Kruglova&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/OnTime&lt;br /&gt;
&lt;br /&gt;
Projetki TFS: https://ontimekruglova.visualstudio.com/OnTime/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: FoodBytes ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aet Udusaar&lt;br /&gt;
*Taavi Põder&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/FoodBytes&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://foodbytes.visualstudio.com/FoodBytes/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: SeDuM===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Liina Laumets  &lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: SeDuM]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototüüp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=113913</id>
		<title>Juhend: Kodutöö aines &quot;Programmeerimine CSharp keeles&quot; (2016)</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=113913"/>
		<updated>2016-11-04T12:49:51Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Meeskond: Elekter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Kodutöö aines &amp;quot;Programmeerimine C# keeles&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline arenduskogemus .NET keskkonnas ning arendada meeskonnatöö kogemust ja analüüsivõimet. Kasutada arendusprotsessis koodihoidlat.&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
Ühte projektimeeskonda kuulub 3-5 tudengit(Soovituslik meeskonna suurus on 3-4). Ühel teemal võib teostada projekti üks või mitu meeskonda.Töö käiku kajastatakse https://wiki.itcollege.ee keskkonnas või soovi korral võib seda teha ka ajaveebis(blogis).&lt;br /&gt;
Ajaveebi pidamise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg ja dokumentatsioon) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest. Ajaveebi loob ja ajaveebi haldab projektimeeskond vabalt valitud (avalikus) keskkonnas. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti loomine ja arendamine &#039;&#039;&#039;&lt;br /&gt;
Projekt lisatakse versioonihaldusesse, kasutades selleks [Team Foundation Service&#039;it http://tfs.visualstudio.com/] ning õppejõule antakse ligipääs. Õppejõu live id: maitposka ät hotmail.com . Projekt peab olema alates algfaasist lisatud TFSi ning kogu tööprotsess toimub versioonihaldust kasutades&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde esitamine&#039;&#039;&#039; (prototüüb ja lõpptoode)&lt;br /&gt;
Töö esitamisel pakitakse see kokku ning lisatakse wiki leheküljele link lähtekoodile. Kui töö lähtekoodi ei soovita mingil põhjusel avalikustata, tuleb õppejõuga selle jaoks sõlmida eraldi kokkulepe. Lähtekood on vajalik, et tööd oleks võimalik hinnata nii õppejõul kui kaastudengitel selle kohta retsensiooni kirjutada.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Team Foundation Service kasutamine&#039;&#039;&#039; (tänasel päeval &#039;&#039; Visual Studio online&#039;&#039;)&lt;br /&gt;
[http://www.visualstudio.com/get-started/sign-up-for-visual-studio-online Step-by-Step juhend]&lt;br /&gt;
&lt;br /&gt;
NB! Versioonihalduse kohta jagab õppejõud materjale.&lt;br /&gt;
&lt;br /&gt;
==Tähtaegadest kinnipidamine==&lt;br /&gt;
Projekt jaguneb alamosadeks, millele on määratud tähtajad. Tähtaegade ületamisel võimalike punkte ei kaotata. Kui töö aga on esitatud tähtajaks, siis on võimalik selle eest teenida boonuspunkte (enamasti 0-10% võimalikust maksimumist boonust). Enne tähtaega esitatud töö ei tähenda automaatselt maksimumpunkte, kui see ei ole sooritatud korralikult.&lt;br /&gt;
&lt;br /&gt;
NB! Juhul kui analüüsi tähtajast on möödunud nädal, määrab õppejõud meeskonnale ise vabalt valitud ülesande, mis on võetud näidis teemade alt. Peale seda ei ole võimalik teemat enam muuta.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. Tehnilisi ja vormistuslike puudujääke on võimalik korvata lisavõimaluste realiseerimisega.Üldjuhul tuleb loodud lahendust ka praktikumides või loengutes teistele tudengitele tutvustada (ca 10 min).&lt;br /&gt;
Nagu eelpool mainitud, koosneb projekt erinevatest osadest. Punktide arvu määramisel arvestatakse ka tähtajast kinni pidamist, mille toimimisloogika on kirjeldatud eespool.&lt;br /&gt;
&lt;br /&gt;
===Meeskonna kokkupanek ja idee===&lt;br /&gt;
&#039;&#039;&#039;27.10.2016&#039;&#039;&#039; (2p) (Kuna vahepeal oli loengute toimumise kord paigast ära ning TFSi loomisega on segadust olnud, siis nihutan seda tähtaega)&lt;br /&gt;
&lt;br /&gt;
Tekitatakse meeskonna wiki lehekülg. Meeskonnal peab olema nimi ning see koosneb  kolmest kuni viiest liikmest. Määratakse projektijuht. Juhul kui hakatakse blogi pidama kuskil mujal keskkonnas ilmub selle kohta link. Lühidalt peaks kirjeldama idee olemust nii, et selle üldine suund oleks arusaadav. Samuti peab olema märgitud tehnoloogia, milles hakatakse rakendust looma. Meeskond on loonud TFSi konto ning on saatnud õppejõule kutse.&lt;br /&gt;
&lt;br /&gt;
===Analüüs===&lt;br /&gt;
&#039;&#039;&#039;01.11.2016&#039;&#039;&#039; (4p)&lt;br /&gt;
Analüütilise osa eesmärgiks on arendada tudengite analüüsioskust, mida on vaja ka päris tarkvaraarenduse protsessi juures.&#039;&#039;&#039;NB! Miinimum sõnade arv 700&#039;&#039;&#039; Selle osa käigus peab valmima loodava rakenduse analüüs, mis sisaldab muu hulgas ka:&lt;br /&gt;
*Analüüs rakendusele. (Mida see endas sisaldab? Mis on selle eesmärk? Mida tavakasutaja sellega teha saaks? Milliste osade realiseerimine võib osutuda problemaatiliseks?) Kui on tööjaotus paigas, siis tuua ka see välja.&lt;br /&gt;
*Tuua välja nimekiri funktsionaalsusest, mida plaanitakse kindlasti teostada(&#039;&#039;Must have&#039;&#039;)&lt;br /&gt;
*Nimekiri funktsionaalsustest, mis võiks olla, aga mida ei pruugita ajapuuduse tõttu realiseerida.(&#039;&#039;Nice to have&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.11.2016 (3p)&lt;br /&gt;
&lt;br /&gt;
===Prototüüp + esitlemine===&lt;br /&gt;
&#039;&#039;&#039;20.11.2016 &#039;&#039;&#039;(10p)&lt;br /&gt;
&lt;br /&gt;
Valmib projekti esmane realisatsioon. Laias laastus on peafunktsionaalsused realiseeritud(Nimekiri funktsionaalsusest, mida plaanitakse teostada). Rakenduses on loodud erinevad vaated, mis võimaldavad ülevaate rakendusest saada.&lt;br /&gt;
&lt;br /&gt;
20. novembril esitatakse prototüüp, mida kaitstakse sellele järgneval nädalal. NB! Juhul kui prototüüpi ei kaitsa ja ei esitata, siis ei ole võimalik selle osa eest punkte saada.&lt;br /&gt;
&lt;br /&gt;
===Lõpptoode===&lt;br /&gt;
&#039;&#039;&#039;18.12.2016&#039;&#039;&#039;(30p)&lt;br /&gt;
Selleks faasiks peab projekt maksimumpuntkide saavutamiseks olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.01.2016(4p)&lt;br /&gt;
&lt;br /&gt;
===Esitlus/Kaitsmine=== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Toimub loengutes/praktikumides või kokkulepitud ajal enne eksamit&#039;&#039;&#039; &#039;&#039;(3p) &#039;&#039;&lt;br /&gt;
Esitlusel kaitstakse projekti. Tutvustatakse tehnoloogiat, mida kasutati rakenduse realiseerimiseks.  Lühidalt räägitakse tööjaotusest ning probleemidest, mis tekkisid projekti realiseerimisel. Näidatakse lähtekoodi ja demonstreeritakse oma rakendust teistele tudengitele, kes võivad selle kohta küsimusi küsida. Kestvus ~20min.&lt;br /&gt;
&lt;br /&gt;
====Kaitsmise ajad====&lt;br /&gt;
&lt;br /&gt;
Siia alla ilmuvad detsembris kaitsmise ajad.&lt;br /&gt;
&lt;br /&gt;
Ideaalne esitlus, sisaldab endas ka powerpointi, kus on&lt;br /&gt;
*väljatoodud meeskonna nimi ja liikmed&lt;br /&gt;
*idee&lt;br /&gt;
*realiseerimine&lt;br /&gt;
*mis oli keerukas?&lt;br /&gt;
*mida uut õpiti?&lt;br /&gt;
*mõnede keerulisemate probleemide lahendamine&lt;br /&gt;
*meeskonnaliikmete panus&lt;br /&gt;
&lt;br /&gt;
Kaitsmise käigus vaadatakse üle ka kood.&lt;br /&gt;
&lt;br /&gt;
=Teemad 2016 sügis=&lt;br /&gt;
Kodutööna tuleb luua:&lt;br /&gt;
&lt;br /&gt;
==Nõuded rakendusele==&lt;br /&gt;
Loodav rakendus peab:&lt;br /&gt;
* Peab kasutama andmebaasi (erikokkuleppel ka XML formaadis andmeallikat)&lt;br /&gt;
**Andmebaasis peab olema vähemalt 6 andmebaasi tabelit&lt;br /&gt;
* Peab võimaldama tegevuste kohta registri pidamist (logi)&lt;br /&gt;
**Rakenduses tehtavad tegevused salvestatakse&lt;br /&gt;
* Kasutama kasutajaliidesena ühte järgmistest: Windows Presentation Foundation, Windows Phone , Windows Store App või ASP.Net&lt;br /&gt;
* Kood on kommenteeritud ning rakendus on varustatud dokumentatsiooniga&lt;br /&gt;
* Maksimumpunktide jaoks kasutatakse vastavalt valitud tehnoloogiale soovitatud arendusmustreid&lt;br /&gt;
* Kood on kirjutatud C# programmeerimiskeeles&lt;br /&gt;
**Kuna aine nimi on &amp;quot;Programmeerimine C# keeles&amp;quot; ei tohi esitada rakendust, mis on loodud Javas, PHPs vms keeles&lt;br /&gt;
* Rakendus on jaotatud kihtidesse&lt;br /&gt;
&#039;&#039;&#039;Loodav rakendus peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
*Kood on kommenteeritud&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea äriidee&lt;br /&gt;
&lt;br /&gt;
==Kodune raamatukogu==&lt;br /&gt;
Kodudes on tihti erinevaid raamatuid (filme, muud nänni) ja sõbrad tahavad neid vahel laenutada.&lt;br /&gt;
Loo rakendus, mis&lt;br /&gt;
* Võimaldaks sisestada kodused raamatud&lt;br /&gt;
* Võimaldaks luua laenutajate profiile&lt;br /&gt;
* Raamatuid välja laenutada (tähtajaliselt)&lt;br /&gt;
* Laseks koostada erinevaid aruandeid (kodusolevad raamatud, väljalaenutatud raamatud, tähtaja ületanud laenutused  jne)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Kui laenutaja profiilis on e-mail, siis saada automaatselt e-kiri „kallis sõber see ja see, Sinu käes on minu raamat, kas tood tagasi ka?”&lt;br /&gt;
* Kuva hoiatused, kui laenutaja laenutuste ajalugu on vilets või kui mõni raamat on tagastamata.&lt;br /&gt;
* Lase lisada raamatutele pilt&lt;br /&gt;
* Loo lihtne veebiliides (et sõbrad saaksid veebist vaadata, mis raamatud kasutajal  kodus veel alles on)&lt;br /&gt;
Või&lt;br /&gt;
&lt;br /&gt;
==CRM==&lt;br /&gt;
Oma klientidest peab olema ülevaade.&lt;br /&gt;
Loo rakendus, mis võimaldab:&lt;br /&gt;
* Kliente ning nende kontaktisikuid sisestada, muuta ning kustutada&lt;br /&gt;
* Võimalda sisestada kliendikontakte&lt;br /&gt;
* Koostada hinnapakkumisi klientidele, kusjuures hinnapakkumine lisatakse süsteemi ka kui kliendikontakt ning saadetakse samast süsteemist kliendile.&lt;br /&gt;
* Kliendi andmete vaatamisel kuvatakse ka kliendikontaktid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Loo võimalus, kus kontaktisiku sünnipäeva saabumisel saadetakse automaatselt inimesele meil õnnesoovidega&lt;br /&gt;
* Õnnitlusmeilide template’sid võiks olla mitu&lt;br /&gt;
* Loo võimalus kliendi huvide (huvialade) kajastamiseks süsteemis&lt;br /&gt;
&lt;br /&gt;
==Mäng(Unit)==&lt;br /&gt;
Loodav mäng peab sisaldama:&lt;br /&gt;
* Erinevaid tasemeid&lt;br /&gt;
* Punktiarvestust&lt;br /&gt;
* XBox puldi tuge&lt;br /&gt;
* Klaviatuurilt juhtimise tuge&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Loodav mäng peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea &#039;&#039;story&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Meeskonnad 2016=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kuri Kohvikupidaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Egert Aia&lt;br /&gt;
Meeskonna koduleht: [[Kuri_Kohvikupidaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
Kättesaadav siit: https://drive.google.com/open?id=0BxPYMOn_Lvs6U3g2Rm53TTNZWmc&lt;br /&gt;
&lt;br /&gt;
Sisse saab logida jalutsis vajutades login&lt;br /&gt;
&lt;br /&gt;
admini log:   1@eesti.ee&lt;br /&gt;
&lt;br /&gt;
admini pw:    a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS! Checkboxe valides vali esimest checkboxi nii et teed selle aktiivseks ja siis võtad linnukese jälle ära, pärast seda kõik checkboxid töötavad ilusti! =)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Pirate Netflix===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Joosep Voolmaa&lt;br /&gt;
Meeskonna koduleht: [[Pirate_Netflix]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: D♭===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Arusalu&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Roomet Saadi&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: D♭]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ParkWell===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
Meeskonna koduleht: [[ParkWell]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://park-well.visualstudio.com/ParkWell SIIN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Bomory===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
Meeskonna koduleht: [[Bomory]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://eikbomory.visualstudio.com/Bomory&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs&#039;&#039;&#039;&lt;br /&gt;
Õppejõule saadetud 01.11.2016.&lt;br /&gt;
https://wiki.itcollege.ee/index.php/Bomory#Anal.C3.BC.C3.BCs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kassarakendus===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Meelis Sääsk&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
Meeskonna koduleht: [[Kassarakendus]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Pie Piper===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Villem Markus Loigom&lt;br /&gt;
* Olari Pipenberg&lt;br /&gt;
* Uku-Mart Uprus&lt;br /&gt;
* Ardo Erik&lt;br /&gt;
Meeskonna koduleht: [[Pie_Piper]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
NA&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
NA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Hidden Mustard===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andreas Kirotar&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Anneli Asser&lt;br /&gt;
Meeskonna koduleht: [[Hidden_Mustard]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: B12===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
Meeskonna koduleht: [[B12]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://b12tiim.visualstudio.com/B12/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Elibrium ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Häkkinen&lt;br /&gt;
* Karl Frank&lt;br /&gt;
Meeskonna koduleht: [[Elibrium]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://m-hakkinen.visualstudio.com/Elibrium&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
*Analüüsi retsensioon meeskonnale &#039;&#039;&#039;Gurmaanid&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Gurmaanid siin]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CozinHero ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kai Kallastu&lt;br /&gt;
Meeskonna koduleht: [[CozinHero]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://metsvahi.visualstudio.com/CozinHero&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Bank ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aleksei Kopõlov&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Sander Perens&lt;br /&gt;
* Tarvo Sbitnev&lt;br /&gt;
Meeskonna koduleht: [https://wiki.itcollege.ee/index.php/Bank Bank]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://perens.visualstudio.com/Projekt%20Bank/tiimi%20nimi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ATDV===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aldin Talve - arendaja&lt;br /&gt;
* Delia Viirmaa - projektijuht&lt;br /&gt;
* Mart-Erki Nõumees - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[ATDV]]&lt;br /&gt;
&lt;br /&gt;
ADTV TFS: [https://adtvmn.visualstudio.com/ADTV SIIN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sõnajalg===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Argo Hansen&lt;br /&gt;
* Ragnar Rästas&lt;br /&gt;
Meeskonna koduleht: [[Sõnajalg]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://sonajalg-itk.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond:Gurmaanid===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Brita Pentšuk&lt;br /&gt;
* Ott Sõerumäe&lt;br /&gt;
Meeskonna koduleht: [[Gurmaanid]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Korterid Kõrgel Künkal===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Edward Mardo&lt;br /&gt;
Meeskonna koduleht: [[Korterid_Kõrgel_Künkal]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Librarians===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kerttu Liis Lootus&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
Meeskonna koduleht: [[Librarians]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://klootus.visualstudio.com/Librarians&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Brainery===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Elina Kuldkepp&lt;br /&gt;
* Berit Põldoja&lt;br /&gt;
* Taavi Teearu&lt;br /&gt;
Meeskonna koduleht: [[Brainery]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Rent A Book===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aapo Kersalu&lt;br /&gt;
* Kristjan Kotto&lt;br /&gt;
* Paul John Niidas&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Rent A Book]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&amp;quot; &lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: BMS===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kert Kukk&lt;br /&gt;
Meeskonna koduleht: [[BMS]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Dogify===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht [[Dogify]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; https://rososa.visualstudio.com/Dogify/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ForeverNotes===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
Meeskonna koduleht: [[ForeverNotes]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: NullPointerException===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kertu Nurmberg&lt;br /&gt;
* Tõnis Piirits&lt;br /&gt;
Meeskonna koduleht: [[NullPointerException]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; https://null-pointer-exception.visualstudio.com/CSGO%20Triggerbot&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Autoparandaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Viilveer&lt;br /&gt;
Meeskonna koduleht: [[Autoparandaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://tostukid.visualstudio.com&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Paabel===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rutt Lindström&lt;br /&gt;
* Esta Prangel&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Liina Abner&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Paabel]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO Projekti &amp;quot;Isearve&amp;quot; retsensioon: [[Talk:Isearve]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Agraarbeib===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaia Runthal&lt;br /&gt;
* Marianne Trubetskoi&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Agraarbeib]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://kaia.visualstudio.com/MeieTalu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs (01.11)&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Analyys Analüüs Wikis]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüsi retsensioon (08.11) TODO&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/AnalüüsiRetsensioon Retsensioon meeskonna [[Elekter]] analüüsile]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototüüp (20.11) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Prototüüp Prototüüp]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode (18.12) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Lõpptoode Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoote retsensioon (08.01) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/LõpptooteRetsensioon Retsensioon meeskonna ??? tootele]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: MoneyG 1.0===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Saar&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[MoneyG 1.0]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [http://452b.visualstudio.com]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
===Meeskond: Laener===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask - programmeerija&lt;br /&gt;
* Marko Nõu - programmeerija&lt;br /&gt;
* Anto Animägi - projektijuht&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Laener]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://kaskmartin.visualstudio.com/Laener]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Vitamin C#===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Rene Väli&lt;br /&gt;
* Kaia Tomson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Vitamin C#]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://fevertree.visualstudio.com/Vitamiin%20Csharp https://fevertree.visualstudio.com/Vitamiin%20Csharp]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kingalaenutus===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristi Saare&lt;br /&gt;
* Kersti Maurer&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Kingalaenutus]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;projekti TFS: https://kingalaenutus.visualstudio.com/Kingalaenutus&#039;&#039;&#039;&lt;br /&gt;
NB! Õppejõud lisatud itcollege aadressiga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Isearve ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Isearve]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://isearve.visualstudio.com/IseArve https://isearve.visualstudio.com/IseArve]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: DevHelp===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger (projektijuht)&lt;br /&gt;
* Mikk Erlenheim&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
Meeskonna koduleht: [[DevHelp]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://devhelp.visualstudio.com/]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Elekter ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Kristo Oidermaa&lt;br /&gt;
* Tiit Post&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht:&#039;&#039;&#039; [[Elekter]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; [https://elekter.visualstudio.com/Elekter/ https://elekter.visualstudio.com/Elekter]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon:&#039;&#039;&#039; Projekt FoodBytes (TODO)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Battle2048===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andrus Seiman&lt;br /&gt;
*Annely Aasalaid&lt;br /&gt;
*Kristjan Peterson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Battle2048]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: EasyDesk===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[EasyDesk]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://marjup.visualstudio.com/EasyDesk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Ajamasin===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Hellerma&lt;br /&gt;
* Teele Sepman&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:[[Ajamasin]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://teelesepman.visualstudio.com/Ajamasin/ (https://ajamasin.visualstudio.com/Ajamasin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Jarvis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
&lt;br /&gt;
* Grigori Palamartšuk - Scrum Master &amp;amp; Product owner&lt;br /&gt;
* Andrei Grigorjev - arendaja&lt;br /&gt;
* Artyom Likhachev - arendaja&lt;br /&gt;
* Maksim Tšeljabov - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [https://wiki.itcollege.ee/index.php/JARVIS Jarvis]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://grigorip.visualstudio.com/Jarvis Jarvis]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
===Meeskond: TikTokTek===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Eva Ibrus&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht&#039;&#039;&#039;&lt;br /&gt;
[[TikTokTek]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://tiktoktek.visualstudio.com&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Rahaplaneerija===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Maila Keerus&lt;br /&gt;
* Kersti Miller&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
[[Rahaplaneerija]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://rahaplaneerija.visualstudio.com/Rahaplaneerija Rahaplaneerija]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;:&lt;br /&gt;
[[Talk:EasyDesk]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Garden of Towers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Nele Sergejeva&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/Garden_of_Towers&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://gardenoftowers.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: FoodCab===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mario Mustasaar&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/FoodCab&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://foodcab.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: MyLibrary===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam - projektijuht, arendaja&lt;br /&gt;
* Olle Mikk - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: https://mylibrary16.wordpress.com/&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: OnTime ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tatjana Kruglova&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/OnTime&lt;br /&gt;
&lt;br /&gt;
Projetki TFS: https://ontimekruglova.visualstudio.com/OnTime/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: FoodBytes ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aet Udusaar&lt;br /&gt;
*Taavi Põder&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/FoodBytes&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://foodbytes.visualstudio.com/FoodBytes/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: SeDuM===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Liina Laumets  &lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: SeDuM]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototüüp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=113912</id>
		<title>Juhend: Kodutöö aines &quot;Programmeerimine CSharp keeles&quot; (2016)</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=113912"/>
		<updated>2016-11-04T12:49:04Z</updated>

		<summary type="html">&lt;p&gt;Saasma: /* Meeskond: Elekter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Kodutöö aines &amp;quot;Programmeerimine C# keeles&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline arenduskogemus .NET keskkonnas ning arendada meeskonnatöö kogemust ja analüüsivõimet. Kasutada arendusprotsessis koodihoidlat.&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
Ühte projektimeeskonda kuulub 3-5 tudengit(Soovituslik meeskonna suurus on 3-4). Ühel teemal võib teostada projekti üks või mitu meeskonda.Töö käiku kajastatakse https://wiki.itcollege.ee keskkonnas või soovi korral võib seda teha ka ajaveebis(blogis).&lt;br /&gt;
Ajaveebi pidamise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg ja dokumentatsioon) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest. Ajaveebi loob ja ajaveebi haldab projektimeeskond vabalt valitud (avalikus) keskkonnas. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti loomine ja arendamine &#039;&#039;&#039;&lt;br /&gt;
Projekt lisatakse versioonihaldusesse, kasutades selleks [Team Foundation Service&#039;it http://tfs.visualstudio.com/] ning õppejõule antakse ligipääs. Õppejõu live id: maitposka ät hotmail.com . Projekt peab olema alates algfaasist lisatud TFSi ning kogu tööprotsess toimub versioonihaldust kasutades&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde esitamine&#039;&#039;&#039; (prototüüb ja lõpptoode)&lt;br /&gt;
Töö esitamisel pakitakse see kokku ning lisatakse wiki leheküljele link lähtekoodile. Kui töö lähtekoodi ei soovita mingil põhjusel avalikustata, tuleb õppejõuga selle jaoks sõlmida eraldi kokkulepe. Lähtekood on vajalik, et tööd oleks võimalik hinnata nii õppejõul kui kaastudengitel selle kohta retsensiooni kirjutada.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Team Foundation Service kasutamine&#039;&#039;&#039; (tänasel päeval &#039;&#039; Visual Studio online&#039;&#039;)&lt;br /&gt;
[http://www.visualstudio.com/get-started/sign-up-for-visual-studio-online Step-by-Step juhend]&lt;br /&gt;
&lt;br /&gt;
NB! Versioonihalduse kohta jagab õppejõud materjale.&lt;br /&gt;
&lt;br /&gt;
==Tähtaegadest kinnipidamine==&lt;br /&gt;
Projekt jaguneb alamosadeks, millele on määratud tähtajad. Tähtaegade ületamisel võimalike punkte ei kaotata. Kui töö aga on esitatud tähtajaks, siis on võimalik selle eest teenida boonuspunkte (enamasti 0-10% võimalikust maksimumist boonust). Enne tähtaega esitatud töö ei tähenda automaatselt maksimumpunkte, kui see ei ole sooritatud korralikult.&lt;br /&gt;
&lt;br /&gt;
NB! Juhul kui analüüsi tähtajast on möödunud nädal, määrab õppejõud meeskonnale ise vabalt valitud ülesande, mis on võetud näidis teemade alt. Peale seda ei ole võimalik teemat enam muuta.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. Tehnilisi ja vormistuslike puudujääke on võimalik korvata lisavõimaluste realiseerimisega.Üldjuhul tuleb loodud lahendust ka praktikumides või loengutes teistele tudengitele tutvustada (ca 10 min).&lt;br /&gt;
Nagu eelpool mainitud, koosneb projekt erinevatest osadest. Punktide arvu määramisel arvestatakse ka tähtajast kinni pidamist, mille toimimisloogika on kirjeldatud eespool.&lt;br /&gt;
&lt;br /&gt;
===Meeskonna kokkupanek ja idee===&lt;br /&gt;
&#039;&#039;&#039;27.10.2016&#039;&#039;&#039; (2p) (Kuna vahepeal oli loengute toimumise kord paigast ära ning TFSi loomisega on segadust olnud, siis nihutan seda tähtaega)&lt;br /&gt;
&lt;br /&gt;
Tekitatakse meeskonna wiki lehekülg. Meeskonnal peab olema nimi ning see koosneb  kolmest kuni viiest liikmest. Määratakse projektijuht. Juhul kui hakatakse blogi pidama kuskil mujal keskkonnas ilmub selle kohta link. Lühidalt peaks kirjeldama idee olemust nii, et selle üldine suund oleks arusaadav. Samuti peab olema märgitud tehnoloogia, milles hakatakse rakendust looma. Meeskond on loonud TFSi konto ning on saatnud õppejõule kutse.&lt;br /&gt;
&lt;br /&gt;
===Analüüs===&lt;br /&gt;
&#039;&#039;&#039;01.11.2016&#039;&#039;&#039; (4p)&lt;br /&gt;
Analüütilise osa eesmärgiks on arendada tudengite analüüsioskust, mida on vaja ka päris tarkvaraarenduse protsessi juures.&#039;&#039;&#039;NB! Miinimum sõnade arv 700&#039;&#039;&#039; Selle osa käigus peab valmima loodava rakenduse analüüs, mis sisaldab muu hulgas ka:&lt;br /&gt;
*Analüüs rakendusele. (Mida see endas sisaldab? Mis on selle eesmärk? Mida tavakasutaja sellega teha saaks? Milliste osade realiseerimine võib osutuda problemaatiliseks?) Kui on tööjaotus paigas, siis tuua ka see välja.&lt;br /&gt;
*Tuua välja nimekiri funktsionaalsusest, mida plaanitakse kindlasti teostada(&#039;&#039;Must have&#039;&#039;)&lt;br /&gt;
*Nimekiri funktsionaalsustest, mis võiks olla, aga mida ei pruugita ajapuuduse tõttu realiseerida.(&#039;&#039;Nice to have&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.11.2016 (3p)&lt;br /&gt;
&lt;br /&gt;
===Prototüüp + esitlemine===&lt;br /&gt;
&#039;&#039;&#039;20.11.2016 &#039;&#039;&#039;(10p)&lt;br /&gt;
&lt;br /&gt;
Valmib projekti esmane realisatsioon. Laias laastus on peafunktsionaalsused realiseeritud(Nimekiri funktsionaalsusest, mida plaanitakse teostada). Rakenduses on loodud erinevad vaated, mis võimaldavad ülevaate rakendusest saada.&lt;br /&gt;
&lt;br /&gt;
20. novembril esitatakse prototüüp, mida kaitstakse sellele järgneval nädalal. NB! Juhul kui prototüüpi ei kaitsa ja ei esitata, siis ei ole võimalik selle osa eest punkte saada.&lt;br /&gt;
&lt;br /&gt;
===Lõpptoode===&lt;br /&gt;
&#039;&#039;&#039;18.12.2016&#039;&#039;&#039;(30p)&lt;br /&gt;
Selleks faasiks peab projekt maksimumpuntkide saavutamiseks olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.01.2016(4p)&lt;br /&gt;
&lt;br /&gt;
===Esitlus/Kaitsmine=== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Toimub loengutes/praktikumides või kokkulepitud ajal enne eksamit&#039;&#039;&#039; &#039;&#039;(3p) &#039;&#039;&lt;br /&gt;
Esitlusel kaitstakse projekti. Tutvustatakse tehnoloogiat, mida kasutati rakenduse realiseerimiseks.  Lühidalt räägitakse tööjaotusest ning probleemidest, mis tekkisid projekti realiseerimisel. Näidatakse lähtekoodi ja demonstreeritakse oma rakendust teistele tudengitele, kes võivad selle kohta küsimusi küsida. Kestvus ~20min.&lt;br /&gt;
&lt;br /&gt;
====Kaitsmise ajad====&lt;br /&gt;
&lt;br /&gt;
Siia alla ilmuvad detsembris kaitsmise ajad.&lt;br /&gt;
&lt;br /&gt;
Ideaalne esitlus, sisaldab endas ka powerpointi, kus on&lt;br /&gt;
*väljatoodud meeskonna nimi ja liikmed&lt;br /&gt;
*idee&lt;br /&gt;
*realiseerimine&lt;br /&gt;
*mis oli keerukas?&lt;br /&gt;
*mida uut õpiti?&lt;br /&gt;
*mõnede keerulisemate probleemide lahendamine&lt;br /&gt;
*meeskonnaliikmete panus&lt;br /&gt;
&lt;br /&gt;
Kaitsmise käigus vaadatakse üle ka kood.&lt;br /&gt;
&lt;br /&gt;
=Teemad 2016 sügis=&lt;br /&gt;
Kodutööna tuleb luua:&lt;br /&gt;
&lt;br /&gt;
==Nõuded rakendusele==&lt;br /&gt;
Loodav rakendus peab:&lt;br /&gt;
* Peab kasutama andmebaasi (erikokkuleppel ka XML formaadis andmeallikat)&lt;br /&gt;
**Andmebaasis peab olema vähemalt 6 andmebaasi tabelit&lt;br /&gt;
* Peab võimaldama tegevuste kohta registri pidamist (logi)&lt;br /&gt;
**Rakenduses tehtavad tegevused salvestatakse&lt;br /&gt;
* Kasutama kasutajaliidesena ühte järgmistest: Windows Presentation Foundation, Windows Phone , Windows Store App või ASP.Net&lt;br /&gt;
* Kood on kommenteeritud ning rakendus on varustatud dokumentatsiooniga&lt;br /&gt;
* Maksimumpunktide jaoks kasutatakse vastavalt valitud tehnoloogiale soovitatud arendusmustreid&lt;br /&gt;
* Kood on kirjutatud C# programmeerimiskeeles&lt;br /&gt;
**Kuna aine nimi on &amp;quot;Programmeerimine C# keeles&amp;quot; ei tohi esitada rakendust, mis on loodud Javas, PHPs vms keeles&lt;br /&gt;
* Rakendus on jaotatud kihtidesse&lt;br /&gt;
&#039;&#039;&#039;Loodav rakendus peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
*Kood on kommenteeritud&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea äriidee&lt;br /&gt;
&lt;br /&gt;
==Kodune raamatukogu==&lt;br /&gt;
Kodudes on tihti erinevaid raamatuid (filme, muud nänni) ja sõbrad tahavad neid vahel laenutada.&lt;br /&gt;
Loo rakendus, mis&lt;br /&gt;
* Võimaldaks sisestada kodused raamatud&lt;br /&gt;
* Võimaldaks luua laenutajate profiile&lt;br /&gt;
* Raamatuid välja laenutada (tähtajaliselt)&lt;br /&gt;
* Laseks koostada erinevaid aruandeid (kodusolevad raamatud, väljalaenutatud raamatud, tähtaja ületanud laenutused  jne)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Kui laenutaja profiilis on e-mail, siis saada automaatselt e-kiri „kallis sõber see ja see, Sinu käes on minu raamat, kas tood tagasi ka?”&lt;br /&gt;
* Kuva hoiatused, kui laenutaja laenutuste ajalugu on vilets või kui mõni raamat on tagastamata.&lt;br /&gt;
* Lase lisada raamatutele pilt&lt;br /&gt;
* Loo lihtne veebiliides (et sõbrad saaksid veebist vaadata, mis raamatud kasutajal  kodus veel alles on)&lt;br /&gt;
Või&lt;br /&gt;
&lt;br /&gt;
==CRM==&lt;br /&gt;
Oma klientidest peab olema ülevaade.&lt;br /&gt;
Loo rakendus, mis võimaldab:&lt;br /&gt;
* Kliente ning nende kontaktisikuid sisestada, muuta ning kustutada&lt;br /&gt;
* Võimalda sisestada kliendikontakte&lt;br /&gt;
* Koostada hinnapakkumisi klientidele, kusjuures hinnapakkumine lisatakse süsteemi ka kui kliendikontakt ning saadetakse samast süsteemist kliendile.&lt;br /&gt;
* Kliendi andmete vaatamisel kuvatakse ka kliendikontaktid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Loo võimalus, kus kontaktisiku sünnipäeva saabumisel saadetakse automaatselt inimesele meil õnnesoovidega&lt;br /&gt;
* Õnnitlusmeilide template’sid võiks olla mitu&lt;br /&gt;
* Loo võimalus kliendi huvide (huvialade) kajastamiseks süsteemis&lt;br /&gt;
&lt;br /&gt;
==Mäng(Unit)==&lt;br /&gt;
Loodav mäng peab sisaldama:&lt;br /&gt;
* Erinevaid tasemeid&lt;br /&gt;
* Punktiarvestust&lt;br /&gt;
* XBox puldi tuge&lt;br /&gt;
* Klaviatuurilt juhtimise tuge&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Loodav mäng peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea &#039;&#039;story&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Meeskonnad 2016=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kuri Kohvikupidaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Egert Aia&lt;br /&gt;
Meeskonna koduleht: [[Kuri_Kohvikupidaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
Kättesaadav siit: https://drive.google.com/open?id=0BxPYMOn_Lvs6U3g2Rm53TTNZWmc&lt;br /&gt;
&lt;br /&gt;
Sisse saab logida jalutsis vajutades login&lt;br /&gt;
&lt;br /&gt;
admini log:   1@eesti.ee&lt;br /&gt;
&lt;br /&gt;
admini pw:    a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS! Checkboxe valides vali esimest checkboxi nii et teed selle aktiivseks ja siis võtad linnukese jälle ära, pärast seda kõik checkboxid töötavad ilusti! =)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Pirate Netflix===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Joosep Voolmaa&lt;br /&gt;
Meeskonna koduleht: [[Pirate_Netflix]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: D♭===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Arusalu&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Roomet Saadi&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: D♭]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ParkWell===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Vesinurm&lt;br /&gt;
* Raido Vell&lt;br /&gt;
* Madis Roosioks&lt;br /&gt;
Meeskonna koduleht: [[ParkWell]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://park-well.visualstudio.com/ParkWell SIIN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Bomory===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Hando Laasmägi&lt;br /&gt;
* Tarvo Tammejuur&lt;br /&gt;
* Cathy Toomast&lt;br /&gt;
Meeskonna koduleht: [[Bomory]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://eikbomory.visualstudio.com/Bomory&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs&#039;&#039;&#039;&lt;br /&gt;
Õppejõule saadetud 01.11.2016.&lt;br /&gt;
https://wiki.itcollege.ee/index.php/Bomory#Anal.C3.BC.C3.BCs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kassarakendus===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mikk Sarapuu&lt;br /&gt;
* Meelis Sääsk&lt;br /&gt;
* Piret Pomerants&lt;br /&gt;
Meeskonna koduleht: [[Kassarakendus]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Pie Piper===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Villem Markus Loigom&lt;br /&gt;
* Olari Pipenberg&lt;br /&gt;
* Uku-Mart Uprus&lt;br /&gt;
* Ardo Erik&lt;br /&gt;
Meeskonna koduleht: [[Pie_Piper]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
NA&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
NA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Hidden Mustard===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Andreas Kirotar&lt;br /&gt;
* Tõnn Vaher&lt;br /&gt;
* Aivar Romandi&lt;br /&gt;
* Anneli Asser&lt;br /&gt;
Meeskonna koduleht: [[Hidden_Mustard]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: B12===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kerdo Kullamäe&lt;br /&gt;
* Marvin Mardiat&lt;br /&gt;
* Martin Paakspuu&lt;br /&gt;
Meeskonna koduleht: [[B12]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://b12tiim.visualstudio.com/B12/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Elibrium ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Märt Häkkinen&lt;br /&gt;
* Karl Frank&lt;br /&gt;
Meeskonna koduleht: [[Elibrium]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://m-hakkinen.visualstudio.com/Elibrium&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
*Analüüsi retsensioon meeskonnale &#039;&#039;&#039;Gurmaanid&#039;&#039;&#039; asub [https://wiki.itcollege.ee/index.php/Talk:Meeskond:_Gurmaanid siin]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: CozinHero ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Taavi Metsvahi&lt;br /&gt;
* Kai Kallastu&lt;br /&gt;
Meeskonna koduleht: [[CozinHero]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://metsvahi.visualstudio.com/CozinHero&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Bank ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aleksei Kopõlov&lt;br /&gt;
* Teet Adamson&lt;br /&gt;
* Sander Perens&lt;br /&gt;
* Tarvo Sbitnev&lt;br /&gt;
Meeskonna koduleht: [https://wiki.itcollege.ee/index.php/Bank Bank]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://perens.visualstudio.com/Projekt%20Bank/tiimi%20nimi&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ATDV===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aldin Talve - arendaja&lt;br /&gt;
* Delia Viirmaa - projektijuht&lt;br /&gt;
* Mart-Erki Nõumees - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[ATDV]]&lt;br /&gt;
&lt;br /&gt;
ADTV TFS: [https://adtvmn.visualstudio.com/ADTV SIIN]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sõnajalg===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Argo Hansen&lt;br /&gt;
* Ragnar Rästas&lt;br /&gt;
Meeskonna koduleht: [[Sõnajalg]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://sonajalg-itk.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond:Gurmaanid===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Koit Kõrvel&lt;br /&gt;
* Marko Kask&lt;br /&gt;
* Brita Pentšuk&lt;br /&gt;
* Ott Sõerumäe&lt;br /&gt;
Meeskonna koduleht: [[Gurmaanid]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Korterid Kõrgel Künkal===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Edward Mardo&lt;br /&gt;
Meeskonna koduleht: [[Korterid_Kõrgel_Künkal]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Librarians===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kerttu Liis Lootus&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
* Lisette Noor&lt;br /&gt;
Meeskonna koduleht: [[Librarians]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://klootus.visualstudio.com/Librarians&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Brainery===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Lugus&lt;br /&gt;
* Elina Kuldkepp&lt;br /&gt;
* Berit Põldoja&lt;br /&gt;
* Taavi Teearu&lt;br /&gt;
Meeskonna koduleht: [[Brainery]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Rent A Book===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Aapo Kersalu&lt;br /&gt;
* Kristjan Kotto&lt;br /&gt;
* Paul John Niidas&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Rent A Book]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&amp;quot; &lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: BMS===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kert Kukk&lt;br /&gt;
Meeskonna koduleht: [[BMS]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Dogify===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Roland Soosaar&lt;br /&gt;
* Krista Norak&lt;br /&gt;
* Mihkel Roots&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht [[Dogify]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; https://rososa.visualstudio.com/Dogify/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: ForeverNotes===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Joosep Koort&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
Meeskonna koduleht: [[ForeverNotes]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: NullPointerException===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kertu Nurmberg&lt;br /&gt;
* Tõnis Piirits&lt;br /&gt;
Meeskonna koduleht: [[NullPointerException]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti TFS:&#039;&#039;&#039; https://null-pointer-exception.visualstudio.com/CSGO%20Triggerbot&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Autoparandaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Viilveer&lt;br /&gt;
Meeskonna koduleht: [[Autoparandaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://tostukid.visualstudio.com&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Paabel===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rutt Lindström&lt;br /&gt;
* Esta Prangel&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Liina Abner&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Paabel]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO Projekti &amp;quot;Isearve&amp;quot; retsensioon: [[Talk:Isearve]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Agraarbeib===&lt;br /&gt;
&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kaia Runthal&lt;br /&gt;
* Marianne Trubetskoi&lt;br /&gt;
* Taavi Tilk&lt;br /&gt;
* Mihkel Matson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Agraarbeib]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://kaia.visualstudio.com/MeieTalu&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüs (01.11)&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Analyys Analüüs Wikis]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Analüüsi retsensioon (08.11) TODO&#039;&#039;&#039;&lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/AnalüüsiRetsensioon Retsensioon meeskonna [[Elekter]] analüüsile]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototüüp (20.11) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Prototüüp Prototüüp]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode (18.12) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/Lõpptoode Lõpptoode]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoote retsensioon (08.01) TODO&#039;&#039;&#039; &lt;br /&gt;
[https://wiki.itcollege.ee/index.php/Agraarbeib/LõpptooteRetsensioon Retsensioon meeskonna ??? tootele]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: MoneyG 1.0===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Saar&lt;br /&gt;
* Mart Raus&lt;br /&gt;
* Ando Kiidron&lt;br /&gt;
* Andres Kepler&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[MoneyG 1.0]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [http://452b.visualstudio.com]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
===Meeskond: Laener===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Kask - programmeerija&lt;br /&gt;
* Marko Nõu - programmeerija&lt;br /&gt;
* Anto Animägi - projektijuht&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Laener]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://kaskmartin.visualstudio.com/Laener]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Vitamin C#===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marko Belzetski&lt;br /&gt;
* Rene Väli&lt;br /&gt;
* Kaia Tomson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Vitamin C#]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://fevertree.visualstudio.com/Vitamiin%20Csharp https://fevertree.visualstudio.com/Vitamiin%20Csharp]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kingalaenutus===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Kristi Saare&lt;br /&gt;
* Kersti Maurer&lt;br /&gt;
* Liisi Taimre&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Kingalaenutus]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;projekti TFS: https://kingalaenutus.visualstudio.com/Kingalaenutus&#039;&#039;&#039;&lt;br /&gt;
NB! Õppejõud lisatud itcollege aadressiga.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Isearve ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Siim Kallari&lt;br /&gt;
* Priit Tiganik&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Isearve]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://isearve.visualstudio.com/IseArve https://isearve.visualstudio.com/IseArve]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: DevHelp===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Martin Jääger (projektijuht)&lt;br /&gt;
* Mikk Erlenheim&lt;br /&gt;
* Kristo Leemets&lt;br /&gt;
Meeskonna koduleht: [[DevHelp]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://devhelp.visualstudio.com/]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Elekter ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Sigrid Aasma&lt;br /&gt;
* Kristo Oidermaa&lt;br /&gt;
* Tiit Post&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Elekter]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://elekter.visualstudio.com/Elekter/ https://elekter.visualstudio.com/Elekter]&lt;br /&gt;
&lt;br /&gt;
Retsensioon: Projekt FoodBytes (TODO)&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Battle2048===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Andrus Seiman&lt;br /&gt;
*Annely Aasalaid&lt;br /&gt;
*Kristjan Peterson&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Battle2048]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: EasyDesk===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marju Pütsepp&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[EasyDesk]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://marjup.visualstudio.com/EasyDesk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Ajamasin===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Liina Hellerma&lt;br /&gt;
* Teele Sepman&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:[[Ajamasin]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://teelesepman.visualstudio.com/Ajamasin/ (https://ajamasin.visualstudio.com/Ajamasin)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Jarvis===&lt;br /&gt;
Liikmed:&lt;br /&gt;
&lt;br /&gt;
* Grigori Palamartšuk - Scrum Master &amp;amp; Product owner&lt;br /&gt;
* Andrei Grigorjev - arendaja&lt;br /&gt;
* Artyom Likhachev - arendaja&lt;br /&gt;
* Maksim Tšeljabov - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [https://wiki.itcollege.ee/index.php/JARVIS Jarvis]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://grigorip.visualstudio.com/Jarvis Jarvis]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
===Meeskond: TikTokTek===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Eva Ibrus&lt;br /&gt;
* Rain Saarmäe&lt;br /&gt;
&#039;&#039;&#039;Meeskonna koduleht&#039;&#039;&#039;&lt;br /&gt;
[[TikTokTek]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TFS&#039;&#039;&#039;&lt;br /&gt;
https://tiktoktek.visualstudio.com&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Rahaplaneerija===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Maila Keerus&lt;br /&gt;
* Kersti Miller&lt;br /&gt;
* Evelin Jõgi&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
[[Rahaplaneerija]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: [https://rahaplaneerija.visualstudio.com/Rahaplaneerija Rahaplaneerija]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;:&lt;br /&gt;
[[Talk:EasyDesk]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;:&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Garden of Towers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Nele Sergejeva&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/Garden_of_Towers&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://gardenoftowers.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: FoodCab===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mario Mustasaar&lt;br /&gt;
* Peeter Ploom&lt;br /&gt;
* Rain Elken&lt;br /&gt;
* Roland Türi&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/FoodCab&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://foodcab.visualstudio.com/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: MyLibrary===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Madis Uudam - projektijuht, arendaja&lt;br /&gt;
* Olle Mikk - arendaja&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: https://mylibrary16.wordpress.com/&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: OnTime ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Tatjana Kruglova&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/OnTime&lt;br /&gt;
&lt;br /&gt;
Projetki TFS: https://ontimekruglova.visualstudio.com/OnTime/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Meeskond: FoodBytes ===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Aet Udusaar&lt;br /&gt;
*Taavi Põder&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht:&lt;br /&gt;
https://wiki.itcollege.ee/index.php/FoodBytes&lt;br /&gt;
&lt;br /&gt;
Projekti TFS: https://foodbytes.visualstudio.com/FoodBytes/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: SeDuM===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Liina Laumets  &lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: SeDuM]]&lt;br /&gt;
&lt;br /&gt;
Projekti TFS:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prototüüp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=113904</id>
		<title>Talk:FoodBytes</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:FoodBytes&amp;diff=113904"/>
		<updated>2016-11-04T12:33:04Z</updated>

		<summary type="html">&lt;p&gt;Saasma: Created page with &amp;quot;Retsensioon:   Meeskond Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post).  Siia tuleb retsensioon FoodBytes projekti kohta.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Retsensioon: &lt;br /&gt;
&lt;br /&gt;
Meeskond Elekter (Sigrid Aasma, Kristo Oidermaa ja Tiit Post).&lt;br /&gt;
&lt;br /&gt;
Siia tuleb retsensioon FoodBytes projekti kohta.&lt;/div&gt;</summary>
		<author><name>Saasma</name></author>
	</entry>
</feed>