Changes between Version 4 and Version 5 of Faza4
- Timestamp:
- 06/11/26 13:32:35 (6 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Faza4
v4 v5 30 30 * '''Назив:''' `sp_buy_ticket(int4, int4)` 31 31 * '''Опис:''' Процедура која ја менаџира трансакцијата за купување билет. Проверува достапност, креира резервација и го поврзува корисникот со генерираниот билет. 32 {{{ 33 CREATE OR REPLACE PROCEDURE public.sp_buy_ticket(IN p_user_id integer, IN p_perf_id integer) 34 LANGUAGE plpgsql 35 AS $procedure$ 36 DECLARE 37 v_ticket_id INT; 38 BEGIN 39 IF NOT EXISTS (SELECT 1 FROM users WHERE user_id = p_user_id) THEN 40 RAISE EXCEPTION 'Корисникот со ID % не постои!', p_user_id; 41 END IF; 32 42 43 SELECT ticket_id INTO v_ticket_id FROM ticket 44 WHERE performance_id = p_perf_id AND status = 'available' 45 LIMIT 1; 46 47 IF v_ticket_id IS NULL THEN 48 RAISE EXCEPTION 'Нема слободни карти!'; 49 END IF; 50 51 UPDATE ticket 52 SET user_id = p_user_id, status = 'sold' 53 WHERE ticket_id = v_ticket_id; 54 55 END; $procedure$ 56 ; 57 58 }}} 33 59 * '''Пример за повик:''' `CALL public.sp_buy_ticket(1, 105);` 34 60 … … 36 62 * '''Назив:''' `fn_check_availability(int4)` 37 63 * '''Опис:''' Функција која за даден ID на настан или сектор брзо проверува и го враќа преостанатиот број на слободни места, спречувајќи "overbooking". 64 {{{ 65 CREATE OR REPLACE FUNCTION public.fn_check_availability(p_performance_id integer) 66 RETURNS integer 67 LANGUAGE plpgsql 68 AS $function$ 69 DECLARE 70 v_available_count INT; 71 BEGIN 72 SELECT COUNT(*) INTO v_available_count 73 FROM ticket 74 WHERE performance_id = p_performance_id AND status = 'available'; 75 RETURN v_available_count; 76 END; $function$ 77 ; 78 79 }}}
