Tavoitteena oli rakentaa opintojakson aihealueeseen liittyvä Full Stack -sovellus. Työn sai tehdä 1-3 hengen ryhmässä, mutta valitsin tehdä kokonaan yksin. Työ on tehty täysin omalla ajalla, mutta tarjolla oli myös muutamia tunteja ohjausta. Työn aiheen sai valita vapaasti, mutta se piti hyväksyttää opettajalla.
Laskuvarjo harrastuksesta innostuneena päätin tehdä niin sanotusta hyppypäiväkirjasta netti version. Normaalisti se on paperinen vihko, mutta sinne käsin kaiken kirjoittaminen jokaisen hypyn jälkeen käy tylsäksi. Hyppypäivä kirjassa on ylhäällä jokaisen hypyn perustiedot lentokoneesta päävarjoon.
## Itsearvio
**Vahvuudet**
- Sovellus on toimiva ja selkeä käyttää.
- Käytin laajasti kurssilla opittuja asoita.
- Lisäksi opettelin hieman kurssin ulkopuolisia asioita. Lähinnä DOM:in muokkaamiseen liittyvää.
- Käytin kaikkia CRUD metodeja.
- Syötteillä on jonkinasteinen tarkistus. Myöskään vaajaata lomaketta ei pysty lähettämään.
- Hyppy järjestyksen muuttaminen on kiva lisä. Sen tekeminen tuotti yksittäisestä asiasta eniten haasteita.
- Kenttien automaattinen täyttö osottautui käteväksi, vaikka tällä hetkellä vain hyppy numero ja vapaapudotusaika yht. täyttyvät.
- Yksittäisen tiedon muokkaaminen arvoa klikkaamalla tuo näppäryyttä muokkaamiseen.
- Hyppyä poistettaessa tulee mahdollisuus peruuttaa poisto 2.5s ajan. Tämäkin ilman ärsyttäviä ponnahdus ikkunoita.
- Sovellus laskee kokonaisvapaapudotusajan ja esittää sen minuutit ja sekunnit muodossa.
- Kommentin ja linkin voi lisätä myös jälkikäteen.
- Linkkiin lisäytyy https:// jos syötetty linkki ei ala sillä.
- Sivusto EI käytä evästeitä ;D
**Heikkoudet ja kehitysideat**
- Sovellusta ei ole julkaistu internettiin kaikille testattavaksi.
- Kirjautumis mahdollisuus ja profiili kohtaiset hyppytiedot olisi pakollisuus jos sovellus haluttaisiin oikeaan käyttöön.
- Haku tai suodatus tulisi käteväksi kun hyppyjä on satoja.
- Kun muokkaa koko hyppyä kerralla (kynä kuvake), niin kokonaisaika ei näy tallennuksen jälkeen minuutit, sekunnit -muodossa. Tätä työstin viimeisenä päivä pitkään mutta palautuspäivä tuli vastaan.
- Saman numeroisen hypyn voi lisätä useamman kerran. Pitäisi tehdä tarkistus sille.
- Päivämäärä kohtaan kalenteri valikko ja nappi josta voi valita kuluvan päivän helposti.
- Myös paikka, lentokone ja päävarjo kentät voisivat täyttyä edellisen hypyn perusteella. Nämä tiedot harvoin muuttuvat, niin tulee turhaa toistoa kirjoittaa ne aina.
- Youtube videon voisi upottaa tietolaatikkoon automaattisesti.
- Sivulla näytettäisiin vain n määrä hyppyjä kerrallaan.
- Osa funktioista on turhan pitkiä.
**Muuta**
En kommentoinut koodia lainkaan, vaan pyrin nimeämään muuttujat ja funktiot siten että ne kommentoisivat itse itseään. Tämäkään ei osoittautunut parhaaksi valinnaksi, sillä moni funktioista on turhan pitkiä ja tekee tavallaan useampaa asiaa. Jatkossa pilkkoisin funktioita pienempiin palasiin.
## Tekniset tiedot
Käytetyt kielet: HTML, CSS ja Javascript
Palvelinohjelmointi: NodeJS, jossa käytössä: Mongoose, Express, Cors
Tietokanta: MongoDB
### Funktioista
Sivun bodyn ladattua kutsutaan alustus funktiota, joka näyttää sivulle, että tietoja aletaan lataamaan ja asettaa globaalin muuttujan hyppyjen esitys järjestyksestä laskevaksi. Samalla se käynnistää asynkronisen tietojen lataus funktion. Tietojen latauduttua tietokannasta, funktio tekee siitä JSON muotoisen objektin ja antaa sen parametrina `showJumps` funktiolle.
`showJumps` järjestää JSON tiedoston hyppynumeroiden perusteella laskevasti tai nousevasti em. globaalin muuttujan perusteella. Tämän jälkeen jokainen hyppy annetaan parametrina `createJumpListItem` funktiolle joka luo jokaisesta `<li>` objektin sivulle ja lisää niille hyppynumeron ja päivän. Lopuille hypyn tiedoille on erillinen `jumpItemFullInfo` funktio, ettei pääfunktio olisi liian suuri. Sillä lisätään hyppy elementin sisälle lista lopuista tiedoista, mutta ne on oletuksena piilotettuna.
Funktiot joilla voidaan muokata ja poistaa hyppyjä, saavat parametrina klikatun objektin id:n, jonka avulla saadaan muutos oikeaan objektiin.