LuckyYou

From EIK wiki

Veebiteenus ja klientrakendus

VEEBITEENUSE JA KLIENTRAKENDUSE SAAB ALLA LAADIDA LINGILT:

Lucky You veebiteenus ja klientrakendus

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), tavakasutajad, kes loosimisi jagavad ning administraatorid, kes rakendust haldavad. Klientidel on võimalik lisada mitmeid loosimisi. 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.

24.05.2016

Idee on teha veebiteenus, mis võimaldab tulevikus Facebookiga ühendamist ning selle kaudu looside korraldamist. Hetkel lisatakse kasutajad ja loosimised läbi veebiteenuse.

Kasutatav .NET tehnoloogia

C# ning 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.



25.05.2016

Must Have

ADMIN:

  • Teha CRUD meetodeid (create, read, update, delete).
  • Näha kõiki arveid.
  • Näha teatud kasutaja arvet.
  • Näha kõiki kasutajaid, kes osalevad mingis loosimises.
  • Anda administraatori õiguseid.
+ tavakasutaja funktsioonid

KLIENT:

  • Vaadata enda arveid.
  • Vaadata enda tehtud loosimisi.
  • Vajadusel pikendada loosimise aega, suurendada loosimise suurust, panna loosimine kõrgema prioriteedi alla.
+ tavakasutaja funktsioonid

KASUTAJA:

  • Võimalus vaadata edetabelit (skoori pingerida).
  • Skoori saab kasvatada jagamistega (võidu puhul saab skoori suurendada topelt). Kui jagada loosimist, uuendatakse kasutaja skoor automaatselt.
  • Osaleda loosimistes.
  • Valida loosimisi kategooria järgi.
  • Filtreerida loosimisi.
  • Sorteerida loosimised lõppemise järgi.
  • Näha oma võitusid.
  • Näha loosimisi, kus osaletakse.

ÜLDINE:

  • Loosimised sorteeritakse prioriteetsuse järgi ja järgnevalt kestuse järgi (enne lõppevad kuvatakse enne).
  • Loosimised on võimalik suuruse järgi kuvada.
  • Kuvatakse lõppevat aega.
  • Kui teha loosimine, genereeritakse arve automaatselt. Sellega täidetakse BILL tabel ära (adminil tuleb hiljem ise lisada millal on maksetähtaeg)

Should Have

VEEBIRAKENDUS

  • Ühendada teenus Facebookiga, et saaks reaalselt mingit loosimist jagada.

QSEE andmebaasiskeem

LUCKYYOU

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”).

SHOP veebiteenuse ja klientrakenduse retsensioon

Meeskond SHOP on valmis teinud veebiteenuse, kui ka klientrakenduse, mis võimaldab lihtsasti veebipoode luua. Samas on tavakasutajal hea ja mugav veebipoodi kasutades oma oste sooritada. Analüüsis on püsitatud väga palju ülesandeid, mis on ka enamjaolt meeskonna poolt realiseeritud. Ainult mõned should have punktid on tegemata jäänud. Veebiteenusega ja klientrakendusega oli hästi mugav tutvuda. Sai ühe klikiga kõik vajaliku allalaadida, tutvuda meeskonnalehel instruktsiooniga (kuidas kasutada veebiteenust ja klientrakendust) ja võiski asja kallale asuda. Näha on, et kasutatakse kõiki õpitud arendusmustreid ja neid õigetes kohtades. Olemas on nii BLL - kus asub kõik äriloogika, DAL - mis on mõeldus andmebaasiga suhtlemiseks, Domain - mida kasutatakse erinevate mudelite jaoks, Identity- kus asub identiteedi loogika ja loomulikult WebApp. Kasutatud on reposid, interface, UOW-sid, DTO-sid, factory-id, service-id. Meeldis, et kogu koodi oli lihtne lugeda. Eriti mugav oli veebirakendus, mis istus serveris, kus oli ka palju testandmeid ette sisestatud, millega sai kõiki funktsionaalsuseid katsetada. Kõik funktsionaalsused töötasid laitmatult. Meeldis, et veebirakendus oli tõlgetega, pildi lisamisvõimalusega. Tavakasutaja poole pealt oli hea see, et sai kasutada erinevaid filtreerimisi, sorteerimisi. Kogu veebiteenus oli loogilise ülesehitusega. Kokku on koodi väga palju, mis on hästi kommenteeritud. Klientrakendus oli tehtud WPF-is, mis võimaldas samu funktsioone, mis veebirakenduski. Sai sisse logida, tooteid lisada jne. Ainuke probleem oli akna sulgemisega - seda polnud võimalik teha. Üldiselt meeldis veebirakendust kasutada rohkem, kui WPFi. Klientrakenduses oli samuti kasutada häid tavasid ja ülesehitus oli loogiline. Arvan, et projektiga on väga palju vaeva nähtud ja tehtud head meeskonnatööd. Kasutatud on kõike õpitud ja veelgi rohkem. Selline töö on kindlasti maksimaalset tulemust väärt.


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.
  • 02.05 - Tanel tegi veebiteenuse valmis.
  • 10.05 - Ülesanne Melissale, Taavile, Aleksile klientrakenduse tegemiseks.
  • 23.05 - Tanel tegi klientrakenduse valmis.
  • 24.05 - Veebiteenus ja klientrakendus kaitsmiseks valmis tehtud.