Team SPOT

From ICO wiki
Jump to navigationJump to search

Kodutöö aines "Võrgurakendused II: hajussüsteemide ehitamine"

Projekti repositoorium (avaneb ainult liikmetele)

Liikmed

  • Sigrid Pachel
  • Oliver Tiks

Idee

Mõttes on luua spordiklubi(de) veebiteenus ja klientrakendus, mis võimaldaks saada infot pakutavate treeningute kohta, sisestada ja kuvada tunniplaani andmeid, registreerida osalejaid tundidesse ning teha muid asjakohaseid tegevusi nii klubi(de) personalil, liikmetel kui ka juhukasutajatel.

Veebiteenuse analüüs

SPOTi veebiteenus võimaldab saada infot erinevate klubide treeningute kohta ja end neisse registreerida. Kasutaja saab teavet, kus ja millal treeningud toimuvad (tunniplaan), mida treeningus täpsemalt tehakse, mis stiiliga on tegemist, kes on treener, kui palju üks kord maksab jms info. Kasutajakontoga liikmel on võimalik end registreerida soovitud tundi ja hallata oma registreeringuid (muuta, tühistada).

Spordiklubide infot haldavad süsteemi administraatorid, kes saavad lisada, muuta ja kustutada kõike sprodiklubiga seonduvat. Erinevaid treeninguid ja nendega seotud konkreetset infot saavad lisada ja hallata treenerid või spordiklubi esindajad.

Projekti realiseerimiseks kasutame REST arhitektuuri ja ASP.NET MVC Web API tehnoloogiat.

Üldine plaan:

  • esialgu üks kett (laienemise võimalusega)
  • mitu klubi (asukoht, saalid-treeningualad, võimalikud lisatingimused)
  • treeningute info (stiilid ehk kontseptid, litsentsid, …)
  • tunniplaan (aeg, koht, instruktorid, max osalejate arv, ühe korra hind)
  • registratuur (treeningutest osavõtjad)

Kasutajad (rollid):

  • administraatorid (saavad teha muudatusi)
  • treenerid (info kvalifikatsiooni, litsentside kohta, õigus treeninguid lisada)
  • liikmed (saavad treeningutele registreeruda)
  • ülejäänud (näevad klubide ja treeningute infot ning tunniplaani)

Peaks olema:

  • kasutajate loomine
  • kasutajate tuvastamine ja haldamine
  • kasutajate ja kasutusstatistika logimine
  • teenuse poole pöördumiste arvu piiramine ja piirangute haldamine
  • klubide, treenerite ja treeningute info väljastamine
  • tunniplaani info väljastamine
  • treeningutesse registreerimine
  • registreeringu tühistamine

Võiks olla:

  • klubide, treenerite, treeningute lisamine ja muutmine
  • tunniplaanis treeningute tühistamine
  • sisestatud andmete kustutamine (pehmelt)
  • rollide-õiguste määramine (admin)
  • asukohad mitmes riigis
  • kliendipaketid, arveldus
  • kontaktide tsentraliseeritud haldus
  • sisselogimine läbi Google’i, Facebooki vmt teenuse

Andmebaasi skeem (lihtsustatud)

SPOT Service ERD

Märkus: olemite atribuutidest on välja toodud ainult peamised.

Tabelite kirjeldused

Kasutajahaldus*:

  • User - kasutajate andmed
  • Role - rollid, millega määratakse kasutajate õigused ("Admin", "Trainer", ...)
  • UserRole - kasutajate sidumine rolli(de)ga
  • UserLogin - muu teenuse kaudu sisselogimiseks
  • UserClaim - muu teenuse kaudu sisselogimiseks

*Kasutajahalduse süsteem toetub Asp.Net Identity valmislahendusele, mida on täiendanud A. Käver.

Klubid:

  • Chain (optional) - spordiklubikettide info
  • Location - spordiklubi/-rajatise asukoht linna/asula täpsusega
  • Facility - spordiklubi/-rajatise andmed, seotud asukohaga ja vajadusel ketiga.
  • Venue - spordiklubis/-rajatises kasutatavad saalid ja muud treeningualad

Treeningud:

  • Concept (Style) - treeningustiilid ehk kontseptid
  • Licenser (optional) - treeninguliikide litsentsid (kui on)
  • Training - treeninguliikide andmed, seotud stiili ja vajadusel litsentsiga
  • Trainer (User (role: Trainer) + Training) - treeninguliikide sidumine treeneritega

Tunniplaan:

  • ScheduleItem - treeningud tunniplaanis
  • Instructor (User (role: Trainer) + ScheduleItem) - tundide juhendajad (võib olla mitu)
  • Registration (ScheduleItem + User (role: any)) - tundidesse tehtud registreeringud

XML / XSD / XSLT

Projekti esimeses etapis sai loodud XML andmefail, mille ülesehitus on paika pandud XSD skeemifailis. Lisaks on olemas kaks stiilifaili: esimene neist transformeerib andmed HTML-kujule, et kuvada infot veebilehel, teine tekitab samade andmete esitamiseks uue struktuuriga XML faili.

Lae failid alla.

XML

Koodi avamiseks/sulgemiseks klõpsa kõrvaloleval lingil ->

Fail sisaldab andmeid ühes spordiklubis pakutavate treeningute kohta. Andmed on esitatud treeninguliikide kaupa, mille juurde on lisatud ka vastava treeninguliigi tunniplaan. Treeninguliikidel on nimi ja kirjeldus ning vajadusel ära märgitud ka litsents. Failis on eraldi välja toodud treeningustiilid, instruktorid ja ruumid, kus treeningud toimuvad. Iga treeninguliik kuulub ühe või mitme stiili alla. Instruktoritel on tagasiside põhjal saadud hinne. Treeninguruumidel on vaikimisi määratud mahutavus. Tunniplaanis on ära toodud treeningu koht, algusaeg ja kestus ning instruktorid. Vajadusel saab eraldi määrata ka treeningurühma suuruse, kui see erineb tavalisest ruumi mahutavusest. Ka on võimalik treeningutunnile lisada kommentaar. Erinevate elementide andmed on omavahel seotud id-atribuutidega.

XSD

Koodi avamiseks/sulgemiseks klõpsa kõrvaloleval lingil ->

Skeemifail kontrollib eelnevas andmefailis esitatud andmete vastavust kokkulepitud formaadile, samuti õigete andmetüüpide kasutamist. Alamelemendi id-atribuudi väärtus peab olema iga elemendirühma lõikes unikaalne. Kohustuslike elementide ja atribuutide kõrval on ka mõned (nt kommentaar), mille olemasolu pole alati tarvilik. Teatud puhkudel on piiratud maksimaalset elementide arvu (nt treeningutunni algusaeg). Faili üldine struktuur on kindel, aga alati pole alamelementide järjekord oluline (nt treeninguliigi puhul).

XSLT (html)

Koodi avamiseks/sulgemiseks klõpsa kõrvaloleval lingil ->

Selles transformatsioonifailis on kirjeldatud XML failis olevate andmete kuvamise viis veebilehel. Treeninguliigid on jaotatud stiiliblokkidesse (mõni treening kuulub mitme stiili alla). Iga treeninguliigi all on tabeli kujul esitatud tunniplaan ning lisatud näidisvideo ja kirjeldus.

HTML (transformeeritud)

Koodi avamiseks/sulgemiseks klõpsa kõrvaloleval lingil ->

Vaata eelneva transformatsiooni tulemust.

XSLT (xml)

Koodi avamiseks/sulgemiseks klõpsa kõrvaloleval lingil ->

Selle transformatsiooniga luuakse uus XML fail, milles on treeningute andmed esitatud ühtse tunniplaani kujul. Algses failis erinevate elementide alla paigutatud andmed on nüüd tunniplaani alamelemendis kokku viidud. Sidumine on teostatud id-atribuutide abil. Tunniplaanis on ühes kohas kirjas treeningu nimi, stiil(id), koht, algusaeg, kestus, rühma suurus, instruktorid ja muu täiendav info.

XML (transformeeritud)

Koodi avamiseks/sulgemiseks klõpsa kõrvaloleval lingil ->

Vaata eelneva transformatsiooni tulemust.

Klientrakendus

Angular JS single page application eelnevalt kirjeldatud veebiteenusele. Sisse logimata saab kuvada spordiklubi tunniplaani nädalate kaupa, treeninguliike stiilide kaupa ja treenereid. Võimalik on liituda teenusega ja registreeruda treeningutele, samuti registreeringuid tühistada nii otse tunniplaanist kui ka registreeringute lehel. Esialgu põhineb süsteem ühel spordiklubil. Kasutamise eelduseks on tunniplaani olemasolu andmebaasis.

Autentimine on lahendatud tokenipõhiselt. Eeskuju ja põhjana kasutasime näidisrakendust, mille juhend ja lähtekood on leitav siit.

Lähtekood

Eksamiks valminud veebiteenuse ja klientrakenduse kokkupakitult allalaadimiseks klõpsa sellel lingil. WebApi ja Angular JS klient on eraldi lahendustes. Kliendi testimiseks brauseris (Chrome, Firefox vm) tuleb eelnevalt käivitada ka veebiteenus.

NB! Võib juhtuda, et WebApi esmakordsel käivitamisel loodavasse andmebaasi kõiki andmeid (tunniplaani ja registreerimisi jooksvasse nädalasse) ei lisandu. Sellisel juhul kustuta tekkinud andmebaas ja käivita kõigepealt samas lahenduses olev konsoolirakendus.

Retsensioonid

  1. JRT meeskonna XML/XSD/XSLT retsensioon
  2. JRT meeskonna veebiteenuse retsensioon
  3. JRT meeskonna klientrakenduse retsensioon

Log

  • 03.03.17 Esimene kohtumine. Idee.
  • 17.03.17 Osa XMList valmis, osa XSLT-st valmis.
  • 18.03.17 Teine kohtumine. XMLi täiendamine, esimene ülekäimine XSD-s.
  • 19.03.17 XML/XSLT/XSD täiendamine ja lõpetamine.
  • 20.03.17 XML fail, skeemifail ja stiilifailid esitatud. Projekti esimese etapi lõpp. Kevade algus.
  • 26.03.17 XML/XSLT/XSD retsensioon esitatud.
  • 16.04.17 Veebiteenuse analüüsi koostamine.
  • 17.04.17 Esialgne veebiteenuse analüüs ja kavand valmis.
  • 19.04.17 Alustasime veebiteenusega, koostegemine: Domain, DAL, Interfaces, Repostitories. Testimine konsoolis.
  • 24.04.17 Veebiteenuse koostegemine, 2. kord: Domaini täiendamine.
  • 29.04.17 Veebiteenuse koostegemine, 3. kord: Interfaces, Repositories, Factory + UOW. Testimine konsoolis.
  • 01.05.17 Andmebaasi täitmine testandmetega varasemas faasis loodud XML failist.
  • 02.05.17 Veebiteenuse koostegemine, 4. kord: alustasime BLi ja WebApi ehitamist. GET päringud.
  • 09.05.17 Veebiteenuse koostegemine, 5. kord: lisasime Identity.
  • 11.05.17 Veebiteenuse koostegemine, 6. kord: WebApi arendamine. POST, PUT ja DELETE päringud.
  • 15.05.17 Veebiteenuse koostegemine, 7. kord: WebApi arendamine. Lisasime api kontrollereid.
  • 16.05.17 Veebiteenuse koostegemine, 8. kord: WebApi arendamine. Identity kontroll Fiddleri ja Postmaniga.
  • 20.05.17 Klientrakenduse koostegemine, 1. kord. Testklient.
  • 25.05.17 Klientrakenduse koostegemine, 2. kord. Klientrakenduse arendamine. Angular JS alustamine.
  • 01.06.17 Klientrakenduse koostegemine, 3. kord. Klientrakenduse arendamine. Angular JS (katse MVC kontrolleritega).
  • 03.06.17 - 11.06.17 Klientrakenduse arendamine. Üheleherakendus. Tokenipõhine autentimine. Veebiteenuse viimistlemine.
  • 11.06.17 Lõpptähtaeg. Projekti esitlemine eksamil.
  • 12.06.17 Teiste lahenduste retsenseerimine.
  • 13.06.17 Veebiteenuse ja klientrakenduse retsensioonid esitatud. Selleks korraks kõik.