Changes between Version 3 and Version 4 of DatabaseProgramming


Ignore:
Timestamp:
05/12/26 15:49:07 (2 weeks ago)
Author:
231035
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v3 v4  
    218218    $$;
    219219}}}
     220
     221== Create a booking
     222{{{
     223CREATE OR REPLACE PROCEDURE book_room(
     224    p_room_id        BIGINT,
     225    p_guest_id       BIGINT,
     226    p_check_in_date  DATE,
     227    p_check_out_date DATE,
     228    p_guests_count   INT,
     229    p_total_price    NUMERIC
     230)
     231LANGUAGE plpgsql
     232AS $$
     233BEGIN
     234    IF p_check_out_date <= p_check_in_date THEN
     235        RAISE EXCEPTION 'Check-out date must be after check-in date';
     236    END IF;
     237
     238    IF EXISTS (
     239        SELECT 1
     240        FROM bookings b
     241        WHERE b.room_id = p_room_id
     242          AND b.booking_status IN ('PENDING', 'CONFIRMED')
     243          AND daterange(b.check_in_date, b.check_out_date, '[)')
     244              && daterange(p_check_in_date, p_check_out_date, '[)')
     245    ) THEN
     246        RAISE EXCEPTION 'Room % is already booked for selected dates', p_room_id;
     247    END IF;
     248
     249    INSERT INTO bookings (
     250        room_id,
     251        guest_id,
     252        check_in_date,
     253        check_out_date,
     254        guests_count,
     255        total_price,
     256        booking_status
     257    )
     258    VALUES (
     259        p_room_id,
     260        p_guest_id,
     261        p_check_in_date,
     262        p_check_out_date,
     263        p_guests_count,
     264        p_total_price,
     265        'PENDING'
     266    );
     267
     268    RAISE NOTICE 'Booking created successfully';
     269END;
     270$$;
     271}}}