| 101 | | create or replace procedure review_booking(r_booking_id bigint,rating int,comment varchar) |
| 102 | | as $$ |
| 103 | | declare |
| 104 | | v_status varchar; |
| 105 | | guest_id bigint; |
| 106 | | property bigint; |
| 107 | | begin |
| 108 | | select b.booking_status,b.guest_id,r.property_id |
| 109 | | into v_status,guest_id,property |
| 110 | | from bookings b |
| 111 | | join rooms r on b.room_id = r.room_id |
| 112 | | where booking_id = r_booking_id; |
| 113 | | |
| 114 | | |
| 115 | | |
| 116 | | if v_status <> 'COMPLETED' then |
| 117 | | raise exception 'Can only review completed bookings'; |
| 118 | | end if; |
| 119 | | insert into reviews(booking_id, guest_id, property_id, rating, comment) values |
| 120 | | (r_booking_id,guest_id, |
| 121 | | property, review_booking.rating,review_booking.comment); |
| 122 | | |
| 123 | | end; |
| 124 | | $$ language plpgsql; |
| | 101 | CREATE OR REPLACE PROCEDURE review_booking( |
| | 102 | p_booking_id BIGINT, |
| | 103 | p_rating INT, |
| | 104 | p_comment VARCHAR |
| | 105 | ) |
| | 106 | LANGUAGE plpgsql |
| | 107 | AS $$ |
| | 108 | DECLARE |
| | 109 | v_status VARCHAR; |
| | 110 | v_guest_id BIGINT; |
| | 111 | v_property_id BIGINT; |
| | 112 | BEGIN |
| | 113 | SELECT |
| | 114 | b.booking_status, |
| | 115 | b.guest_id, |
| | 116 | r.property_id |
| | 117 | INTO |
| | 118 | v_status, |
| | 119 | v_guest_id, |
| | 120 | v_property_id |
| | 121 | FROM bookings b |
| | 122 | JOIN rooms r ON b.room_id = r.room_id |
| | 123 | WHERE b.booking_id = p_booking_id; |
| | 124 | |
| | 125 | IF NOT FOUND THEN |
| | 126 | RAISE EXCEPTION 'Booking with id % does not exist.', p_booking_id; |
| | 127 | END IF; |
| | 128 | |
| | 129 | IF v_status <> 'COMPLETED' THEN |
| | 130 | RAISE EXCEPTION 'Can only review completed bookings.'; |
| | 131 | END IF; |
| | 132 | |
| | 133 | IF p_rating < 1 OR p_rating > 5 THEN |
| | 134 | RAISE EXCEPTION 'Rating must be between 1 and 5.'; |
| | 135 | END IF; |
| | 136 | |
| | 137 | INSERT INTO reviews ( |
| | 138 | booking_id, |
| | 139 | guest_id, |
| | 140 | property_id, |
| | 141 | rating, |
| | 142 | comment |
| | 143 | ) |
| | 144 | VALUES ( |
| | 145 | p_booking_id, |
| | 146 | v_guest_id, |
| | 147 | v_property_id, |
| | 148 | p_rating, |
| | 149 | p_comment |
| | 150 | ); |
| | 151 | END; |
| | 152 | $$; |