Changes between Version 31 and Version 32 of konceptualenDizajnLogickiFizicki


Ignore:
Timestamp:
06/26/25 00:03:14 (42 hours ago)
Author:
213209
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • konceptualenDizajnLogickiFizicki

    v31 v32  
    3131
    3232== Тригери
    33 [[Image(Validate preorder price trigger.txt)]]
     33{{{
     34CREATE OR REPLACE FUNCTION trg_validate_preorder_price()
     35RETURNS TRIGGER AS $$
     36DECLARE
     37    v_menu_price NUMERIC;
     38    v_restaurant_id INTEGER;
     39BEGIN
     40    SELECT restaurantid INTO v_restaurant_id
     41    FROM reservations
     42    WHERE reservationid = NEW.reservation_id;
     43
     44    IF NOT FOUND THEN
     45        RAISE EXCEPTION 'Reservation ID % not found', NEW.reservation_id;
     46    END IF;
     47
     48    SELECT price INTO v_menu_price
     49    FROM menus
     50    WHERE item_name = NEW.preordered_item_name AND restaurant_id = v_restaurant_id;
     51
     52    IF NOT FOUND THEN
     53        RAISE EXCEPTION 'Menu item "%" not found for restaurant ID %', NEW.preordered_item_name, v_restaurant_id;
     54    END IF;
     55
     56    IF NEW.quantity <= 0 THEN
     57        RAISE EXCEPTION 'Invalid quantity for item "%": must be greater than 0', NEW.preordered_item_name;
     58    END IF;
     59
     60    IF NEW.price_at_order <> v_menu_price THEN
     61        RAISE EXCEPTION 'Price mismatch for item "%": expected %, got %',
     62            NEW.preordered_item_name, v_menu_price, NEW.price_at_order;
     63    END IF;
     64
     65    RETURN NEW;
     66END;
     67$$ LANGUAGE plpgsql;
     68
     69CREATE TRIGGER validate_preorder_price_trigger
     70BEFORE INSERT OR UPDATE ON reservation_preordered_items
     71FOR EACH ROW
     72EXECUTE FUNCTION trg_validate_preorder_price();
     73
     74--Test cases
     75
     76INSERT INTO reservation_preordered_items (reservation_id, preordered_item_name, quantity, price_at_order)
     77VALUES (22, 'California Roll', 1, 5.99);
     78
     79INSERT INTO reservation_preordered_items (reservation_id, preordered_item_name, quantity, price_at_order)
     80VALUES (14, 'California Roll', 1, 5.99);
     81
     82INSERT INTO reservation_preordered_items (reservation_id, preordered_item_name, quantity, price_at_order)
     83VALUES (14, 'Roll', 1, 8.99);
     84
     85INSERT INTO reservation_preordered_items (reservation_id, preordered_item_name, quantity, price_at_order)
     86VALUES (14, 'California Roll', 0, 8.99);
     87}}}
    3488
    3589== Погледи(Views)