Changes between Version 4 and Version 5 of Faza4


Ignore:
Timestamp:
06/11/26 13:32:35 (6 days ago)
Author:
231042
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Faza4

    v4 v5  
    3030* '''Назив:''' `sp_buy_ticket(int4, int4)`
    3131* '''Опис:''' Процедура која ја менаџира трансакцијата за купување билет. Проверува достапност, креира резервација и го поврзува корисникот со генерираниот билет.
     32{{{
     33CREATE OR REPLACE PROCEDURE public.sp_buy_ticket(IN p_user_id integer, IN p_perf_id integer)
     34 LANGUAGE plpgsql
     35AS $procedure$
     36DECLARE
     37    v_ticket_id INT;
     38BEGIN
     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;
    3242
     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   
     55END; $procedure$
     56;
     57
     58}}}
    3359* '''Пример за повик:''' `CALL public.sp_buy_ticket(1, 105);`
    3460
     
    3662* '''Назив:''' `fn_check_availability(int4)`
    3763* '''Опис:''' Функција која за даден ID на настан или сектор брзо проверува и го враќа преостанатиот број на слободни места, спречувајќи "overbooking".
     64{{{
     65CREATE OR REPLACE FUNCTION public.fn_check_availability(p_performance_id integer)
     66 RETURNS integer
     67 LANGUAGE plpgsql
     68AS $function$
     69DECLARE
     70    v_available_count INT;
     71BEGIN
     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;
     76END; $function$
     77;
     78
     79}}}