BeerPressure: Difference between revisions
Line 88: | Line 88: | ||
Params: - | Params: - | ||
Returns: List<PromotionDTO> | |||
'''/api/v1/Promotions/{id}''' | '''/api/v1/Promotions/{id}''' | ||
Line 94: | Line 94: | ||
Params: int id | Params: int id | ||
Returns: PromotionDTO | |||
'''/api/v1/Promotions''' | '''/api/v1/Promotions''' | ||
Line 100: | Line 100: | ||
Params: PromotionDTO | Params: PromotionDTO | ||
Returns: PromotionDTO | |||
'''/api/v1/Promotions/{id}''' | '''/api/v1/Promotions/{id}''' | ||
Line 106: | Line 106: | ||
Params: int id, PromotionDTO | Params: int id, PromotionDTO | ||
Returns: - | |||
'''/api/v1/Promotions/{id}''' | '''/api/v1/Promotions/{id}''' | ||
Line 112: | Line 112: | ||
Params: int id | Params: int id | ||
Returns: - | |||
Line 119: | Line 119: | ||
Params: - | Params: - | ||
Returns: List<RestaurantDTO> | |||
'''/api/v1/Restaurants/search?name=th''' | '''/api/v1/Restaurants/search?name=th''' | ||
Line 125: | Line 125: | ||
Params: string name | Params: string name | ||
Returns: List<RestaurantDTO> | |||
'''/api/v1/Restaurants/{id}''' | '''/api/v1/Restaurants/{id}''' | ||
Line 131: | Line 131: | ||
Params: int id | Params: int id | ||
Returns: RestaurantDTO | |||
'''/api/v1/Restaurants/{userId}''' | '''/api/v1/Restaurants/{userId}''' | ||
Line 137: | Line 137: | ||
Params: int userId | Params: int userId | ||
Returns: List<RestaurantDTO> | |||
'''/api/v1/Restaurants''' | '''/api/v1/Restaurants''' | ||
Line 143: | Line 143: | ||
Params: RestaurantDTO | Params: RestaurantDTO | ||
Returns: RestaurantDTO | |||
'''/api/v1/Restaurants/{id}''' | '''/api/v1/Restaurants/{id}''' | ||
Line 149: | Line 149: | ||
Params: int id, RestaurantDTO | Params: int id, RestaurantDTO | ||
Returns: - | |||
'''/api/v1/Restaurants/{id}''' | '''/api/v1/Restaurants/{id}''' | ||
Line 155: | Line 155: | ||
Params: int id | Params: int id | ||
Returns: - | |||
Line 162: | Line 162: | ||
Params: - | Params: - | ||
Returns: List<UserDTO> | |||
'''/api/v1/Users/{id}''' | '''/api/v1/Users/{id}''' | ||
Line 168: | Line 168: | ||
Params: int id | Params: int id | ||
Returns: UserDTO | |||
'''/api/v1/Users''' | '''/api/v1/Users''' | ||
Line 174: | Line 174: | ||
Params: UserDTO | Params: UserDTO | ||
Returns: UserDTO | |||
'''/api/v1/Users/{id}''' | '''/api/v1/Users/{id}''' | ||
Line 180: | Line 180: | ||
Params: int id, UserDTO | Params: int id, UserDTO | ||
Returns: - | |||
'''/api/v1/Users/deactivate/{id}''' | '''/api/v1/Users/deactivate/{id}''' | ||
Line 186: | Line 186: | ||
Params: int id | Params: int id | ||
Returns: - | |||
'''/api/v1/Users/{id}''' | '''/api/v1/Users/{id}''' | ||
Line 192: | Line 192: | ||
Params: int id | Params: int id | ||
Returns: - | |||
Line 199: | Line 199: | ||
Params: - | Params: - | ||
Returns: List<MenuDTO> | |||
'''/api/v1/Menus/{id}''' | '''/api/v1/Menus/{id}''' | ||
Line 205: | Line 205: | ||
Params: int id | Params: int id | ||
Returns: MenuDTO | |||
'''/api/v1/Menus''' | '''/api/v1/Menus''' | ||
Line 211: | Line 211: | ||
Params: MenuDTO | Params: MenuDTO | ||
Returns: MenuDTO | |||
'''/api/v1/Menus/{id}''' | '''/api/v1/Menus/{id}''' | ||
Line 217: | Line 217: | ||
Params: int id, MenuDTO | Params: int id, MenuDTO | ||
Returns: - | |||
'''/api/v1/Menus/{id}''' | '''/api/v1/Menus/{id}''' | ||
Line 223: | Line 223: | ||
Params: int id | Params: int id | ||
Returns: - | |||
Line 230: | Line 230: | ||
Params: - | Params: - | ||
Returns: List<DishDTO> | |||
'''/api/v1/Dishes/Daily''' | '''/api/v1/Dishes/Daily''' | ||
Line 236: | Line 236: | ||
Params: - | Params: - | ||
Returns: List<DishDTO> | |||
'''/api/v1/Dishes/search?title=th''' | '''/api/v1/Dishes/search?title=th''' | ||
Line 242: | Line 242: | ||
Params: string title | Params: string title | ||
Returns: List<DishDTO> | |||
'''/api/v1/Dishes/Top''' | '''/api/v1/Dishes/Top''' | ||
Line 248: | Line 248: | ||
Params: int amount | Params: int amount | ||
Returns: List<DishDTO> | |||
'''/api/v1/Dishes/Price''' | '''/api/v1/Dishes/Price''' | ||
Line 254: | Line 254: | ||
Params: decimal priceLimit | Params: decimal priceLimit | ||
Returns: List<DishDTO> | |||
'''/api/v1/Dishes/{id}''' | '''/api/v1/Dishes/{id}''' | ||
Line 260: | Line 260: | ||
Params: int id | Params: int id | ||
Returns: DishDTO | |||
'''/api/v1/Dishes''' | '''/api/v1/Dishes''' | ||
Line 266: | Line 266: | ||
Params: DishDTO | Params: DishDTO | ||
Returns: DishDTO | |||
'''/api/v1/Dishes/{id}''' | '''/api/v1/Dishes/{id}''' | ||
Line 272: | Line 272: | ||
Params: int id, DishDTO | Params: int id, DishDTO | ||
Returns: - | |||
'''/api/v1/Dishes/{id}''' | '''/api/v1/Dishes/{id}''' | ||
Line 278: | Line 278: | ||
Params: int id | Params: int id | ||
Returns: - | |||
Line 285: | Line 285: | ||
Params: - | Params: - | ||
Returns: List<IngredientDTO> | |||
'''/api/v1/Ingredients/{id}''' | '''/api/v1/Ingredients/{id}''' | ||
Line 291: | Line 291: | ||
Params: int id | Params: int id | ||
Returns: IngredientDTO | |||
'''/api/v1/Ingredients''' | '''/api/v1/Ingredients''' | ||
Line 297: | Line 297: | ||
Params: IngredientDTO | Params: IngredientDTO | ||
Returns: IngredientDTO | |||
'''/api/v1/Ingredients/{id}''' | '''/api/v1/Ingredients/{id}''' | ||
Line 303: | Line 303: | ||
Params: int id, IngredientDTO | Params: int id, IngredientDTO | ||
Returns: - | |||
'''/api/v1/Ingredients/{id}''' | '''/api/v1/Ingredients/{id}''' | ||
Line 309: | Line 309: | ||
Params: int id | Params: int id | ||
Returns: - | |||
Line 316: | Line 316: | ||
Params: int dishId | Params: int dishId | ||
Returns: DishDTO, int dishRating | |||
'''/api/v1/Ratings/Restaurant/{id}''' | '''/api/v1/Ratings/Restaurant/{id}''' | ||
Line 322: | Line 322: | ||
Params: int restaurantId | Params: int restaurantId | ||
Returns: RestaurantDTO, int restaurantRating | |||
'''/api/v1/Ratings/Dish/{id}''' | '''/api/v1/Ratings/Dish/{id}''' | ||
Line 328: | Line 328: | ||
Params: int dishRating | Params: int dishRating | ||
Returns: DishDTO, int dishRating | |||
'''/api/v1/Ratings/Restaurant/{id}''' | '''/api/v1/Ratings/Restaurant/{id}''' | ||
Line 334: | Line 334: | ||
Params: int restaurantRating | Params: int restaurantRating | ||
Returns: RestaurantDTO, int restaurantRating | |||
Line 341: | Line 341: | ||
Params: LoginViewModel | Params: LoginViewModel | ||
Returns: token | |||
'''/api/v1/Account/register''' | '''/api/v1/Account/register''' | ||
Line 347: | Line 347: | ||
Params: RegisterViewModel | Params: RegisterViewModel | ||
Returns: token | |||
'''/api/v1/Account/logout''' | '''/api/v1/Account/logout''' | ||
Line 353: | Line 353: | ||
Params: - | Params: - | ||
Returns: - | |||
Line 360: | Line 360: | ||
Params: role | Params: role | ||
Returns: - | |||
== Lõpptoote kasutusjuhend == | == Lõpptoote kasutusjuhend == |
Revision as of 16:33, 20 May 2018
Meeskond ja rollid
- Sigrid Aasma (arendaja)
- Evelin Jõgi (arendaja)
- Martin Kask (projektijuht, arendaja)
- Marko Nõu (arendaja)
Idee
Toidukohtade põhimenüüde ja päevapakkumiste teenus
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.
Esialgne prototüüp: navigeeritav versioon
Kasutatav arendustehnoloogia
Veebiteenuse loomisel kasutame ASP.NET Core tehnoloogiat ja kursusel õpitud arendusmustreid.
Klientrakenduse loomisel kasutame Node.js + React'i.
Veebiteenuse analüüs
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.
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.
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.
Teenuse must-have funktsionaalsus tagab teenuse toimimise ja põhifunktsioonid. Teenuse nice-to-have funktsionaalsus annab rakendusele lisandväärtust.
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.
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.
Kasutajad
- Admin - lehe administraator, kellel on õigus lehte, kasutajaid ja nende õiguseid hallata. Tema huvi on, et teenus toimiks tõrgeteta.
- Toiduasutus (tasuta kasutaja) - saab hoida lehel ühte põhimenüüd ja päevapakkumisi.
- Toiduasutus (tellimusega kasutaja) - saab hoida lehel piiramatu arv põhimenüüsid ja päevapakkumisi.
Toiduasutused on teenusest huvitatud, et nende menüüde haldamine oleks kerge ja mugav ning nad saaksid oma klientide arvu suurendada.
- 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.
Rakenduse must-have funktsionaalsus
- Kasutajad saavad sisse logida
- Kasutajatel on erinevad rollid: admin, toidukoht (tasuta ja tasulise tellimusega), klient
- Kasutajate arvepidamine kasutajate lõikes:
- sisselogimise kuupäev, kellaaeg
- pakkumiste lisamine
- pakkumiste muutmine
- pakkumiste kustutamine
- õiguste kehtimise periood (tasuta ja tellimusega toidukoht)
- pakkumistele klikkimise arv
- Kasutajaid on võimalik hallata:
- kasutajale õiguste andmine (menüüde arvu suurendamine, tellimusega toidukohal), rolli määramine
- Kasutajat on võimalik piirata: õiguseid piirata (piiratud menüüde arv, tasuta liitunud toidukohal) ja lukku panna
- Päevapakkumisi/menüüsid saab küsida:
- toidukoha järgi,
- kuupäeva põhiselt (ainult päevapakkumisi),
- asukoha põhiselt,
- toidu nimetuses esineva otsisõna/otsisõna osa põhiselt,
- hinna põhiselt (max hinna piirang).
- Klientrakenduses realiseeritakse CRUD meetodid (menüüsid/päevapakkumisi saab sisestada, lugeda, uuendada, kustutada)
- Toidukohale saab anda hindeid ja kuvatakse keskmist hinnet.
- Toidule saab anda hindeid ja kuvatakse keskmist hinnet.
Nice-to-have funktsionaalsus
- Info selle kohta, kas päevapakkumine on otsas
- Päevapakkumisi/menüüsid saab kommenteerida ja neid kommentaare kuvatakse avalikult.
- Söögikohtade kodulehtedelt otsimise script, mis genereerib juba olemasolevate kodulehtede baasil päevamenüüsid.
- Toiduvaliku piiramine allergeenide/vegan/jms. koostisosade põhiselt.
- Aruandlused ja võrdlused toidukohtadele, et võrrelda end konkurentidega.
- Teenus soovitab toidukohtadele nende varasemate päevapraadide populaarsuse alusel uue nädala menüüd.
- Erinevad toidukohtade/toitude pingeread klientidele, et anda valikuteks ideid.
- Soovitused klientidele, mida teised kliendid sarnaste eelistustega on veel valinud.
Andmebaasi ülesehitus
API v1 dokumentatsioon
/api/v1/Promotions
GET /api/v1/Promotions
Params: -
Returns: List<PromotionDTO>
/api/v1/Promotions/{id}
GET /api/v1/Promotions/{id}
Params: int id
Returns: PromotionDTO
/api/v1/Promotions
POST /api/v1/Promotions
Params: PromotionDTO
Returns: PromotionDTO
/api/v1/Promotions/{id}
PUT /api/v1/Promotions/{id}
Params: int id, PromotionDTO
Returns: -
/api/v1/Promotions/{id}
DELETE /api/v1/Promotions/{id}
Params: int id
Returns: -
/api/v1/Restaurants
GET /api/v1/Restaurants
Params: -
Returns: List<RestaurantDTO>
/api/v1/Restaurants/search?name=th
GET /api/v1/Restaurants/search?name=th
Params: string name
Returns: List<RestaurantDTO>
/api/v1/Restaurants/{id}
GET /api/v1/Restaurants/{id}
Params: int id
Returns: RestaurantDTO
/api/v1/Restaurants/{userId}
GET /api/v1/Restaurants/{userId}
Params: int userId
Returns: List<RestaurantDTO>
/api/v1/Restaurants
POST /api/v1/Restaurants
Params: RestaurantDTO
Returns: RestaurantDTO
/api/v1/Restaurants/{id}
PUT /api/v1/Restaurants/{id}
Params: int id, RestaurantDTO
Returns: -
/api/v1/Restaurants/{id}
DELETE /api/v1/Restaurants/{id}
Params: int id
Returns: -
/api/v1/Users
GET /api/v1/Users
Params: -
Returns: List<UserDTO>
/api/v1/Users/{id}
GET /api/v1/Users/{id}
Params: int id
Returns: UserDTO
/api/v1/Users
POST /api/v1/Users
Params: UserDTO
Returns: UserDTO
/api/v1/Users/{id}
PUT /api/v1/Users/{id}
Params: int id, UserDTO
Returns: -
/api/v1/Users/deactivate/{id}
PUT /api/v1/Users/deactivate/{id}
Params: int id
Returns: -
/api/v1/Users/{id}
DELETE /api/v1/Users/{id}
Params: int id
Returns: -
/api/v1/Menus
GET /api/v1/Menus
Params: -
Returns: List<MenuDTO>
/api/v1/Menus/{id}
GET /api/v1/Menus/{id}
Params: int id
Returns: MenuDTO
/api/v1/Menus
POST /api/v1/Menus
Params: MenuDTO
Returns: MenuDTO
/api/v1/Menus/{id}
PUT /api/v1/Menus/{id}
Params: int id, MenuDTO
Returns: -
/api/v1/Menus/{id}
DELETE /api/v1/Menus/{id}
Params: int id
Returns: -
/api/v1/Dishes
GET /api/v1/Dishes
Params: -
Returns: List<DishDTO>
/api/v1/Dishes/Daily
GET /api/v1/Dishes/Daily
Params: -
Returns: List<DishDTO>
/api/v1/Dishes/search?title=th
GET /api/v1/Dishes/search?title=th
Params: string title
Returns: List<DishDTO>
/api/v1/Dishes/Top
GET /api/v1/Dishes/Top
Params: int amount
Returns: List<DishDTO>
/api/v1/Dishes/Price
GET /api/v1/Dishes/Price
Params: decimal priceLimit
Returns: List<DishDTO>
/api/v1/Dishes/{id}
GET /api/v1/Dishes/{id}
Params: int id
Returns: DishDTO
/api/v1/Dishes
POST /api/v1/Dishes
Params: DishDTO
Returns: DishDTO
/api/v1/Dishes/{id}
PUT /api/v1/Dishes/{id}
Params: int id, DishDTO
Returns: -
/api/v1/Dishes/{id}
DELETE /api/v1/Dishes/{id}
Params: int id
Returns: -
/api/v1/Ingredients
GET /api/v1/Ingredients
Params: -
Returns: List<IngredientDTO>
/api/v1/Ingredients/{id}
GET /api/v1/Ingredients/{id}
Params: int id
Returns: IngredientDTO
/api/v1/Ingredients
POST /api/v1/Ingredients
Params: IngredientDTO
Returns: IngredientDTO
/api/v1/Ingredients/{id}
PUT /api/v1/Ingredients/{id}
Params: int id, IngredientDTO
Returns: -
/api/v1/Ingredients/{id}
DELETE /api/v1/Ingredients/{id}
Params: int id
Returns: -
/api/v1/Ratings/Dish/{id}
GET /api/v1/Ratings/Dish/{id}
Params: int dishId
Returns: DishDTO, int dishRating
/api/v1/Ratings/Restaurant/{id}
GET /api/v1/Ratings/Restaurant/{id}
Params: int restaurantId
Returns: RestaurantDTO, int restaurantRating
/api/v1/Ratings/Dish/{id}
POST /api/v1/Ratings/Dish/{id}
Params: int dishRating
Returns: DishDTO, int dishRating
/api/v1/Ratings/Restaurant/{id}
POST /api/v1/Ratings/Restaurant/{id}
Params: int restaurantRating
Returns: RestaurantDTO, int restaurantRating
/api/v1/Account/login
POST /api/v1/Account/login
Params: LoginViewModel
Returns: token
/api/v1/Account/register
POST /api/v1/Account/register
Params: RegisterViewModel
Returns: token
/api/v1/Account/logout
POST /api/v1/Account/logout
Params: -
Returns: -
/api/v1/Account/addRole
POST /api/v1/Account/addRole
Params: role
Returns: -
Lõpptoote kasutusjuhend
TODO
Logiraamat
07.02.2018
Gupi loomine ning suhtluskanali seadistamine
24.03.2018
Trello boardi loomine
25.03.2018
Wiki lehe loomine. Esimene tõsisem projekti koosolek ning tegevuskava paika panemine.
26.03.2018
Alustasime veebiteenuse analüüsiga ja funktsionaalsuse kirjeldamisega.
27.03.2018
Täiendasime veebiteenuse analüüsi.
Esmase andmebaasi mudeli koostamine.
Postitatud esimeste analüüsi arutelude põhjal valminud algne prototüüp.
30.03.2018
Valmis andmebaasimudel.
08.04.2018
Tehtud muudatused analüüsis vastavalt tagasisidele.
19.04.2018
Loodud projekti põhi koos domeenimudelitega. Projekt lisatud Githubi: https://github.com/sikumiku/TaisKohtApi