| Version 1 (modified by , 27 hours ago) ( diff ) |
|---|
Use-case 0012 - Book Appointment for Viewing
Initiating actor: Client
Other actors: Agent
Description:
A client books an appointment to physically view an apartment unit. This reserves a timeslot with an agent and marks the slot as booked.
Scenario:
- Client navigates to booking page for unit 101 in Golden Tower.
- System displays available agents and timeslots:
SELECT a.agent_id, a.name AS agent_name, a.email, t.timeslot_id, t.date, t.time_start, t.time_end FROM agent a JOIN timeslot t ON a.agent_id = t.agent_id WHERE t.status = 'Available' AND t.date >= CURRENT_DATE ORDER BY a.name, t.date, t.time_start;
- Client selects agent "Teodora" and timeslot "Jan 9, 2025 at 10:00 AM".
- System displays booking confirmation form with unit, date/time, and agent details.
- Client enters their information (name, email and phone number): Marko Petrovski, marko.p@…, +389 70 123 456.
- System creates a client record if there are no previous records with the same email:
INSERT INTO client (name, email, phone) VALUES ('Marko Petrovski', 'marko.p@gmail.com', '+389 70 123 456') ON CONFLICT (email) DO NOTHING;
- Client clicks "Confirm Appointment".
- System verifies that the timeslot is available:
SELECT status FROM timeslot WHERE timeslot_id = ( SELECT timeslot_id FROM timeslot WHERE date = '2025-01-10' AND time_start = '10:00:00' AND agent_id = (SELECT agent_id FROM agent WHERE name = 'Teodora') );
- System creates the appointment:
INSERT INTO appointment (status, client_id, unit_id, timeslot_id, agent_id) VALUES ( 'Scheduled', (SELECT client_id FROM client WHERE email = 'marko.p@gmail.com'), ( SELECT unit_id FROM unit WHERE unit_number = '101' AND floor_id = ( SELECT floor_id FROM floor WHERE building_id = (SELECT building_id FROM building WHERE name = 'Golden Tower') AND floor_number = 1) ), ( SELECT timeslot_id FROM timeslot WHERE date = '2025-01-10' AND time_start = '10:00:00' AND agent_id = (SELECT agent_id FROM agent WHERE name = 'Teodora') ), (SELECT agent_id FROM agent WHERE name = 'Teodora') );
- System updates timeslot to booked:
UPDATE timeslot SET status = 'Booked' WHERE timeslot_id = (SELECT timeslot_id FROM timeslot WHERE date = '2025-01-10' AND time_start = '10:00:00' AND agent_id = (SELECT agent_id FROM agent WHERE name = 'Teodora'));
- System displays confirmation with appointment details.
Note:
See TracWiki
for help on using the wiki.
