top of page

Book Appointment LLD Question

Question is to design a booking service for appointment

  • there is bank and this bank is doing video kyc from (10am-12am)

  • the meeting duration is 15 minute each for example 10:00 to 10:15, 10:15 to 10:30

  • only 5 agents are available to take meeting


System should support these features

1. List of slots on a selected date.

2. Book the slot


we have to create to schema

1 slot

2 slotDate


package Test;

import java.time.LocalTime;

public class Slot {

	private LocalTime startTime;
	private LocalTime endTime;
	private Integer availableSlot;
	private Integer bookedSlotNumber;


	public LocalTime getStartTime() {
		return startTime;
	}

	public void setStartTime(LocalTime startTime) {
		this.startTime = startTime;
	}

	public LocalTime getEndTime() {
		return endTime;
	}

	public void setEndTime(LocalTime endTime) {
		this.endTime = endTime;
	}

	public Integer getAvailableSlot() {
		return availableSlot;
	}

	public void setAvailableSlot(Integer availableSlot) {
		this.availableSlot = availableSlot;
	}

	public Integer getBookedSlotNumber() {
		return bookedSlotNumber;
	}

	public void setBookedSlotNumber(Integer bookedSlotNumber) {
		this.bookedSlotNumber = bookedSlotNumber;
	}

	public Slot(LocalTime startTime, LocalTime endTime) {
		this.startTime = startTime;
		this.endTime = endTime;
		this.availableSlot = 5;
		this.bookedSlotNumber = 0;
	}
}



package Test;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

public class Day {
	private LocalDate date;
	private List<Slot> slots;

	public LocalDate getDate() {
		return date;
	}

	public void setDate(LocalDate date) {
		this.date = date;
	}

	public List<Slot> getSlots() {
		return slots;
	}

	public void setSlots(List<Slot> slots) {
		this.slots = slots;
	}

	public List<Slot> getSlotsByDay(LocalDate currentDay) {
		if (currentDay.isEqual(date))
			return slots;
		return new ArrayList<Slot>();
	}

	public Day(LocalDate date, List<Slot> slots) {
		this.slots = slots;
		this.date = date;
	}
}


package Test;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

public class BookingService {
	private final List<Day> days;

	public BookingService() {
        days = new ArrayList<Day>();
		Day day_18 = new Day(LocalDate.of(2024, 5, 26), new ArrayList<>());
		Day day_19 = new Day(LocalDate.of(2024, 5, 27), new ArrayList<>());
		Day day_20 = new Day(LocalDate.of(2024, 5, 28), new ArrayList<>());

		createAndAddSlots(day_18);
		createAndAddSlots(day_19);
		createAndAddSlots(day_20);
		days.add(day_18);
		days.add(day_19);
		days.add(day_20);
	}

	private void createAndAddSlots(Day day18) {
		Slot slot1 = new Slot(LocalTime.of(10, 0), LocalTime.of(10, 15));
		Slot slot2 = new Slot(LocalTime.of(10, 15), LocalTime.of(10, 30));
		Slot slot3 = new Slot(LocalTime.of(10, 30), LocalTime.of(10, 45));
		Slot slot4 = new Slot(LocalTime.of(10, 45), LocalTime.of(11, 0));
		Slot slot5 = new Slot(LocalTime.of(11, 0), LocalTime.of(10, 15));
		Slot slot6 = new Slot(LocalTime.of(10, 15), LocalTime.of(10, 30));
		Slot slot7 = new Slot(LocalTime.of(10, 30), LocalTime.of(10, 45));
		Slot slot8 = new Slot(LocalTime.of(10, 45), LocalTime.of(12, 0));
		List<Slot> slots = new ArrayList<Slot>();
		slots.add(slot1);
		slots.add(slot2);
		slots.add(slot3);
		slots.add(slot4);
		slots.add(slot5);
		slots.add(slot6);
		slots.add(slot7);
		slots.add(slot8);
		day18.setSlots(slots);

	}

	public List<Slot> showSlots(LocalDate date) {
		for (Day day : days) {
			if (day.getDate().isEqual(date)) {
				return day.getSlotsByDay(date);
			}
		}
		return new ArrayList<Slot>();
	}

	public String bookSlot(LocalDate date, LocalTime startTime, LocalTime endTime) {
		List<Slot> slots = showSlots(date);
		for (Slot slot : slots) {
			if (slot.getStartTime().equals(startTime) && slot.getEndTime().equals(endTime)) {
				int availableSlots = slot.getAvailableSlot();
				if (availableSlots > 0) {
					slot.setAvailableSlot(availableSlots - 1);
					System.out.println("slot booked for date and time from: {} to: {}" + date + startTime + endTime);

				} else {
					System.out.println("Slot not available");
					throw new RuntimeException("Slot not available");
				}
			}
		}
		return "Success";
	}
}

package Test;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;

public class Test {

	public static void main(String[] args) {
		BookingService bookingService = new BookingService();
		List<Slot> slotList = bookingService.showSlots(LocalDate.of(2024, 5, 26));
		for (Slot slot : slotList) {
			System.out.println(slot.getStartTime().toString() + " " + slot.getEndTime().toString());
		}
		for (int i = 0; i < 6; i++)
			System.out.println(
					bookingService.bookSlot(LocalDate.of(2024, 5, 26), LocalTime.of(10, 0), LocalTime.of(10, 15)));
	}
}

Recent Posts

See All

1 Comment


Manbodh ratre
Manbodh ratre
Jul 16, 2024

please comment thread safety approach here

Like

Call 

7869617359

Email 

Follow

  • Facebook
  • Twitter
  • LinkedIn
  • Instagram
Never Miss a Post. Subscribe Now!

Thanks for submitting!

bottom of page