Changes between Version 10 and Version 11 of DatabaseProgramming
- Timestamp:
- 05/30/26 17:34:24 (2 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
DatabaseProgramming
v10 v11 63 63 64 64 Функцијата го пресметува вкупниот приход за даден настан преку сумирање на сите завршени плаќања поврзани со тикетите за тој настан. Ја имплементира бизнис логиката за финансиски извештај и се користи при генерирање на статистики за организаторите на настани. 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 BIGINT74 )75 RETURNS BOOLEAN AS $$76 BEGIN77 IF NOT EXISTS (78 SELECT 1 FROM ticket79 WHERE app_userid = p_userid80 AND eventid = p_eventid81 AND status IN ('USED')82 ) THEN83 RETURN FALSE;84 END IF;85 86 IF EXISTS (87 SELECT 1 FROM review88 WHERE app_userid = p_userid89 AND eventid = p_eventid90 ) THEN91 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 -- Резултат: true100 }}}101 102 Функцијата проверува дали корисникот смее да остави рецензија за даден настан — враќа TRUE само ако корисникот има искористен тикет за тој настан и сè уште нема оставено рецензија. Ја имплементира бизнис логиката за заштита од лажни рецензии и се користи во процедурата proc_ostavi_review и тригерот trig_review.103 65 104 66 ---- … … 508 470 ) LANGUAGE plpgsql AS $$ 509 471 BEGIN 472 -- Proveri dali nastanot postoi 510 473 IF NOT EXISTS (SELECT 1 FROM event WHERE id = p_eventid) THEN 511 474 RAISE EXCEPTION 'Nastanot % ne postoi', p_eventid; 512 475 END IF; 513 476 477 -- Proveri dali nastanot e zavrshеn 514 478 IF NOT EXISTS (SELECT 1 FROM event WHERE id = p_eventid AND end_date < CURRENT_DATE) THEN 515 479 RAISE EXCEPTION 'Ne moze da se ostavi review za nastan koj ne e zavrshen'; 516 480 END IF; 517 481 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 522 502 IF p_rating NOT BETWEEN 1 AND 5 THEN 523 503 RAISE EXCEPTION 'Ratingot mora da bide pomegu 1 i 5'; 524 504 END IF; 525 505 506 -- Vmetni review 526 507 INSERT INTO review (rating, review_comment, app_userid, eventid) 527 508 VALUES (p_rating, p_comment, p_userid, p_eventid); … … 540 521 }}} 541 522 542 Процедурата го обработува оставањето рецензија за минат настан — проверува дали настанот постои и е завршен, го користи fn_moze_review за да проверидали корисникот смее да остави рецензија и дали рејтингот е во валиден опсег. Ја имплементира бизнис логиката за систем на рецензии во апликацијата.523 Процедурата го обработува оставањето рецензија за минат настан — проверува дали настанот постои и е завршен, проверува дали корисникот смее да остави рецензија и дали рејтингот е во валиден опсег. Ја имплементира бизнис логиката за систем на рецензии во апликацијата. 543 524 544 525 ----
