Almost done

This commit is contained in:
Imbus 2024-02-07 10:18:03 +01:00
parent a16633680c
commit 87cb244f71
4 changed files with 69 additions and 9 deletions

View file

@ -190,5 +190,58 @@ public class Database {
return false;
}
/* --- TODO: insert more own code here --- */
public Reservation addReservation(String username, String movie, String date) {
if(!isConnected()) {
System.err.println("addReservation: no connection to database");
return null;
}
System.out.println("Adding reservation for " + username + " for " + movie + " on " + date);
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM Users WHERE username = '" + username + "'");
if (rs.next()) {
int user_id = rs.getInt("id");
// rs = stmt.executeQuery("SELECT * FROM Showings JOIN Movies ON Showings.movie_id = Movies.movie_id WHERE name = '" + movie + "' AND show_date = '" + date + "'");
rs = stmt.executeQuery("SELECT * FROM Showings JOIN Movies ON Showings.movie_id = Movies.movie_id WHERE name = '" + movie + "' AND show_date = '" + date + "'");
if (rs.next()) {
System.out.println("Adding reservation");
int showing_id = rs.getInt("showing_id");
String theater = rs.getString("theater_id");
stmt.executeUpdate("INSERT INTO Reservations (user_id, showing_id) VALUES (" + user_id + ", " + showing_id + ")");
System.out.println("Reservation added");
int bookingId = stmt.getGeneratedKeys().getInt(1);
return new Reservation(bookingId, movie, date, theater);
}
}
else {
System.err.println(String.format("addReservation: user %s not found", username));
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public ArrayList<Reservation> getReservations(String username) {
ArrayList<Reservation> reservations = new ArrayList<Reservation>();
if(!isConnected()) {
System.err.println("getReservations: no connection to database");
return reservations;
}
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT *, Theaters.name AS theater_name FROM Reservations JOIN Showings ON Reservations.showing_id = Showings.showing_id JOIN Movies ON Showings.movie_id = Movies.movie_id JOIN Theaters ON Showings.theater_id = Theaters.theater_id JOIN users ON Reservations.user_id = Users.id WHERE username = '" + username + "'");
while (rs.next()) {
reservations.add(new Reservation(rs.getInt("reservation_id"), rs.getString("name"), rs.getString("show_date"), rs.getString("theater_name")));
}
} catch (SQLException e) {
e.printStackTrace();
}
return reservations;
}
}

View file

@ -11,6 +11,7 @@ import java.util.List;
import datamodel.CurrentUser;
import datamodel.Database;
import datamodel.Reservation;
import datamodel.Show;
import java.util.ArrayList;
@ -67,10 +68,12 @@ public class BookingTab {
(event) -> {
String movie = moviesList.getSelectionModel().getSelectedItem();
String date = datesList.getSelectionModel().getSelectedItem();
String user = CurrentUser.instance().getCurrentUserId();
Reservation r = db.addReservation(user, movie, date);
/* --- TODO: should attempt to book a ticket via the database --- */
/* --- do not forget to report booking number! --- */
/* --- update the displayed details (free seats) --- */
report("Booked one ticket to "+movie+" on "+date);
report(String.format("Ticket booked for %s on %s. Reservation number: %d", movie, date, r.getBookingId()));
});
report("Ready.");

View file

@ -4,6 +4,7 @@ import java.util.Arrays;
import java.util.List;
import datamodel.Reservation;
import datamodel.CurrentUser;
import datamodel.Database;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
@ -58,7 +59,10 @@ public class ReservationsTab {
/* --- TODO: replace with own code using the database object instead --- */
System.out.println("Update booking list called.");
List<Reservation> bookings = Arrays.asList(new Reservation(1, "Star Wars", "2019-12-30", "Bio Söder"));
// Get the list of bookings from the database
List<Reservation> bookings = db.getReservations(CurrentUser.instance().getCurrentUserId());
// List<Reservation> bookings = Arrays.asList(new Reservation(1, "Star Wars", "2019-12-30", "Bio Söder"));
tableReservations.getItems().setAll(bookings);
}
}

View file

@ -35,9 +35,9 @@ CREATE TABLE IF NOT EXISTS Showings (
CREATE TABLE IF NOT EXISTS Reservations (
reservation_id INTEGER PRIMARY KEY,
username VARCHAR(50) REFERENCES Users(id),
user_id INTEGER REFERENCES Users(id),
showing_id INTEGER REFERENCES Showings(showing_id),
reservation_number VARCHAR(50) UNIQUE NOT NULL DEFAULT (hex(randomblob(2))) -- 4 characters
reservation_number VARCHAR(50) UNIQUE DEFAULT (hex(randomblob(2))) -- 4 characters
);
INSERT INTO Theaters (name, total_seats) VALUES ('Theater 1', 100);
@ -57,7 +57,7 @@ INSERT INTO Showings (movie_id, theater_id, show_date) VALUES (3, 1, '2024-08-12
INSERT INTO Showings (movie_id, theater_id, show_date) VALUES (1, 2, '2024-03-04');
INSERT INTO Showings (movie_id, theater_id, show_date) VALUES (2, 2, '2024-01-10');
INSERT INTO Reservations (username, showing_id) VALUES (1, 1);
INSERT INTO Reservations (username, showing_id) VALUES (2, 2);
INSERT INTO Reservations (username, showing_id) VALUES (3, 3);
INSERT INTO Reservations (username, showing_id) VALUES (1, 4);
INSERT INTO Reservations (user_id, showing_id) VALUES (1, 1);
INSERT INTO Reservations (user_id, showing_id) VALUES (2, 2);
INSERT INTO Reservations (user_id, showing_id) VALUES (3, 3);
INSERT INTO Reservations (user_id, showing_id) VALUES (1, 4);