Changes between Initial Version and Version 1 of UseCase0002


Ignore:
Timestamp:
06/18/26 20:25:41 (3 days ago)
Author:
223091
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase0002

    v1 v1  
     1= Use-case 0002 - Create reservation request =
     2
     3'''Initiating actor:'''
     4
     5Room Requester
     6
     7'''Other actors:'''
     8
     9Reservation Approver
     10
     11'''Description of the use-case goals:'''
     12
     13The goal of this use case is to allow a room requester to create a new reservation request. The reservation may include only a room, only equipment, or both a room and equipment. The system first checks whether the selected room is available for the requested date and time interval. If the requested equipment is not permanently assigned to the room, the system can use equipment from the general stock. The database is modified by inserting a new record into the reservations table and, when equipment is requested, inserting records into the reservation_equipment table.
     14
     15'''Scenario:'''
     16
     17The Room Requester selects a room, date, start time, and end time.
     18The system checks whether the selected room is available in the requested time interval.
     19The Room Requester optionally selects equipment items and quantities.
     20The system checks whether the requested equipment exists and whether the requested quantities are valid.
     21The system creates a reservation with status pending.
     22The system stores the requested equipment for the reservation.
     23The system displays the created reservation request and its pending status.
     24
     25'''SQL commands used by the system:'''
     26
     27Check whether the selected room is available:
     28
     29{{{
     30SELECT
     31r.room_id,
     32r.room_code,
     33r.capacity,
     34r.type
     35FROM project.rooms r
     36WHERE r.room_code = 'B1-101'
     37AND NOT EXISTS (
     38SELECT 1
     39FROM project.reservations res
     40WHERE res.room_id = r.room_id
     41AND res.reservation_date = DATE '2026-02-15'
     42AND res.status IN ('pending', 'approved')
     43AND TIME '10:00' < res.end_time
     44AND TIME '12:00' > res.start_time
     45);
     46}}}
     47
     48Check available equipment stock:
     49
     50{{{
     51SELECT
     52equipment_id,
     53name,
     54stock_quantity
     55FROM project.equipment
     56WHERE name IN ('HDMI Cable', 'Extension Cable');
     57}}}
     58
     59Create a reservation request for a room and additional equipment:
     60
     61{{{
     62WITH new_reservation AS (
     63INSERT INTO project.reservations (
     64room_id,
     65user_id,
     66reservation_date,
     67start_time,
     68end_time,
     69status
     70)
     71SELECT
     72r.room_id,
     73u.user_id,
     74DATE '2026-02-15',
     75TIME '10:00',
     76TIME '12:00',
     77'pending'
     78FROM project.rooms r
     79JOIN project.users u
     80ON u.username = 'nikola'
     81WHERE r.room_code = 'B1-101'
     82AND NOT EXISTS (
     83SELECT 1
     84FROM project.reservations res
     85WHERE res.room_id = r.room_id
     86AND res.reservation_date = DATE '2026-02-15'
     87AND res.status IN ('pending', 'approved')
     88AND TIME '10:00' < res.end_time
     89AND TIME '12:00' > res.start_time
     90)
     91RETURNING reservation_id
     92)
     93INSERT INTO project.reservation_equipment (
     94reservation_id,
     95equipment_id,
     96requested_quantity
     97)
     98SELECT
     99nr.reservation_id,
     100e.equipment_id,
     101requested_items.requested_quantity
     102FROM new_reservation nr
     103JOIN (
     104VALUES
     105('HDMI Cable', 2),
     106('Extension Cable', 1)
     107) AS requested_items(equipment_name, requested_quantity)
     108ON TRUE
     109JOIN project.equipment e
     110ON e.name = requested_items.equipment_name
     111RETURNING reservation_id, equipment_id, requested_quantity;
     112}}}
     113
     114Show the created reservation with requested equipment:
     115
     116{{{
     117SELECT
     118res.reservation_id,
     119res.reservation_date,
     120res.start_time,
     121res.end_time,
     122res.status,
     123r.room_code,
     124u.full_name AS requester_name,
     125e.name AS requested_equipment,
     126req.requested_quantity
     127FROM project.reservations res
     128JOIN project.users u
     129ON u.user_id = res.user_id
     130LEFT JOIN project.rooms r
     131ON r.room_id = res.room_id
     132LEFT JOIN project.reservation_equipment req
     133ON req.reservation_id = res.reservation_id
     134LEFT JOIN project.equipment e
     135ON e.equipment_id = req.equipment_id
     136WHERE res.reservation_date = DATE '2026-02-15'
     137AND res.start_time = TIME '10:00'
     138AND res.end_time = TIME '12:00'
     139AND u.username = 'nikola'
     140ORDER BY res.reservation_id, e.name;
     141}}}