- Marcin Walendzik
- Szymon Miękina
- Ignacy Siklucki
Baza danych: Postgres
Frontend: Handlebars
Backend: Node.js
ORM: Sequelize
- rezerwacja biletu, wybór fotela, "zapłata"
- rezygnacja z rezerwacji
- wyświetlenie rezerwacji
- wyświetlenie repertuaru
- Skład grupy
- Technologie
- Główne operacje
- Repozytorium
- Spis treści
- Schemat
- Tabele
- Relacje
- Operacje
- Technologie
Filmy
kolumna | typ | opis |
---|---|---|
id | bigint | klucz główny |
title | string | tytuł filmu |
description | text | opis filmu |
year | int | rok premiery filmu |
runtime | int | długość filmu w minutach |
Seanse
kolumna | typ | opis |
---|---|---|
id | bigint | klucz główny |
movieId | bigint | ID filmu |
roomId | bigint | ID sali kinowej |
price | decimal | cena jednego biletu |
date | dateonly | data odbycia się seansu |
time | time | godzina rozpoczęcia seansu |
Sale kinowe
kolumna | typ | opis |
---|---|---|
id | bigint | klucz główny |
number | string | numer sali kinowej |
seats | smallint | numer foteli w sali |
Bilety
kolumna | typ | opis |
---|---|---|
id | bigint | klucz główny |
token | string | unikatowy token biletu |
userId | bigint | ID użytkownika |
showId | bigint | ID zarezerwowanego seansu |
paymentId | bigint | ID płatności |
seatNumber | smallint | numer zarezerwowanego fotela |
Płatności
kolumna | typ | opis |
---|---|---|
id | bigint | klucz główny |
userId | bigint | ID użytkownika |
token | string | token płatności |
issueTime | date | data i czas płatności |
isPaid | bool | status opłacenia płatności |
Użytkownicy (klienci)
kolumna | typ | opis |
---|---|---|
id | bigint | klucz główny |
login | string | nazwa użytkownika |
password | string | zhaszowane hasło użytkownika |
string | email użytkownika | |
currentSession | string | token aktywnej sesji |
Logi (dziennik)
kolumna | typ | opis |
---|---|---|
id | bigint | klucz główny |
type | string | typ logu: INFO lub ERROR |
message | text | zawartość wiadomości logu |
eventTime | date | data i czas zdarzenia |
about | string | tytuł logu (nazwa dotyczącej tabeli) |
tabela 1 | relacja | tabela 2 | klucz |
---|---|---|---|
Movie | 1:n | Show | movieId |
Room | 1:n | Show | roomId |
Payment | 1:n | Ticket | paymentId |
Show | 1:n | Ticket | showId |
User | 1:n | Ticket | userId |
Każda operacja oprócz właściwej modyfikacji danych, przesyła również informacje do tabeli Logs o statusie wykonania.
Zarejestruj użytkownika w bazie danych - utwórz konto, z unikalnym loginem, emailem i hasłem. Ustawiona jest walidacja na długość loginu (> 4 litery alfabetu łacińskiego w tym cyfry i wybrane znaki specjalne), walidacja adresu email.
- create User
Zaloguj użytkownika, wydajac przy tym token sesji.
- find (select) User by login, password
- update User.currentSession = new_token
Wyloguj użytkownika usuwając token sesji.
- udpate User.currentSession = NULL
Zarezerwuj miejsca na sali kinowej na dany seans. Kupujący otrzymuje Payment, który może zapłacić, lub odmówić (rezygnacja z rezerwacji).
- create Payment
- create Ticket for each seat taken
- commit transaction
Jeżeli klient nie dokonał płatności, może zmienić zarezerwowane fotele.
- delete previous Tickets of selected payment
- create Ticket for each seat taken
- commit transaction
Klient odmawia płatności, rezygnując z rezerwacji.
- delete Tickets of selected payment
- delete Payment
- commit transaction
Klient zapłaca za zarezerwowane miejsca, otrzymując dostęp do biletów.
- update Payment.isPaid = true
Jest to ORM do aplikacji w Javascripcie na platformie Node.js. Obsługiwane jest wiele systemów bazodanych w tym Postgres, który został użyty w tym projekcie.
Sama biblioteka bardzo ułatwia wykonywanie operacji na bazie danych, pozwalając na tworzenie relacji 1:1, 1:N i N:N, transakcji, walidacji danych i ich automatyczne przetwarzanie.
Korzystanie z tej technologi może wydawać się intuicyjne, głównie z powodu na nature samego języka Javascript jak i wielu "trików", które dodaje sam Sequelize w celu ułatwienia niektórych operacji, pod warunkiem, że zrozumie się ich działanie - mianowicie wiele pól do obiektów z rezultatami jest dodawane dynamicznie, i zależy od opcji podanych do metody.
Należy też pamiętać o tym, że Sequelize może połączyć się tylko z istniejącą tabelą, co uniemożliwia tworzenie nowych tabel, modyfikowanie isniejących etc.
Do bazy danych oraz aplikacji backendowej dołączono również frontend, który zaimplementowano przy pomocy technologii Handlebars. Jest to system szablonów dla języka JavaScript, który pozwala na dynamiczne generowanie struktur HTML. Umożliwia oddzielenie logiki od prezentacji, co czyni kod bardziej przejrzystym i łatwiejszym do utrzymania. Szablony Handlebars składają się z plików HTML zawierających specjalne znaczniki w podwójnych klamrach, które reprezentują zmienne i wyrażenia.
Jednym z głównych atutów Handlebars jest jego prostota i wydajność, dzięki czemu jest szeroko stosowany w aplikacjach webowych do renderowania dynamicznych treści po stronie klienta. Działa również na serwerze w środowisku Node.js, stąd zdecydowano się na jego użycie przy projekcie.