Spendings

From EIK wiki

Meeskond ja rollid

  • Tauri Busch


Veebi ja klientrakendus

https://onedrive.live.com/redir?resid=CB31A5BF4D021D3E!295076&authkey=!AJZlmiKEkMpVO4o&ithint=folder%2c

Kävitata tuleb:

1) WCF.Host

2) WindowsUniversalClient


Hetkel ei toimi üksuste uuendamine, tekib mingi serveri poolne viga..

NB! Kasutan andmebaasi connection stringina (localdb)\v11.0 Kui seda testitavas arvutis ei ole, siis tuleks see WCF.Host config failis ära muuta.

Idee ja analüüs

Projekti idee

Luua teenus, mille kaudu on võimalik sisestada igapäevaseid kulutusi ja sissetulekuid, sisestada oma kuu eelarve ja üritada sellest kinni pidada. Kulutusi ja tulusid on võimalik lisada kategooriate kaupa, mida saab kasutaja ise määrata. Kasutajal on võimalus jälgida ja hallata läbi klient rakenduse oma kulutuste kohti, võimalus määrata oma kulutused kategooriatesse. Lisaks saab klient rakenduse läbi määrata ja jälgida oma jooksva kuu eelarvet.


Rakenduse sisu

Teenuses on olemas järgmised võimalused (Must have):

Võimalus luua kasutaja

Kasutaja saab sisestada, muuta, kustutada kulutusi ja tulusid

Kasutaja saab määrata kulusid ja tulusid kategooriatesse


Teenuses võiksid olla lisavõimalused (Nice to have):

Võimalus määrata püsivaid sissetulekuid (näiteks palk)

Määrata päeva/kuu/aasta eelarvet

Jagada teiste kasutajatega oma eelarvet (ühine pere eelarve)


Klient rakenduse (Must have):

Saab näha olemasolevaid sissekandeid kulutuste ja tulude kohta

Saab määrata oma oma kuu eelarve ja jälgida seda


Klient rakenduse (Nice to have):

Võimalus teha (telefoniga) pilt arvest ja see läbi scannida sisse


XML Fail

<?xml version="1.0" encoding="utf-8" ?>

<Spendings>
  <MoneyInOut>
    <Type>Expense</Type>
    <Type>Income</Type>
  </MoneyInOut>
  <Categories>
    <Category name="Minu kulutused" limit="500" current="482">
      <Description><![CDATA[Minuga soetud kulutused on siin]]></Description>
      <ResetDay>7</ResetDay>
      <SubCategories>
        <SubCategory name="Remont" id="D3D1C80D-C722-E611-B1EF-083E8EF0777A">
          <Description><![CDATA[Remondikulud]]></Description>
        </SubCategory>
        <SubCategory name="Kütus" id="D3D1C80D-C722-E611-B1EF-083E8EF0777B">
          <Description><![CDATA[]]></Description>
        </SubCategory>
      </SubCategories>
      <Spendings>
        <Spending name="Ratta vahetus" id="D3D1C80D-C722-E611-B1EF-083E8EF0776E" subCatId="D3D1C80D-C722-E611-B1EF-083E8EF0777A" time="25.05.2016 14:00" value="26">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[Ratas sõitis minema]]></Descritpion>
        </Spending>
        <Spending name="Põhja keevitus" id="C3D1C80D-C722-E611-B1EF-083E8EF0776E" subCatId="D3D1C80D-C722-E611-B1EF-083E8EF0777A" time="24.05.2016 14:00" value="200">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[Põhi sõitis minema]]></Descritpion>
        </Spending>
        <Spending name="Ukse vahetus" id="B3D1C80D-C722-E611-B1EF-083E8EF0776E" subCatId="D3D1C80D-C722-E611-B1EF-083E8EF0777A" time="20.05.2016 14:00" value="236">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[Uks lendas minema]]></Descritpion>
        </Spending>
        <Spending name="Diisel" id="A3D1C80D-C722-E611-B1EF-083E8EF0777B" subCatId="D3D1C80D-C722-E611-B1EF-083E8EF0777B" time="21.05.2016 14:00" value="20">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[20L]]></Descritpion>
        </Spending>
      </Spendings>
    </Category>
    <Category name="Kool" limit="200" current="116.5">
      <Description><![CDATA[Kooliga seotud kulud]]></Description>
      <ResetDay>7</ResetDay>
      <SubCategories>
        <SubCategory name="Kapirent" id="D3D1C80D-C722-E611-B1EF-183E8EF0777A">
          <Description><![CDATA[]]></Description>
        </SubCategory>
        <SubCategory name="Võlgnevus" id="D3D1C80D-C722-E611-B1EF-183E8EF0777B">
          <Description><![CDATA[]]></Description>
        </SubCategory>
      </SubCategories>
      <Spendings>
        <Spending name="Kapirent" id="D3D1C80D-C722-E611-B1EF-083E8EF0776E" subCatId="D3D1C80D-C722-E611-B1EF-183E8EF0777A" time="7.03.2016 14:00" value="5.5">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[]]></Descritpion>
        </Spending>
        <Spending name="Kapirent" id="C3D1C80D-C722-E611-B1EF-083E8EF0776E" subCatId="D3D1C80D-C722-E611-B1EF-183E8EF0777A" time="7.04.2016 14:00" value="5.5">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[]]></Descritpion>
        </Spending>
        <Spending name="Kapirent" id="B3D1C80D-C722-E611-B1EF-083E8EF0776E" subCatId="D3D1C80D-C722-E611-B1EF-183E8EF0777A" time="7.05.2016 14:00" value="5.5">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[]]></Descritpion>
        </Spending>
        <Spending name="Võlgnevus" id="A3D1C80D-C722-E611-B1EF-083E8EF0777B" subCatId="D3D1C80D-C722-E611-B1EF-183E8EF0777B" time="21.02.2016 14:00" value="50">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[]]></Descritpion>
        </Spending>
        <Spending name="Võlgnevus" id="A3D1C80D-C722-E611-B1EF-083E8EF0777B" subCatId="D3D1C80D-C722-E611-B1EF-183E8EF0777B" time="21.03.2016 14:00" value="50">
          <MoneyInOut>Expense</MoneyInOut>
          <Descritpion><![CDATA[]]></Descritpion>
        </Spending>
      </Spendings>
    </Category>
  </Categories>
</Spendings>


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="Spendings">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="MoneyInOut">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Type" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Categories">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Category" >
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Description" type="xs:string" />
                    <xs:element name="ResetDay" type="xs:unsignedInt" />
                    <xs:element name="SubCategories">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="SubCategory">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Description" type="xs:string" />
                              </xs:sequence>
                              <xs:attribute name="name" type="xs:string" use="required" />
                              <xs:attribute name="id" type="xs:string" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Spendings">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="Spending">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="MoneyInOut" type="xs:string" />
                                <xs:element name="Descritpion" type="xs:string" />
                              </xs:sequence>
                              <xs:attribute name="name" type="xs:string" use="required" />
                              <xs:attribute name="id" type="xs:string" use="required" />
                              <xs:attribute name="subCatId" type="xs:string" use="required" />
                              <xs:attribute name="time" type="xs:dateTime" use="required" />
                              <xs:attribute name="value" type="xs:decimal" use="required" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="limit" type="xs:unsignedShort" />
                  <xs:attribute name="current" type="xs:decimal" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT

Pole olemas :(


Retsensioon meeskonna BurgerAce veebiteenusele ja klientrakendusele

Sissejuhatus

BurgerAce on kasutanud ära REST API't ja teinud omale klient rakenduse veebi põhjal. Kogu projekt on ilusasti ära jaotatud, erinevad funktsionaalsused on lihtsasti leitav, äriloogika ja teenus asuvad eraldi teekides. Klient rakendus on iseseisev ja kasutab ära API't et suhelda teenusega. See rakendus tundub olevat burgerite ja jookide tellimiseks, kus kasutaja saab omale kokku panna mingi tellimuse ja siis selle otse ja mugavalt tellida. Küll ei ole see teenus sellisel tasemel hetkel kasutatav.

Kahjuks puudub ka keskkonna automaatne seadistamine, mis aitaks kaasa projekti testimisele ja arusaamaks, mis on tehtud ja kuidas asi täpsemalt kasutaja jaoks toimima peaks. Kuna ka ei ole otseseid õpetusi selle kohta, kuidas antud projekt toimima peaks, ei hakka sellega pikemalt vaevama ja lähtun sellest, mis on koodi tasemel valmis kirjutatud.

Head

Projektis kasutatakse ilusasti ära kihtide loogikat, äriloogika, mudelid ja andmebaasi ühendused on eraldi API teenusest. Samuti on nähtavalt ära kasutatud UOW'd. API päringute tegemisel kasutatakse ära service'id.


Mitte nii head

Antud lahenduse puhul ei kasutata ära andmebaasi initsialiseerimisel testandmete loomist, vaid projekti on kaasa lisatud mingisugune .mdf fail, mida ma ei oska kusagile lisada (ei ole ka õpetust, kuidas sellega ümber käia). Config failist vaadates justkui võetakse see fail külge, kuid neid andmeid ei kuvata kasutatavas andmebaasis.

Projektis ei paista olevat sisselogitud kasutajatele mõeldud kontinenti, ehk kogu teenust paistab olevat anonüümselt kasutatav. Registreerimine ei õnnestu, seega ei saa ka seda kontrollida, kas sisselogitult paistab midagi muud, kuid koodist järeldades ei ole seal midagi taolist näha.

Järeldus

Kahjuks on antud projekt poolik, kuid potentsiaali selle teenuse puhul siiski natuke näha on. Kes meist ei tahaks mugavalt tellida burgereid läbi veebi. Kuid lisaks lihtsalt heale mõttele on projekt ka hästi struktureeritud ja baas on tugevalt üles ehitatud. Kui selle projektiga jätkata, on võimalik, et tulemus võib olla väga hea.