Changes between Version 10 and Version 11 of DatabaseProgramming


Ignore:
Timestamp:
05/30/26 17:34:24 (2 weeks ago)
Author:
231070
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseProgramming

    v10 v11  
    6363
    6464Функцијата го пресметува вкупниот приход за даден настан преку сумирање на сите завршени плаќања поврзани со тикетите за тој настан. Ја имплементира бизнис логиката за финансиски извештај и се користи при генерирање на статистики за организаторите на настани.
    65 
    66 ----
    67 
    68 === fn_moze_review(p_userid, p_eventid) - Дозвола за оставање рецензија
    69 
    70 {{{
    71 CREATE OR REPLACE FUNCTION fn_moze_review(
    72     p_userid  BIGINT,
    73     p_eventid BIGINT
    74 )
    75 RETURNS BOOLEAN AS $$
    76 BEGIN
    77     IF NOT EXISTS (
    78         SELECT 1 FROM ticket
    79         WHERE app_userid = p_userid
    80           AND eventid    = p_eventid
    81           AND status IN ('USED')
    82     ) THEN
    83         RETURN FALSE;
    84     END IF;
    85 
    86     IF EXISTS (
    87         SELECT 1 FROM review
    88         WHERE app_userid = p_userid
    89           AND eventid    = p_eventid
    90     ) THEN
    91         RETURN FALSE;
    92     END IF;
    93 
    94     RETURN TRUE;
    95 END;
    96 $$ LANGUAGE plpgsql;
    97 
    98 SELECT fn_moze_review(28547, 35) AS moze_review;
    99 -- Резултат: true
    100 }}}
    101 
    102 Функцијата проверува дали корисникот смее да остави рецензија за даден настан — враќа TRUE само ако корисникот има искористен тикет за тој настан и сè уште нема оставено рецензија. Ја имплементира бизнис логиката за заштита од лажни рецензии и се користи во процедурата proc_ostavi_review и тригерот trig_review.
    10365
    10466----
     
    508470) LANGUAGE plpgsql AS $$
    509471BEGIN
     472    -- Proveri dali nastanot postoi
    510473    IF NOT EXISTS (SELECT 1 FROM event WHERE id = p_eventid) THEN
    511474        RAISE EXCEPTION 'Nastanot % ne postoi', p_eventid;
    512475    END IF;
    513476
     477    -- Proveri dali nastanot e zavrshеn
    514478    IF NOT EXISTS (SELECT 1 FROM event WHERE id = p_eventid AND end_date < CURRENT_DATE) THEN
    515479        RAISE EXCEPTION 'Ne moze da se ostavi review za nastan koj ne e zavrshen';
    516480    END IF;
    517481
    518     IF NOT fn_moze_review(p_userid, p_eventid) THEN
    519         RAISE EXCEPTION 'Korisnikot % ne smee da ostavi review za event %', p_userid, p_eventid;
    520     END IF;
    521 
     482    -- Proveri dali korisnikot ima iskoristen tiket za toj event
     483    IF NOT EXISTS (
     484        SELECT 1 FROM ticket
     485        WHERE app_userid = p_userid
     486          AND eventid    = p_eventid
     487          AND status     = 'USED'
     488    ) THEN
     489        RAISE EXCEPTION 'Korisnikot % nema iskoristen tiket za event %', p_userid, p_eventid;
     490    END IF;
     491
     492    -- Proveri dali vekje ima ostaveno review
     493    IF EXISTS (
     494        SELECT 1 FROM review
     495        WHERE app_userid = p_userid
     496          AND eventid    = p_eventid
     497    ) THEN
     498        RAISE EXCEPTION 'Korisnikot % vekje ima review za event %', p_userid, p_eventid;
     499    END IF;
     500
     501    -- Proveri dali ratingot e validen
    522502    IF p_rating NOT BETWEEN 1 AND 5 THEN
    523503        RAISE EXCEPTION 'Ratingot mora da bide pomegu 1 i 5';
    524504    END IF;
    525505
     506    -- Vmetni review
    526507    INSERT INTO review (rating, review_comment, app_userid, eventid)
    527508    VALUES (p_rating, p_comment, p_userid, p_eventid);
     
    540521}}}
    541522
    542 Процедурата го обработува оставањето рецензија за минат настан — проверува дали настанот постои и е завршен, го користи fn_moze_review за да провери дали корисникот смее да остави рецензија и дали рејтингот е во валиден опсег. Ја имплементира бизнис логиката за систем на рецензии во апликацијата.
     523Процедурата го обработува оставањето рецензија за минат настан — проверува дали настанот постои и е завршен, проверува дали корисникот смее да остави рецензија и дали рејтингот е во валиден опсег. Ја имплементира бизнис логиката за систем на рецензии во апликацијата.
    543524
    544525----