goluart / Projekti

Tiimi 4 - Ohjelmistoprojekti
0 stars 0 forks source link

TicketGuru - Lipputoimiston lippujärjestelmä

Tiimi 4: Golubev Artur, Huovinen Mia, Tuomela Jouni, Varpanen Hilda-Maija.

Johdanto

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.

Järjestelmän määrittely

Käyttäjäryhmät

Sovelluksen käyttäjäryhmät:

  1. Lipunmyyjä: Lipunmyyjä työskentelee lipputoimistossa ja vastaa lippujen myynnistä asiakkaille. Lipunmyyjät käyttävät järjestelmää lippujen myymiseen ja tulostamiseen.

  2. 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.

  3. 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ötapauskaavio

Käyttötapauskaavio

Käyttöliittymä

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.

Käyttöliittymäkaavio

Käyttöliittymän rautalankamalli

Tietokanta

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.

Tietokantakaavio

Tietokantakaavio SQL Server Management Studiolla

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

REST-rajapinnan ratkaisut

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.

Endpoint Jarjestaja-luokalla on muotoa: /jarjestajat

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ä

Endpoint Tapahtuma-luokalla on muotoa: /tapahtumat

Method: GET

Tarkempi kuvaus GET-pyynnöistä

Method: POST

Tarkempi kuvaus POST-pyynnöstä

Method: PUT

Tarkempi kuvaus PUT-pyynnöstä

Method: DELETE

Tarkempi kuvaus DELETE-pyynnöstä

Endpoint Myyntitapahtuma-luokalla on muotoa: /myyntitapahtumat

Method: GET

Tarkempi kuvaus GET-pyynnöistä

Method: POST

Tarkempi kuvaus POST-pyynnöstä

Method: DELETE

Tarkempi kuvaus DELETE-pyynnöstä

Endpoint Kayttaja-luokalla on muotoa: /kayttajat

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ä

Endpoint Rooli-luokalla on muotoa: /roolit

Method: GET

Method: POST

Method: PUT

Method: DELETE

Tarkempi kuvaus DELETE-pyynnöistä

Endpoint Yhteyshenkilo-luokalla on muotoa: /yhteyshenkilot

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ä

Endpoint Lippu-luokalla on muotoa: /lippu

Method: GET

Tarkempi kuvaus GET-pyynnöistä, GET-Tarkistuskoodi

Method: POST

Tarkempi kuvaus POST-pyynnöistä,

Method: DELETE

Tarkempi kuvaus DELETE-pyynnöistä

Endpoint Lipputyyppi-luokalla on muotoa: /lipputyyppi

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ä

Testaus

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.

Testausdokumentti

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.

Asennustiedot

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

Käynnistys- ja käyttöohje

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.

Hallinto

Myyjä

Lipuntarkastaja