LuckyYou: Difference between revisions
Line 59: | Line 59: | ||
== QSEE andmebaasiskeem == | == QSEE andmebaasiskeem == | ||
[[File: | [[File:Luckyyoudbnew.png|800px|LUCKYYOU]] | ||
== XML osa == | == XML osa == |
Revision as of 22:43, 5 May 2016
Meeskond ja rollid
- Tanel Vähk - Projektijuht
- Aleks Luik
- Melissa Eenmaa
- Taavi Kliss
Idee
Meie idee on luua loosimisi vahendav veebirakendus LuckyYou, kasutades C# keelt.
Rakenduses on kasutajateks meie kliendid (ehk firmad, kes loosimisi teevad) ning tavakasutajad, kes loosimisi jagavad. Klientidel on võimalik lisada mitmeid loosimisi ning tavakasutajad võivad end registreerida, reklaame jagades, limiteerimata arvule loosimistele.
Loosimise eest esitatakse kliendile tähtajaline arve, sõltuvalt loosimise pikkusest, reklaami suurusest ning prioriteedist. Tavakasutajate jaoks on osalemine, ehk loosimiste jagamine, tasuta. Jagamine toimub e-maili või Facebooki kaudu.
Igal loosimisel on teada: loosi algataja, toode, toote üldine kategooria, alguskuupäev, lõpukuupäev, kui palju tooteid loositakse, mis vanusegrupile on tooted mõeldud. Info loosimisele minevate toodete kohta lisatakse andmebaasi (Näiteks: Lisan toote nimega Merida Xsport, tüübiks panen jalgratas).
Andmebaasi märgitakse ka kõik võidud, et oleks võimalik jälgida ajalugu. Samuti on olemas pingerida võitudest ning loosimises osalemistest.
Kasutatav .NET tehnoloogia
C# ning SOAP (WCF tehnoloogia) või REST (ASP.NET Web API).
Analüüs
Rakendus on eelkõige mõeldud firmadele, kes loosivad asju ning loosimistes osaleda soovijatele. Tahame luua rakenduse, mis lihtsustaks loosimiste korraldamist ning neis osalemist, kuna see on viimasel ajal Facebookis väga populaarne. Rakendus vahendabki loosimisi Facebooki ja inimeste vahel, või siis e-maili teel. Kuna kõik loosimistega seonduv on ühes kohas koos, on lihtsam neid jälgida, kui Facebooki seinal, kus need teiste asjade vahele ära kaovad. Klientidel on lihtne oma loosimise kohta andmeid sisestada ning kõik loosimised on lihtsalt leitavad, seega on ka tavakasutajal mugav neis osaleda, mis tähendab suuremat osalejate arvu ning seega ka paremat reklaami firmadele.
Rakenduse funktsionaalsus kliendina: Kui firma soovib korraldada loosimise, sisestab ta rakendusse vajaliku info nii toote kui ka loosimise detailide kohta. Talle esitatakse arve vastavalt loosimise kestusest, reklaami suurusest ja prioriteedist (kui määrata loosimise prioriteediks 1, siis reklaam kuvatakse kõige esimesena). Pärast loosimise lisamist, on kõigil kasutajatel võimalik seda lihtsasti leida. Klient määrab, mis ajani loosimine kestab ning avaldab võitja.
Rakenduse funktsionaalsus tavakasutajana: Kui tavaline kasutaja soovib osaleda loosimises, jagab ta lihtsalt vastavat reklaami ning ongi sellega loosimisele registreeritud. Loosimisi saab otsida kategooriate või märksõnade järgi ning piirangut, kui paljudes osaleda, ei ole. Võidu korral saab kasutaja teavituse.
Rakenduse sisu
Rakenduses on olemas järgmised võimalused (Must have):
- 1. Meil on kasutajad – admin, klient (firma, kes lisab loosimised), kasutaja (kes jagab loosimisi)
- 2. Kasutajal on võimalus registeerida ühele kuni mitmele loosimisele.
- 3. Kliendil on võimalus lisada loosimisi.
- 4. Klient saab lisada tooteid andmebaasi, mis lähevad peagi loosimistele. Tootel on nimi, ja tüüp. Näiteks: Lisan toote nimega Merida Xsport, tüübiks panen jalgratas.
- 5. Loosimistel on üldisemad kategooriad – pudipadi, spordiesemed, reisid jne.
- 6. Igal loosimisel on teada: * loosi algataja * toode, mis osaleb loosimisel * üldisem kategooria, kuhu toode kuulub * algus kuupäev * kaua kestab * kui palju tooteid loositakse * mis vanuses on tooted mõeldud.
- 7. Loosimisese eest esitakse arve. Arve suurus sõltub loosimise pikkusest, loosimisala reklaami suurusest, loosimisala prioriteedi määramisest ( kui määrata loosimise prioriteediks 1, siis reklaam kuvatakse kõige esimesena).
- 8. Arvel on tähtaaeg, mis ajaks tuleb maksta ära.
- 9. Meie andmebaasi lisatakse kõik võidud, et saaks jälgida võitude ajalugu.
- 10. Võitudest ja loosimistest osalemistest moodustatakse pingerida.
Rakenduses võiksid olla lisavõimalused (Should have):
- 1. Kasutajale on võimalik teavitus võidust saata.
- 2. Kasutaja näeb palju on aega mingi loosimise lõpuni jäänud.
- 3. Kliendil on võimalik näha, millal loosimine lõpeb ja kes on võidu saanud.
- 4. Võimalik on lisada loosiauhinna kättesaamise asukoht.
- 5. Klient saab lülituda ümber kasutajaks, et samuti loosmistest osa võtta.
- 6. Loosimisi on võimalik jagada facebooki kaudu või emaili kaudu.
QSEE andmebaasiskeem
XML osa
XML-is talletatakse informatsiooni loosimiste kohta (ehk reklaamid kogu infoga auhindadest, mida osalemiseks teha jne).
XML Fail
<?xml version="1.0" encoding="utf-8" ?> <Draws> <Draw Name="iPhone 5s loosimine" Company="Apple" Duration="10.01.16-10.02.16" Page-Position="1"> <Description><![CDATA[Loosi läheb iPhone 5s. Jaga ning võida!]]></Description> <DrawPrice Name="Lenovo sülearvuti" Quantity="1"> <Category><![CDATA[Elektroonika]]></Category> </DrawPrice> <Regulations> <Rule Clause="Jaga oma seinal!"> <RuleExtra><![CDATA[Jagamine peab olema avalik]]></RuleExtra> </Rule> <Rule Clause="Lisa pildi alla kommentaar!"> <RuleExtra><![CDATA[Kommenteeri pilti: "Apple Eesti"]]></RuleExtra> </Rule> <Rule Clause="Jagamisel nõustud kampaania reeglitega!"></Rule> </Regulations> <ImageUrl>http://drop.ndtv.com/TECH/product_database/images/918201370949PM_635_iPhone-5s.jpeg</ImageUrl> </Draw> <Draw Name="Lõhnakomplekt Escada Horse in the Field" Company="Escada" Duration="10.01.16-10.02.16" Page-Position="0"> <Description><![CDATA[Loosi läheb kolm lõhnakomplekti Escada Horse in the Field]]></Description> <DrawPrice Name="Lenovo sülearvuti" Quantity="3"> <Category><![CDATA[Ilutooted]]></Category> </DrawPrice> <Regulations> <Rule Clause="Jaga oma seinal!"> <RuleExtra><![CDATA[Jagamine peab olema avalik]]></RuleExtra> </Rule> <Rule Clause="Lisa pildi alla kommentaar!"> <RuleExtra><![CDATA[Kommenaar peab sisaldama lauset:"Hobused põllul!]]></RuleExtra> <RuleExtra><![CDATA[Lisa kommentaari kolme sõbra nimed!]]></RuleExtra> </Rule> <Rule Clause="Jagamisel nõustud kampaania reeglitega!"></Rule> </Regulations> <ImageUrl>http://www.punmiris.com/himg/o.32787.jpg</ImageUrl> </Draw> <Draw Name="Electronicsi kevadloos" Company="Electronics" Duration="10.03.26-20.03.16" Page-Position="1"> <Description><![CDATA[Loosi läheb 1 Lenovo sülearvuti ja 2 Philips]]> </Description> <DrawPrice Name="Lenovo sülearvuti" Quantity="1"> <Category><![CDATA[Elektroonika]]></Category> </DrawPrice> <DrawPrice Name="Philips MP3" Quantity="2"> <Category><![CDATA[Elektroonika]]></Category> </DrawPrice> <Regulations> <Rule Clause="Jaga oma seinal!"> <RuleExtra><![CDATA[Jagamine peab olema avalik]]></RuleExtra> </Rule> <Rule Clause="Lisa pildi alla kommentaar!"> <RuleExtra><![CDATA[Kommenaar peab sisaldama lauset:"MINA VÕIDAN!"]]></RuleExtra> </Rule> <Rule Clause="Jagamisel nõustud kampaania reeglitega!"></Rule> </Regulations> <ImageUrl>http://www.lenovo.com/images/gallery/1060x596/lenovo-laptop-ideapad-y410p-front-1.jpg</ImageUrl> </Draw> <Draw Name="Sportlandi rattaloos!" Company="Sportland" Duration="10.03.26-20.03.16" Page-Position="1"> <Description><![CDATA[Loosi läheb kolm maastikuratast Scott.]]></Description> <DrawPrice Name="Scott maastikuratas" Quantity="3"> <Category><![CDATA[Elektroonika]]></Category> </DrawPrice> <Regulations> <Rule Clause="Tee pilti endast koos rattaga"> <RuleExtra><![CDATA[Pilti tuleb jagada meie kommentaariumis]]></RuleExtra> </Rule> <Rule Clause="Jaga oma seinal!"> <RuleExtra><![CDATA[Jagamine peab olema avalik]]></RuleExtra> </Rule> <Rule Clause="Lisa pildi alla kommentaar!"> <RuleExtra><![CDATA[Kommenaar peab sisaldama lauset:"Sõidan rattaga!"]]></RuleExtra> </Rule> <Rule Clause="Jagamisel nõustud kampaania reeglitega!"></Rule> </Regulations> <ImageUrl>http://s.kodusoov.ee/images/listings/2016-02/ratas_scale_70-1456687425-43-e.jpg</ImageUrl> </Draw> </Draws>
XML Skeemifail
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Draws"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Draw"> <xs:complexType> <xs:sequence> <xs:element name="Description" type="xs:string" /> <xs:element maxOccurs="unbounded" name="DrawPrice"> <xs:complexType> <xs:sequence> <xs:element name="Category" type="xs:string" /> </xs:sequence> <xs:attribute name="Name" type="xs:string" use="required" /> <xs:attribute name="Quantity" type="xs:unsignedByte" use="required" /> </xs:complexType> </xs:element> <xs:element name="Regulations"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="Rule"> <xs:complexType> <xs:sequence minOccurs="0"> <xs:element maxOccurs="unbounded" name="RuleExtra" type="xs:string" /> </xs:sequence> <xs:attribute name="Clause" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ImageUrl" type="xs:string" /> </xs:sequence> <xs:attribute name="Name" type="xs:string" use="required" /> <xs:attribute name="Company" type="xs:string" use="required" /> <xs:attribute name="Duration" type="xs:string" use="required" /> <xs:attribute name="Page-Position" type="xs:unsignedByte" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XSLT
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="html" indent="yes"/> <xsl:template match="/"> <html> <head> <title>Loosimised</title> </head> <body> <xsl:for-each select="/Draws/Draw"> <h1> <xsl:value-of select="@Name"/> - <xsl:value-of select="@Company"/> </h1> <h2> <xsl:value-of select="Description"/> </h2> <ul> <xsl:for-each select="Regulations/Rule"> <li> <xsl:value-of select="@Clause"/> </li> <ul> <xsl:for-each select="RuleExtra"> <li> <xsl:value-of select="."/> </li> </xsl:for-each> </ul> </xsl:for-each> </ul> <img> <xsl:attribute name="src"> <xsl:value-of select="ImageUrl"/> </xsl:attribute> </img> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
Retsensioonid
XML retsensioon TRAVO 2.0
Uurisime ning analüüsisime põgusalt meeskond Travo 2.0 XML faili ning teisi sellega vajalikke seotud faile ning tegime kokkuvõtte praegusest projekti staadiumist.
Vastavalt nõuetele on olemas XML fail andmete edastamiseks. XML fail andmete edastamiseks on ülesehitatud korrektselt ning arusaadavalt jaotatud tabeliteks. Paraku ei vastanud aga XML faili sisu nõuetele. Loogilisi dimensioone on kolm, ühe võrra nõutust vähem. (School -> Groups/Students/Courses -> Group/Student/Course). See aga tähendab seda, et kõik dimensioonid peavad olema rohkemate attribuutidega kui ainult id, mis aga reaalsuses ei kajastu. Ainult viimases dimensioonis on rohkem attribuute kui id. Muidu tabelid on omavahel Primary key’dega kenasti seotud, kuid XML failis olevate tabelite ülesehitus üleüldiselt on väga lihtsakoeline. Samuti on puudus kommentaaridest. Kommenteeritud on ainult tabelite pealkirjad, millest jääb natuke väheks, aga kuna tabelid ning seal olevad kirjed on üsna ühetimõistetavalt nimetatud, siis ei teinud kommentaaride puudumine koodi lugemist eriliselt raskemaks.
Mis aga jääb kohe silma, on XML faili skeemifaili puudumine. Puudust märkasime kohe meeskonna Wiki lehe sisukorras, kuid ka reaalsuses seda polnud (seisuga 25.03.2016). Seetõttu pole meil võimalik veel tagasisidet anda sellelt kohalt.
Vastavalt juhendile on olemas vähemalt kaks sobivat XSL transormatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks - nendeks on XSD ning XSLT failid. Neist esimeses on asjakohaselt kasutatud erinevaid tingimuste kontrolle vastavalt lahtrile/tabelile. Näiteks kasutatakse Groups tabelis Group Name’is sisestuse pikkust (minLength - maxLength). Teises ehk XSLT transformatsioonis on mitmetes vajalikes kohtades kasutatud for-each klauslit, mis on hea.
XML retsensioon KÕNÕTRAAT
Uurisime ning analüüsisime põgusalt meeskond Kõnõtraat XML faili ning teisi sellega vajalikke seotud faile ning tegime kokkuvõtte praegusest projekti staadiumist.
Vastavalt nõuetele on olemas XML fail andmete edastamiseks. XML fail andmete edastamiseks on ülesehitatud korrektselt ning arusaadavalt trepitud. Samuti vastab failisisu nõuetele, kuid seda osaliselt. Loogilisi dimensioone on 4 ehk vastas nõuetele. (Events -> Event -> Contacts -> Contact). See aga tähendab seda, et ainult üks dimensiooni võib olla selline, kus on ainult id attribuut, mis aga reaalsuses ei kajastu. Ainult kahes dimensioonis on rohkem attribuute kui id, Event’is ja Contact’is. Tabelite sidumine omavahel Primary key’dega on samuti nõrk, kuna eksisteerib ainult kaks tabelit (Events ja Contacts) ning XML faili ülesehitus üleüldiselt on väga lihtsakoeline. Samuti puudusid kommentaarid täielikult.
Mis aga jäi kohe silma, oli XML faili skeemifaili puudumine. Puudust märkasime kohe meeskonna Wiki lehe sisukorras, kuid ka reaalsuses seda polnud (seisuga 25.03.2016). Seetõttu pole meil võimalik veel tagasisidet anda sellelt kohalt.
Vastavalt juhendile pidi olema olemas vähemalt kaks sobivat XSL transormatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks - antud projektil on ainult üks (seisuga 25.03.2016). Kuigi meeskond on nimetanud seda faili XSLT failiks, on see reaalsuses tegelikult XSD fail. Vähesel määral on sealsed attribuudid tingimustega kontrollitud (on muudetud väljade täitmine kohustuslikuks, use =”required”).
Blogi
- 03.02 - Tiimi loomine.
- 23.02 - Facebooki grupi loomine, idee leidmine.
- 25.02 - Esimene kokkusaamine. Alustasime andmebaasi skeemi loomisega QSEEs.
- 03.03 - Teine kokkusaamine. Lõpetasime andmebaasi skeemi QSEEs ning alustasime XML loomist.
- 07.03 - Lõime Wiki lehe ning seletasime lahti projekti idee.
- 09.03 - Kolmas kokkusaamine. Lõpetasime XML ja ühendasime projekti Team Foundationiga.
- 10.03 - Jagasime ülesanded liikmete vahel: Tanel - projekti algus ehk kõik valmis kuni repositooriumiteni, Melissa - Repositories and Interfaces, Aleks - Dependency Injection and UOW, Taavi - API algus.