Hotel Booking System | LLD | Feedback welcomed
class Hotel
{	
	int id;
	String hotelName;
	Location location;
	HotelType hotelType;
	List<Room> roomsList;
	int numOfFloors;
	List<Ratings> ratings;
	List<String> facilities; //wifi,food,hot shower,24hrs electricity
}
class Location{
	int pin;
	String street;
	String area;
	String city;
	String country;
}
enum HotelType{
	
	LUXURY_RESORT,
	FIVE_STAR,
	THREE_STAR,
	ECONOMY
}

class Room{
	int roomId;
	int floorNum;
	RoomType roomType;
	RoomStatus roomStatus;
	Double roomPrice;

	List<Room> searchRoom(roomType);

}

enum RoomType{
	DELUXE, FAMILY_SUITE, STANDARD
}

enum RoomStatus{
	AVAILABLE,
	NOT_AVAILABLE,
	RESERVED,
	OCCUPIED
}

class Ratings
{
	int ratingId;
	int numOfStars; //ratings out of 5
	String comment;
	int userId;
}

class Booking{
	int bookingId;
	int userId;
	int hoteld;
	List<Integer> roomIds;
	LocalDateTime bookingCreationTime;
	Duration bookingDuration;
	double totalCostOfBooking;
	PaymentStatus paymentStatus;

	public int createBooking(userId,roomIds,bookingDuration,paymentStatus); //imp api
	public boolean cancelBooking(userId,roomIds); //imp api
	public List<Booking> getBookingHistory(userId);

}


class Account{
	int userId;
	String password;
	AccountStatus accountStatus;

	public void resetPassword(userId);
}

class Person{
	String personName;
	String email;
	String phoneNum;
	Account account;
	AccountType accountType;

	getAllBookings(userId); //self or receptionist

}

class Receptionist extends Person{
	Search searchObj;
	Booking bookingObj;

	public void checkInGuest(Booking booking);
	public void checkoutGuest(Booking booking);
}

enum AccountStatus{
	ACTIVE,
	CLOSED,
	CANCELED,
	BLACKLISTED,
	BLOCKED
}
enum AccountType{
	RECEPTIONIST, REGISTERED_USER, GUEST,ADMIN
}

class Search{
	public List<Room> searchRoom(RoomType roomType, Duration duration);
}

enum PaymentStatus{
	PENDING,
	COMPLETED,
	REFUNDED,
	CANCELED,
	FAILED
}
Comments (11)