Tiimi 4: Golubev Artur, Huovinen Mia, Tuomela Jouni, Varpanen Hilda-Maija.
Asiakkaanamme toimii lipputoimisto, joka haluaa uudistaa lipunmyyntijärjestelmänsä vastaamaan nykypäivän vaatimuksia ja tarpeita. TicketGuru-järjestelmän tavoitteena on mahdollistaa lippujen myynti myyntipisteessä sekä myöhemmin myös verkkokaupassa. Lippujen myynti tapahtuu ensisijaisesti myyntipisteessä, jossa lipunmyyjä myy ja tulostaa liput asiakkaille. Kun ennakkomyynti päättyy, jäljellä jäävät liput tulostetaan myyntipisteen sijaan ovella myytäväksi. Jokaisessa lipussa on selkeästi tarkastettava koodi, joka mahdollistaa nopean ja vaivattoman pääsyn tapahtumaan.
Järjestelmä suunnitellaan ensisijaisesti käytettäväksi websovelluksena, joka on optimoitu käytettäväksi kannettavalla tai pöytäkoneella.
Sovelluksen käyttäjäryhmät:
Lipunmyyjä: Lipunmyyjä työskentelee lipputoimistossa ja vastaa lippujen myynnistä asiakkaille. Lipunmyyjät käyttävät järjestelmää lippujen myymiseen ja tulostamiseen.
Lipuntarkastaja: Lipuntarkastaja tarkistaa lipun aitouden tapahtuman sisäänkäynnillä. Lipuntarkastajat käyttävät järjestelmää lipun tarkistamiseen ja varmistavat, että vain oikeilla lipuilla henkilöt pääsevät tapahtumaan.
Palveluntarjoaja: Palveluntarjoaja käyttää järjestelmää tapahtumien lisäämiseen, hallinoimiseen ja seuraamiseen sekä lipunmyynnin tietojen tarkastelemiseen. Palveluntarjoaja saa toimeksiannot tapahtumien lisäämisestä ja myymisestä tapahtumajärjestäjiltä, keikkamyyjiltä sekä muilta organisaatioilta.
Käyttöliittymä on tarkoitus toteuttaa alustavasti Reactilla. Käyttöliittymäsivu aukeaa kirjautumissivulle, jonka kautta pääsee käyttäjän oikeuksien mukaiselle työpöydälle.
Kappaleessa kuvataan järjestelmässä käytettävän tietokannan rakennetta. Tietohkemisto-kuvaukset auttavat käytettävien attribuuttien ymmärtämisessä, sekä taulujen yhteyksien hahmottamisessa. Jokaisesta taulusta on annettu tarkat kuvaukset, jotka sisältävät taulun kentät, niiden tyypit ja niiden tarkoitukset. Tämä osio tarjoaa kattavan yleiskuvan tietokannan rakenteesta, tietokantakaaviosta ja toiminnallisuudesta.
Jarjestaja
Jarjestaja-taulu sisältää tiedot tapahtuman organisoivasta tahosta, eli tapahtuman järjestäjästä. Tapahtumalla on yksi järjestäjä, mutta järjestäjällä voi olla monta tapahtumaa. Järjestäjä liittyy Yhteyshenkilo-, Tapahtuma- ja Postitoimipaikka -tauluihin. Järjestäjällä voi olla monta yhteyhenkilöä ja vain yksi postitoimipaikka.
Kenttä Tyyppi Kuvaus jarjestaja_id int PK Järjestäjän yksilöivä tunniste nimi varhcar(50) Järjestäjän nimi ytunnus varchar(9) Järjestävän yrityksen y-tunnus osoite varchar (100) Järjestäjän osoite postitoimipaikka_id int Osoitteen oikeaan alueeseen liittävä identifioiva tunnus, viittaus postoimipaikka-tauluun yht_hlo_id int FK Järjestäjän yhteyshenkilö, viittaus yhteyshenkilo-tauluun Kayttaja
Kayttaja-taulu sisältää käyttäjien kirjautumistiedot ja yhdellä käyttäjällä voi olla vain yksi rooli.
Kenttä Tyyppi Kuvaus hlo_id INT PK Käyttäjän ID salasana VARCHAR(700) Käyttäjän salasana snimi VARCHAR(50) Käyttäjän sukunimi enimi VARCHAR(20) Käyttäjän etunimi lisatiedot VARCHAR(700) Mahdollisia lisätietoja käyttäjästä rooli_id INT FK Viittaus käyttäjän rooliin rooli-tauluun Postitoimipaikka
Postitoimipaikka-taulu, sisältää tiedot postinumerosta sekä kapungista, johon määrätty postinumero liittyy. Postinumeron avulla saman nimiset osoitteet erotetaan toisistaan ja sijoitetaan oikeisiin kuntiin tai kaupunkeihin. Postinumerolla voi olla monta osoitetta, mutta vain yksi kaupunki tai kunta. Postitoimipaikka liittyy Jarjestaja-tauluun ja Tapahtumapaikka-tauluun.
Kenttä Tyyppi Kuvaus postinumeroId int PK Postitoimipaikan yksilöivä tunnus postinumero int Postitoimipaikan postinumero kaupunki varchar (50) Paikkakunta, johon postinumero liittää osoitteen Rooli
Rooli-taulu sisältää roolin, joka määrittää käyttäjän oikeudet käyttöliittymän kautta tehtäviin hakuihin ja muutoksiin
Kenttä Tyyppi Kuvaus rooli_id INT PK Roolin ID rooli_nimi VARCHAR(20) Roolin nimi Tapahtuma
Tapahtuma-taulu sisältää tapahtumat. Tapahtumalla on yksi tapahtumapaikka ja yksi järjestäjä. Tapahtumapaikalla ja järjestäjällä voi olla monta tapahtumaa.
Kenttä Tyyppi Kuvaus tapahtuma_id int PK Tapahtuman yksilöllinen tunniste tapahtuma_nimi varchar(100) Tapahtuman nimi luonti_pvm timestamp with zone Tapahtuman UTC-luontipäivämäärä alkaa_pvm timestamp with zone UTC-tiedon sisältävä tapahtuman alkamispäivä ja kellonaika paattyy_pvm timestamp with zone UTC-tiedon sisältävä tapahtuman päättymispäivä ja kellonaika tapaikka_id int FK Tapahtuman järjestämispaikka, viittaus tapahtumapaikka-tauluun kuvaus varchar(700) Kuvaus tapahtumasta jarjestaja_id int FK Tapahtuman järjestäjä, viittaus jarjestaja-tauluun perushinta decimal Tapahtumalipun perushinta, kiinteä liukuluku lippu_id int FK Tapahtuman lippu, viittaus lippu-tauluun lipputyyppi_id int FK Lipputyyppi, viittaa lipputyyppi-tauluun max_lippuja int Tapahtuman myytävien lippujen maksimimäärä Tapahtumapaikka
Tapahtumapaikka-taulu sisältää tiedot paikasta, jossa tapahtuma järjestetään. Tapahtumalla on yksi tapahtumapaikka, tapahtumapaikalla voi olla monta tapahtumaa. Tapahtumalla on yksi postinumero ja yhteyshenkilö. Postinumerolla voi olla useita tapahtumapaikkoja. Yhteyshenkilöllä on vain yksi tapahtumapaikka.
Kenttä Tyyppi Kuvaus tapaikka_id int PK Tapahtumapaikan yksillöllinen tunniste osoite varchar(100) Tapahtumapaikan osoite postinro int FK Tapahtumapaikan postitoimipaikka, viittaus postitoimipaikka-tauluun kuvaus varchar(700) Kuvaus tapahtumapaikasta yht_hlo_id int FK Tapahtumapaikan yhteyshenkilö, viittaus yhteyshenkilo-tauluun ytunnus char(9) Tapahtumapaikan y-tunnus sposti varchar(100) Tapahtumapaikan sähköpostiosoite markkinointitarkoituksiin lisatiedot varchar(700) Lisätietoja tapahtumapaikasta Yhteyshenkilo
Yhteyshenkilo-taulu sisältää tiedot henkilöstä, joka edustaa tapahtumapaikkaa. Yhteyshenkilö on taho johon järjestäjä voi olla tarvittaessa yhteydessä. Yhteyshenkilöllä on vain yksi tapahtumapaikka. Yhteyshenkilö voi olla yhteydessä moneen järjestäjään
Kenttä Tyyppi Kuvaus yht_hlo_id int PK Yhteyshenkilön yksilöivä tunniste sukunimi varchar (50) Yhteyshenkilön sukunimi etunimi varchar (20) Yhteyshenkilön etunimi sahkoposti varchar (100) Yhteyshenkilön sähköpostiosoite puhelin varchar (20) Yhteyshenkilön puhelinnumero lisatieto varchar (700) Yleisiä muistiinpanoja liittyen yhteyshenkilöön jarjestaja_id int FK Tapahtuman järjestäjä, viittaus jarjestaja-tauluun tapaikka_id int FK Tapahtuman järjestämispaikka, viittaus tapahtumapaikka-tauluun Lippu
Lippu-taulu tallentaa tiedot tapahtuman myydyistä lipuista. Jokaisella lipulla on oma yksilöinen tunniste ja se liittyy yhteen tapahtumaan ja asiakkaaseen. Lisäksi lipulla on lipputyyppi (esim. normaali, opiskelija, eläkeläinen) mikä määrittää sen hinnan ja ominaisuudet.
Kenttä Tyyppi Kuvaus lippu_id int PK Lipun yksilöivä tunniste lipputyyppi_id int FK Lipputyypin tunniste, viittaus lipputyyppi-tauluun myyntitapahtuma_id int FK Lippuun liittyvän myyntitapahtuman yksilöivä tunniste myyntitapahtuma-tauluun osto_pvm date Lipun ostoajankohta kaytto_pvm date Lipun käyttöpäivämäärä, kun se on käytetty tarkistuskoodi int Lipun tarkistuskoodi, onko lippu käytetty vai ei Lipputyyppi
Lipputyyppi-taulu sisäkltää erilaisia lipputyyppejä, jotka voivat vaihdella esimerkiksi hinnoittelun, pääsyoikeuksien tai muiden ominasuuksien suhteen. Jokaisella lipputyypillä on oma yksilöllinen tunniste ja se määrittelee lipun hinnan ja erikoisoikeudet.
Kenttä Tyyppi Kuvaus lipputyyppi_id int PK Lipputyypin yksilöivä tunniste asryh_id int FK Lipputyypin asiakasryhmä, viittaus asiakasryhmä-tauluun nimi varchar (20) Lipun ostoajankohta hintamuutos decimal Mahdollinen hintamuutos verrattuna perushintaan, esim. alennusprosentti Asiakasryhmä
Asiakasryhmä-taulu sisältää erilaisia asiakasryhmiä, jotka voivat saada erikoishintoja tai muita etuja. Tämä mahdollistaa segmentoinnin asiakkaiden välillä ja erilaisten tarjousten tekemisen eri ryhmille.
Kenttä Tyyppi Kuvaus asryh_id int PK Asiakasryhmän yksilöivä tunniste nimi varchar (20) Asiakasryhmän nimi kuvaus varchar (100) Lyhyt kuvaus asiakasryhmästä ja sen erityisoikeuksista tarkista boolean Kenttä, joka määrittää, onko asiakasryhmä tarkistettava Myyntitapahtuma
Myyntitapahtuma-taulu sisältää tiedot suoritetuista myyntitapahtumista. Myyntitapahtuma on toimi, jossa asiakas ostaa lippuja. Myyntitapahtumassa näkyvät tiedot ovat myyntitapahtuman ajankohta, ostettujen lippujen kokonaissumma sekä yksityikohdat jokaisesta ostetusta lipusta. Myyntitapahtuma liittyy Lippu-tauluun. Myyntitapahtuma luodaan sekä dto- että service-luokkien avulla.
Kenttä Tyyppi Kuvaus myyntitapahtumaId int PK Myyntitapahtuman yksilöivä tunniste myyntitapahtumaPvm date Myyntitapahtuman päivämäärä loppusumma decimal Myyntitapahtumassa ostettujen lippujen yhteissumma Tekninen kuvaus
Tapahtuma-luokan metodit on luotu REST-rajapinnalla. Ensimmäisessä vaihessa Tapahtuma-luokalle luotiin GET- , POST- , PUT- sekä DELETE-metodit. Rajapinnan nimeämiskäytännössä käytettiin apuna GitHub-käyttäjä jamecook:n kokoamaa ohjetta REST-rajapintojen dokumentaatiosta. Tämän jälkeen kaikille luoduille controller-luokille on luotu samat CRUD-metodit.
Projektin alkuvaiheessa kehitystyötä tehtiin vain lokaalisti osoitteessa http://localhost:8080. Ensimmäisen vaiheen julkaisu tehtiin CSC:n Rahti-ympäristössä. Rahti pyrkii simuloimaan tuotanoympäristön kaltaista ympäristöä. Julkaisun jälkeen tuottetta on voinut käyttää myös osoitteessa https://projekti-ticketguru-tiimi4.rahtiapp.fi/.
Tulevaisuudessa kun tuote etenee tuotantovaiheeseen kannattaa Base-URL:n muuttaa vielä yksinkertaisempaan muotoon, esim. https://ticketguru.fi.
Method: GET
Tarkempi kuvaus GET-pyynnöistä
Method: POST
Tarkempi kuvaus POST-pyynnöistä
Method: PUT
Tarkempi kuvaus PUT-pyynnöistä
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöistä
Method: GET
Tarkempi kuvaus GET-pyynnöistä
Method: POST
Tarkempi kuvaus POST-pyynnöstä
Method: PUT
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöstä
Method: GET
Tarkempi kuvaus GET-pyynnöistä
Method: POST
Tarkempi kuvaus POST-pyynnöstä
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöstä
Method: GET
Tarkempi kuvaus GET-pyynnöistä
Method: POST
Tarkempi kuvaus POST-pyynnöistä
Method: PUT
Tarkempi kuvaus PUT-pyynnöistä
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöistä
Method: GET
URL: "/roolit/{id}". Hakee valitun id:n mukaisen roolin.
Method: POST
URL: "/roolit". Luo uuden roolin. Palauttaa id:n, nimen ja listauksen käyttäjistä jotka operoivat valitulla roolilla.
Method: PUT
URL: "/roolit/{id}". Muokkaa olemassa olevan id:n mukaisen roolin tietoja.
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöistä
Method: GET
Tarkempi kuvaus GET-pyynnöistä
Method: POST
Tarkempi kuvaus POST-pyynnöistä
Method: PUT
Tarkempi kuvaus PUT-pyynnöistä
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöistä
Method: GET
Tarkempi kuvaus GET-pyynnöistä, GET-Tarkistuskoodi
Method: POST
Tarkempi kuvaus POST-pyynnöistä,
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöistä
Method: GET
Tarkempi kuvaus GET-pyynnöistä,
Method: POST
Tarkempi kuvaus POST-pyynnöistä,
Method: PUT
Tarkempi kuvaus PUT-pyynnöistä,
Method: DELETE
Tarkempi kuvaus DELETE-pyynnöistä
Ohjelmistolle on tehty yksikkötestejä sekä integraatiotestejä Junitilla. Ohjelmisto on testattu myös Robot Frameworkilla, jolla tehtiin End-to-End-testausta. Tarkempi kuvaus testeistä, testisuunnitelmista ja -tulokista löytyy Testidokumentaatiosta.
Järjestelmässä on tällä hetkellä yksi ongelma, jota ei ole korjattu. Back-endiin kirjauduttaessa ohjelma ei siirrä käyttäjää suoraan sisäänkirjauksesta eteenpäin, vaan jää kirjautumissivulle White Label -tilaan.
Tässä kappaleessa esitellään miten ohjelman voi ottaa käyttöön kehitysympäristössä sekä tuotantoympäristössä.
Suurin ero kehitysympäristön ja tuotantoympäristön välillä on tiedon pysyvyys. Kehitysympäristössä tieto katoaa heti, kun lokaali sovellus sammutetaan. Tuotantoympäristössä käytetään pysyvää tietokantaa tietokantapalvelimella, joka mahdollistaa persistentin tiedon käsittelyn. Näin pystytään jäljittelemään oikeaa tuotantoympäristöä, ja tuoteen testaamisesta voidaan suorittaa monipuolisemmin.
Järjestelmän kehitysympäristön siirtäminen toiselle koneelle:
Järjestelmän siirtäminen tuotantoympäristöön
Ohjelmiston client-toteutus käynnistyy osoitteessa https://goluart.github.io/Projekti/. Käynnistys ei vaadi erityisiä toimenpiteitä, mutta ohjelma vaatii kirjautumisen.
Client pitää sisällään lipun myymisen tapahtumaan, lipun haun tarkistuskoodin perusteella, sekä lipun tarkistamisen. Lipun haku tarkistuskoodin perusteella palauttaa tapahtuman nimen, tapahtumapaikan sekä lipputyypin.
Lipun tarkistuksessa pitää syöttää Tapahtuman nimi ja lipun tarkistuskoodi. Tämän jälkeen järjestelmä merkkaa lipun käytetyksi ja ilmoittaa siitä sivulla.
Tällä hetkellä QR-koodin generointia ei ole luotu projektiin. Mutta halutessaan sen voi luoda front-endissa, niin että yksilöllisen lipuntarkistuskoodin perusteella luodaan QR-koodi, jonka lipuntarkastaja voi lukea. QR-koodi palauttaa tapahtuman nimen, tapahtumapaikan sekä lipputyypin.
Ohjelmiston back-endin REST API löytyy osoitteesta https://projekti-ticketguru-tiimi4.rahtiapp.fi/login. Kun kirjautuminen on suoritettu, voi osoiterivillä siirtyä valitsemaansa end-pointiin, esim. https://projekti-ticketguru-tiimi4.rahtiapp.fi/tapahtumat.
Tällä hetkellä kirjautumistiedot on luotu seuraaville käyttäjille sekä back-endiin, että clientiin.