* Sovellus on pakattu zip-pakkaukseen, pakkaus pitää purkkaa sellaisenaan
* Hakemistorakenteen pitää olla tasan tarkkaan sellainen kun pakkauksessa, koska sovellus käyttää 'images' - kansiotta kuvien tallentaamiseen ja esittämiseen
* Exe-tiedosto löytyy bin/Debug kansiosta
* Sovelluksen käyttöä varten pitää olla joko kirjautuneena labranetin tietokoneelle tai käyttää labranetin VPN-yhteyttä, koska tietokanta sijaitsee mysql.labranet palvelimella
## Tekniikat ja ympäristöt
* Sovellus on implementoitu Laravel ympäristöllä, joka pyötii apache palvelimella, Digital Oceanin ubuntu-koneella.
* Laravelin päälle on asennettu React.js ympäristö, jota on hyödynnetty ainoastaan "Classes" sivulla. Oli tarkoitus lisätä kalenteri-komponentti siihe, mutta oli hankalaa ja aika alkoi loppumaan kesken, joten luovutin sen.
* Käytin mm Javascript, PHP, HTML, CSS, Jquery, Blade, Bootstrap
* Asensin reactiin muutaman kirjaston: Stringify, Momentjs, Axios
## Tietoa ohjelmasta
...
...
@@ -294,13 +286,17 @@ Sovellus on toteutettu suunnitelman mukaan, ei poikennut vaatimusmäärittelyst
| Tunnus | Ominaisuus | Prioriteetti | Toteuttumisprosentti | Muuta |
* Users sivulla adminit ja masterit pystyy hallinoimaan käyttäjiä.
* Antaa bannia
...
...
@@ -363,79 +363,94 @@ Sain asennettu komponentin, mutta en saanut siihen dataa tietokannasta.
* Ylentää (master)
* Alentaa (master)
## Mukana tulevat tiedostot
* Mukana tulee [zip-pakkaus](https://student.labranet.jamk.fi/~M3156/iTool/iTool_v0.1.zip)
## Tietokanta
Tietokannan suunnittelin tietokannat opintojakson harjoitustyönä. Tietokannasta on luotu 2 versitota prosessin aikana.
Lopullisessa tietokannassa on 4 taulua. Alkuperäisessä oli 3 taulua, siitä puuttui class_is_available taulu. Alkuperäisestä myös puuttui users taulusta "group" ja "status" kolumnit.
Tässä versiossa tietokannassa oli tr_completion taulu, se taulu oli työkalun palautusta varten. Käyttäjä palauuttaa työkalun, samalla palautustapahtuma tallentuisi
tr_completion tauluun, johon kirjautuu palautus PVM, palautus kunto ja arvio kaupan toisesta osapuolesta. Transaction ja tr_completion taulujen välissä oli
yksi yhteen liitos, joten tr_completion on jätetty kokonaan pois ja transaction tauluun on lisätty palautusPVM (actualEndDate) kenttä, joka transaction käynnistyessä olisi null.
Tässä on lopullinen versio iTool tietokannasta, tr_completion taulu on jätetty pois ja tietokantaan on lisätty rating taulu arvioita varten. Rating taululle on tehty [trigger](liitteet/trigger.md),
joka pitää huolta siitä, että käyttäjä joka jättää arvion voi vain ainoastaan arvioida kyseisen transaktion toista osapuolta yhden kerran. Comment taulussa on itseensä liitos,
koska vastaukset kommenteihin vaatii parentID.<br>
* Näkymä on luotu Classes sivua varten
[Täältä löytyy tietokannan luontiskripti](liitteet/database_script.md)
[Queryhistoriasta](liitteet/queryhistory.md) löytyy näkymien luonti, testidatan lisäys ja erilaisia hakuja. Piti luoda 2 isoa näkymää (all_tools ja rented_tools) käyttöliittymän
Tämä sovellus oli vaan hiekkalaatikkoprototyyppi mahdollisesta tulevasta toimivasta sovelluksesta, siihen nähden ei ole esiintynyt hirveän isoja ongelmia.
* Kommentteihin täytyy pystyä päästä käsiksi myös Profiili-ikkunasta (pieni ja helppo päivitys)
[Alkuperäisen tietokannan luontiskripti ja queryhistoria](linkit/database_queries.md)
### Images kansio
## Ongelmat, jatkokehitysideat
* Images kansio on olemassa vain paikallisesti
* Täytyy siirtää webclietille, jota se päivittyisi kaikilla käyttäjillä dynaamisesti
#### Kalenteri
Suurin ongelma oli se Reactin kalenterikomponentti, johon suhteen luovutin pitkän tuhlatun ajan jälkeen. Joku hyvä ja toimiva kalenteri olisi kannatava jatkokehitysidea.
### Tietokantakyselyt
#### Liikuntatuntien poistaminen
Toinen ongelma oli liikuntatuntien poistaminen Classes sivulla, Laravel ja React ei suostunut tekemään yhteistyötä. FORBIDDEN DELETE METHOD 403. Tämän ominaisuuden voi siirtää ihan puhtaaseen Laraveliin. Teen sen, jos jää aikaa.
* Koodissa on vähän liikaa ylimääräisiä yhteydenottoja mysql palvelimelle
* Pitää muuttaa koodia, että otetaan vaan kerran per uusi ikkuna yhteyden palvelimelle
* Täytyy implementoida 'Entity Framework' tulevissa versioissa
#### Inputissa datetime-local
Jostain syystä näytti koulukoneella aika jenkkiformatissa, omalla koneella kuitenkin toimii normaalisti. Täytyy tutkia.
### Samanaikainen kirjautuminen
#### Käyttöliittymän ulkonäkö
Käyttöliittymän ulkonäköön en ehdinnyt panostaa, se vähän harmittaa. Sovellus näyttää vähän liikaa perus Bootstrapilta. Positiivistä tässä on se, että sovellus toimii usealla alustalla. Jatkossa kehitän.
* Täytyy implementoida sellainen toiminnallisuus, jolla sama käyttäjä ei voisi olla kirjautuneena moneella päätelaitteella samanaikaisesti
#### Sähköposti palvelin
Oli aluksi mielessä laittaa s-posti palvelin pystyy ja ilmoittaa käyttäjille, jos tulevat tunnin on peruttu tai kayttäjä on saanut bannin jne.. Tämän ehtii tekemään kyllä tulevaisuudessa.
### Katselmoinnin aikana ilmestyneet bugit
### Käyttäjäkuvat
* Lisättäessä uusi työkalu ilmeni ongelma samannimisen kuvatiedoston kanssa (bugi korjattu)
* Käyttäjä pystyi poistamaan oman profiilin vaikka sillä oli auki olevia transaktioita (bugi korjattu)
Olisin halunnut lisätä mahdollisuuden uippimaan käyttäjäkuvia, mutta deadline tuli vastaan ja en millään kerennyt.
## Työmäärä
Olen tehnyt kaiken yksin, joten on mennyt paljon aikaa tekemiseen. Täältä löytyy karkea arvio työtunneista:
*XAML ja ulkoasu: 15h
*Code behind: 25h
*Reactjs (Classes): 25h
*Backend: 25h
* Tietokanta: 10h
* Dokumentointi: 5-10h
* Itseopiskelu: 10-20h
## Yhteenveto
* Samson Azizyan (M3156)
### Web-palvelinohjelmointi
* Arvosanaehdotus: 5
* Perustelut: Asetin itselleni arvosanaehdotukseksi 5, koska tein tosi paljon hommaa ja siihen kului noin 60h. Saattoi olla vähän liian kunniahimoinen projekti. Lopputulokseen olen tyytyväinen, kaikki toimii niin kuin pitääkin. Ulkoasu olisi voinut olla näyttävämpi, mutta toiminnallisuus oli prioriteettina tässä projektissa. Tietokanta oli monipuolinen ja hyvin toimiva. Tämä on hyvä pohja jatkokehitystä varten.
* Mitä opin: Opin tekemään yksinkertaisia käyttöliittymiä, implementoimaan mysql-tietokantoja, opin syvemmin käsittelemään olioita ja luokkia. Tämän opintojakson aikana minun ohjelmointitaito on kolmenkertaistunut.
* Mitä pitää oppia: Käsittelemään interfaceja, käyttämään webclientia (tallentamaan sinne tiedostoja), Entity Framework
* Perustelut: Olen tehnyt ison määrän työtä yksin, laravelin ympäristössä tehty palvelinohjelmointi toimii ongelmitta. Reititys, Controllerit, Matodit toimii. Olen myös tehnyt Reactjs backendia jonkin verran. Monenlaista tekniikkaa on käytetty tähän projektiin. Tietokanta on hyvin laaja ja monipuolinen (onneksi kävin hyvän tietokantaopintojakson aiemmin).
### Webohjelmointi
* Arvosanaehdotus webohjelmointi: 4
* Perustelut: En ihan viitsinyt laittaa arvosananksi 5, koska on hieman spagettiä minun react-komponentti. Olen kuitenkin käyttänyt siihe paljon aikaa ja kaikki mahdolliset tekniikat. Komponentti toimii niin kuin pitääkin.
### Pohdinta
* Molemmat kurssit olivat tosi työläistä, mutta se on vaan hyvä asia. Mitä työläämpi kurssi, sitä paremmin oppii. Ehkä minun ei olisi pitänyt sekoittaa React, php, javascript, node. Olisin varmaan voinut päästä hempommalla, mutta tulipa opittu paljon.
* Mitä opin: Opin tekemään web-sovelluksia käyttämällä monta eri tekniikkaa. Eniten opin käyttämään Laravelia, se vaikutti alussa tosi sekaavalta, mutta loppujen lopsi se osoittautui todella käteväksi ympäristöksi.
* Mitä pitää oppia: Pitää opetella Reactia paremmin, vaikka se nyt aukesi jo jonkin verran. Se silti vaatii harjoittelua.