Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 30 additions & 28 deletions src/main/java/lessons/lesson06/BookingApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,38 @@
import lessons.lesson06.db.Booking;
import lessons.lesson06.db.BookingDbManager;
import lessons.lesson06.db.BookingRepository;
import lessons.lesson06.db.Flight;
import lessons.lesson06.db.FlightGenerator;
import lessons.lesson06.db.FlightRepository;
import lessons.lesson06.handlers.BookingStateHandler;
import lessons.lesson06.handlers.FlightStateHandler;
import lessons.lesson06.service.BookingService;
import lessons.lesson06.service.FlightService;
import lessons.lesson06.service.KeyboardService;
import lessons.lesson06.service.PlaneDisplayService;
import lessons.lesson06.service.UserInputService;
import lessons.lesson06.utils.Utils;
import lessons.lesson06.utils.ApplicationStateHolder;

import java.util.Map;
import java.util.Scanner;

public class BookingApplication {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
BookingSystem bookingSystem = getBookingSystem(scanner);
ApplicationStateHolder applicationStateHolder = new ApplicationStateHolder();

BookingService bookingService = getBookingSystem(scanner, applicationStateHolder);
BookingStateHandler bookingStateHandler = new BookingStateHandler(scanner, bookingService, applicationStateHolder);

FlightService flightService = getFlightService(applicationStateHolder, scanner);
FlightStateHandler flightStateHandler = new FlightStateHandler(scanner, flightService);

bookingSystem.printPlane();
printKeyboard();
System.out.print("Choose action: ");

while (true) {
String choice = scanner.nextLine();

switch (choice) {
case "I" -> {
bookingSystem.getBookingFlight();
printKeyboard();
System.out.print("Choose action: ");
}

case "B" -> {
bookingSystem.bookASeat();
Utils.clearTerminal();
bookingSystem.printPlane();
printKeyboard();
System.out.print("Choose action: ");
}

case "Q" -> System.exit(0);
switch (applicationStateHolder.getState()) {
case FLIGHT_LIST -> flightStateHandler.handle();

case BOOKING_STATE -> bookingStateHandler.handle();
}
}

Expand All @@ -47,20 +44,25 @@ public static void main(String[] args) {
}
}

public static void printKeyboard() {
System.out.println("\n[I] - Get booking info | [B] - Book a seat | [Q] - Quit");

public static FlightService getFlightService(final ApplicationStateHolder applicationStateHolder, final Scanner scanner) {
Map<Integer, Flight> flights = FlightGenerator.getFlights();

FlightRepository flightRepository = new FlightRepository(flights);

return new FlightService(applicationStateHolder, flightRepository, scanner);
}


public static BookingSystem getBookingSystem(final Scanner scanner) throws Exception {
Map<String, Booking> data = BookingDbManager.getData();
public static BookingService getBookingSystem(final Scanner scanner, final ApplicationStateHolder applicationStateHolder) throws Exception {
Map<Integer, Map<String, Booking>> data = BookingDbManager.getData();

BookingRepository bookingRepository = new BookingRepository(data);

UserInputService userInputService = new UserInputService(scanner, bookingRepository);

PlaneDisplayService planeDisplayService = new PlaneDisplayService();

return new BookingSystem(userInputService, bookingRepository, planeDisplayService);
return new BookingService(userInputService, bookingRepository, planeDisplayService, applicationStateHolder);
}
}
95 changes: 0 additions & 95 deletions src/main/java/lessons/lesson06/BookingSystem.java

This file was deleted.

58 changes: 55 additions & 3 deletions src/main/java/lessons/lesson06/db/Booking.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,63 @@
package lessons.lesson06.db;

import lessons.lesson06.utils.BookingStatus;
import lessons.lesson06.utils.PlaceClassEnum;

public record Booking(String code, String fio, PlaceClassEnum placeClass) {
import java.time.LocalDateTime;

public class Booking {
private final String code;
private final String fio;
private final PlaceClassEnum placeClass;
private final Integer flightId;
private final LocalDateTime bookedAt;
private BookingStatus status;

public Booking(String code, String fio, PlaceClassEnum placeClass, Integer flightId, LocalDateTime bookedAt, BookingStatus status) {
this.code = code;
this.fio = fio;
this.placeClass = placeClass;
this.flightId = flightId;
this.bookedAt = bookedAt;
this.status = status;
}

public Booking(String code, String fio, PlaceClassEnum placeClass, Integer flightId, LocalDateTime bookedAt) {
this.code = code;
this.fio = fio;
this.placeClass = placeClass;
this.flightId = flightId;
this.bookedAt = bookedAt;
this.status = BookingStatus.BOOKED;
}

public LocalDateTime getBookedAt() {
return bookedAt;
}

public String getCode() {
return code;
}

public Integer getFlightId() {
return this.flightId;
}

public BookingStatus getStatus() {
return this.status;
}

public void setStatus(final BookingStatus status) {
this.status = status;
}


@Override
public String toString() {
return String.format("Seat code: %s\nFio: %s\nClass: %s", code, fio, placeClass);
return String.format("Seat code: %s\nFio: %s\nClass: %s\nBooked at: %s\nStatus: %s", code, fio, placeClass, bookedAt, status);
}

public String toDbString() {
return String.format("%s;%s;%s;%s;%s;%s", code, fio, placeClass, flightId, bookedAt, status);
}
}
}
Loading