Veb aplikacija za avio-prevoznika


Aplikacija treba da omogući korisnicima avio-prevoznika da vrše rezervaciju avionskih karata na sajtu. Administratori mogu da uređuju spisak aerodroma sa kojih polaze i ka kojima lete njihove avio-linije. Svaki aerodrom je određen nazivom, državom u kojoj je, geografskim koordinatama i jedinstvenim međunarodnim kodom (oznakom) aerodroma. Administratori mogu da uređuju spisak linija. Svaka linija je određena nazivom, danom u nedelji kada je polazak, kao i vremenom polaska tog dana sa polaznog aerodroma. Let na svakoj liniji može da ima i tranzitne tačke, tj. aerodrome do kojih avion na ovoj liniji sleće tokom svog puta do odredišta. Za svako od čvorišta na putu se unosi koji je aerodrom u pitanju i posle koliko sati leta od prethodne tačke je potrebno da se dođe do iste, kao i koliko je predviđeno vreme zadržavanja (za razmenu putnika na toj tački, dopunu goriva itd). Poslednje čvorište u nizu je odredište linije. Ako avio-linija ima samo jedno čvorište nakon tačke polaska, to se smatra za direktan let, tj. od aerodroma polaska do odredišta bez sletanja. Svaka linija je određena nominalnom cenom, kao i cenom za korisnike VIP paketa. Cena se automatski računa na osnovu formule koja uzima u obzir vreme do leta. Npr. ako od datuma kada se prodaje karta do datuma poletanja ima 30 dana, karta se računa tako što se za svaka 4 dana do datuma polaska nominalna cena umanjuje za 2%, ali ne može biti manja od 75% nominalne cene. U slučaju VIP korisnika, nominalna cena se umanjuje za 2,5%, ali ne može biti manja od 70% nominalne cene karte. Putnici se registruju na sajtu. Administratori odobravaju registraciju i po potrebi dodeljuju VIP status korisničkom nalogu. Korisnik može da se prijavi na sajt i da vrši pretragu letova. Pretraga se vrši biranjem polaznog aerodroma i aerodroma odredišta. Aplikacija korisnicima prikazuje spisak letova sa danima u nedelji i vremenom polaska, kao i ukupno vreme leta koje se računa sabiranjem svih dužina letova između svih tačaka sa uračunatim vremenima čekanja između poletanja između tačaka. Korisnik može da pokrene postupak rezervacije karata za izabrani let (izabere datum leta). Vrši se rezervacija pojedinačnih karata. Ako su potrebne dve karte, prave se dve rezervacije jedna za drugom. Cena karte se obračunava na osnovu opisane formule i korisnik treba da potvrdi rezervaciju i da je izvrši. Administratori imaju uvid u sve rezervacije kako bi mogli da pokrenu postupak prodaje preko drugih kanala koji nisu predmet ove aplikacije. Grafički interfejs veb sajta treba da bude realizovan sa responsive dizajnom.


Tehnička ograničenja
- Aplikacija mora da bude realizovana na Node.js platformi korišćenjem Express biblioteke. Aplikacija mora da bude podeljena u dve nezavisne celine: back-end veb servis (API) i front-end (GUI aplikacija). Sav kôd aplikacije treba da bude organizovan u jednom Git spremištu u okviru korisničkog naloga za ovaj projekat, sa podelom kao u primeru zadatka sa vežbi.
- Baza podataka mora da bude relaciona i treba koristiti MySQL ili MariaDB sistem za upravljanje bazama podataka (RDBMS) i u spremištu back-end dela aplikacije mora da bude dostupan SQL dump strukture baze podataka, eventualno sa inicijalnim podacima, potrebnim za demonstraciju rada projekta.
- Back-end i front-end delovi projekta moraju da budi pisani na TypeScript jeziku, prevedeni TypeScript prevodiocem na adekvatan JavaScript. Back-end deo aplikacije, preveden na JavaScript iz izvornog TypeScript koda se pokreće kao Node.js aplikacija, a front-end deo se statički servira sa rute statičkih resursa back-end dela aplikacije i izvršava se na strani klijenta. Za postupak provere identiteta korisnika koji upućuje zahteve back-end delu aplikacije može da se koristi mehanizam sesija ili JWT (JSON Web Tokena), po slobodnom izboru.
- Sav generisani HTML kôd koji proizvodi front-end deo aplikacije mora da bude 100% validan, tj. da prođe proveru W3C Validatorom (dopuštena su upozorenja - Warning, ali ne i greške - Error). Grafički korisnički interfejs se generiše na strani klijenta (client side rendering), korišćenjem React biblioteke, dok podatke doprema asinhrono iz back-end dela aplikacije (iz API-ja). Nije neophodno baviti se izradom posebnog dizajna grafičkog interfejsa aplikacije, već je moguće koristiti CSS biblioteke kao što je Bootstrap CSS biblioteka. Front-end deo aplikacije treba da bude realizovan tako da se prilagođava različitim veličinama ekrana (responsive design).
- Potrebno je obezbediti proveru podataka koji se od korisnika iz front-end dela upućuju back-end delu aplikacije. Moguća su tri sloja zaštite i to: (1) JavaScript validacija vrednosti na front-end-u; (2) Provera korišćenjem adekvatnih testova ili regularnih izraza na strani servera u back-end-u (moguće je i korišćenjem izričitih šema - Schema za validaciju ili drugim pristupima) i (3) provera na nivou baze podataka korišćenjem okidača nad samim tabelama baze podataka.
- Neophodno je napisati prateću projektnu dokumentaciju o izradi aplikacije koja sadrži (1) model baze podataka sa detaljnim opisom svih tabela, njihovih polja i relacija; (2) dijagram baze podataka; (3) dijagram organizacije delova sistema, gde se vidi veza između baze, back-end, front-end i korisnika sa opisom smera kretanja informacija; (4) popis svih aktivnosti koje su podržane kroz aplikaciju za sve uloge korisnika aplikacije prikazane u obliku Use-Case dijagrama; kao i (5) sve ostale elemente dokumentacije predviđene uputstvom za izradu dokumentacije po ISO standardu.
- Izrada oba dela aplikacije (projekata) i promene kodova datoteka tih projekata moraju da bude praćene korišćenjem alata za verziranje koda Git, a kompletan kôd aplikacije bude dostupan na javnom Git spremištu, npr. na besplatnim GitHub ili Bitbucket servisima, jedno spremište za back-end projekat i jedno za front-end projekat. Ne može ceo projekat da bude otpremljen u samo nekoliko masovnih Git commit-a, već mora da bude pokazano da je projekat realizovan u kontinuitetu, da su korišćene grane (branching), da je bilo paralelnog rada u više grana koje su spojene (merging) sa ili bez konflikata (conflict resolution).

Morate da budete prijavljeni na aplikaciju da biste izvršili rezervaciju. Prijava

M. Tair, "Teme projektnih zadataka za predmet Praktikum Internet i veb tehnologije", 2016-2025. [Online]. Available at: http://zadatak.singidunum.ac.rs/app/piivt-biranje-tema/ [Accessed: 2025-04-28]