Changes between Version 1 and Version 2 of Triggers


Ignore:
Timestamp:
08/31/25 23:27:45 (43 hours ago)
Author:
222004
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Triggers

    v1 v2  
    66\\
    77**Што прави:** Автоматски поставува last_changed на денешен датум и спречува quantity < 0.\\
    8 **Кога се активира:** Пред INSERT и пред UPDATE.\\
     8**Кога се активира:** Пред INSERT или UPDATE на табелата inventory_brandedmedicine.\\
    99**Зошто е корисен:** Осигурува конзистентност на залихата и забрана за нелогични вредности.\\
    1010
     
    4040\\
    4141**Што прави:** Додава поени на clubcard ако payment.status = 'завршено'.  \\
    42 **Кога се активира:** По INSERT или UPDATE.  \\
     42**Кога се активира:** По INSERT или UPDATE на табелата payment.  \\
    4343**Зошто е корисен:** Автоматска интеграција на лојалност со финансиски трансакции.  \\
    4444
     
    7474\\
    7575**Што прави:** Ако verification_status = 'верифицирано', тогаш client.is_verified = TRUE; ако е 'одбиено' → FALSE.  \\
    76 **Кога се активира:** По INSERT или UPDATE.  \\
     76**Кога се активира:** По INSERT или UPDATE на табелата sensitiveclientdata.  \\
    7777**Зошто е корисен:** Автоматски ја усогласува регулаторната состојба на клиентот со flag-от во Client. \\
    7878
     
    104104\\
    105105**Што прави:** Спречува интеракција лек-со-себе, и редоследува пар (id1, id2) така што id1 < id2.  \\
    106 **Кога се активира:** Пред INSERT и UPDATE.  \\
     106**Кога се активира:** Пред INSERT или UPDATE на табелата medicineinteraction.  \\
    107107**Зошто е корисен:** Гарантира уникатни и чисти парови лекови.  \\
    108108
     
    146146\\
    147147**Што прави:** Кога се менува inventory_brandedmedicine, автоматски додава записи во pharmacy_catalog за да гарантира дека секој производ што е во залиха е и во каталогот на аптеката.  \\
    148 **Кога се активира:** По INSERT или UPDATE на quantity.  \\
     148**Кога се активира:** По INSERT или UPDATE на табелата inventory_brandedmedicine.  \\
    149149**Зошто е корисен:** Ја одржува усогласеноста меѓу залихи и каталог, без рачна интервенција.  \\
    150150
     
    185185
    186186}}}
     187
     188----
     189
     190== **6) Тригер за блокирање на клиент со повеќе неуспешни плаќања** \\
     191\\
     192**Што прави:** Кога клиент има 3 или повеќе неуспешни плаќања во последните 10 дена, автоматски го поставува is_verified = FALSE во табелата Client. \\
     193**Кога се активира:** По INSERT или UPDATE на табелата payment кога статусот е „неуспешно“. \\
     194**Зошто е корисен:** Спречува понатамошни обиди за нарачки и злоупотреба од клиенти со повеќекратни неуспешни трансакции, со што ја зголемува безбедноста и стабилноста на системот. \\
     195
     196{{{
     197
     198CREATE OR REPLACE FUNCTION synergymed.fn_block_client_after_failed_payment()
     199RETURNS TRIGGER
     200LANGUAGE plpgsql
     201AS $$
     202DECLARE
     203  v_failures INT;
     204BEGIN
     205  SELECT COUNT(*) INTO v_failures
     206  FROM synergymed.payment p
     207  WHERE p.client_id = NEW.client_id
     208    AND p.status = 'неуспешно'
     209    AND p.payment_date >= (CURRENT_DATE - INTERVAL '10 days');
     210
     211  IF v_failures >= 3 THEN
     212    UPDATE synergymed.client
     213    SET is_verified = FALSE
     214    WHERE user_id = NEW.client_id;
     215  END IF;
     216
     217  RETURN NEW;
     218END;
     219$$;
     220
     221DROP TRIGGER IF EXISTS trg_block_client_after_failed_payment ON synergymed.payment;
     222
     223CREATE TRIGGER trg_block_client_after_failed_payment
     224AFTER INSERT OR UPDATE OF status ON synergymed.payment
     225FOR EACH ROW
     226WHEN (NEW.status = 'неуспешно')
     227EXECUTE FUNCTION synergymed.fn_block_client_after_failed_payment();
     228
     229}}}