Changes between Version 19 and Version 20 of UseCaseModel/evaluation


Ignore:
Timestamp:
09/01/25 23:41:49 (3 days ago)
Author:
175012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCaseModel/evaluation

    v19 v20  
    135135== Примери за тригери
    136136
    137 1. Проверка на датумска логика
    138 {{{#!sql
    139 
    140 CREATE OR REPLACE FUNCTION project.validate_policy_dates()
     1371. Лог за бришење на клиенти (Customer)
     138{{{#!sql
     139
     140-- Табела за логирање
     141CREATE TABLE project_2425.Customer_log (
     142  log_id BIGSERIAL PRIMARY KEY,
     143  c_id BIGINT,
     144  name VARCHAR(100),
     145  email VARCHAR(255),
     146  deleted_at TIMESTAMP DEFAULT NOW()
     147);
     148
     149CREATE OR REPLACE FUNCTION log_customer_delete()
    141150RETURNS TRIGGER AS $$
    142151BEGIN
    143     IF NEW.e_date <= NEW.s_date THEN
    144         RAISE EXCEPTION 'End date must be after start date. Start: %, End: %', NEW.s_date, NEW.e_date;
    145     END IF;
    146     RETURN NEW;
     152  INSERT INTO project_2425.Customer_log(c_id, name, email)
     153  VALUES (OLD.c_id, OLD.name, OLD.email);
     154  RETURN OLD;
    147155END;
    148156$$ LANGUAGE plpgsql;
    149157
    150 CREATE TRIGGER trigger_validate_policy_dates
    151 BEFORE INSERT OR UPDATE ON project.policy
    152 FOR EACH ROW EXECUTE FUNCTION project.validate_policy_dates();
     158CREATE TRIGGER trg_log_customer_delete
     159AFTER DELETE ON project_2425.Customer
     160FOR EACH ROW
     161EXECUTE FUNCTION log_customer_delete();
    153162
    154163}}}
     
    190199}}}
    191200
    192 3. Формат на табели за колата
    193 
    194 {{{#!sql
    195         CREATE OR REPLACE FUNCTION validate_license_plate()
    196         RETURNS TRIGGER AS $$
    197         BEGIN
    198             -- Check if the license plate matches the expected format (XX-1234-XX)
    199             IF NEW.license_plate !~ '^[A-Z]{2}-\d{4}-[A-Z]{2}$' THEN
    200                 RAISE EXCEPTION 'Invalid license plate format: %', NEW.license_plate;
    201             END IF;
    202             RETURN NEW;
    203         END;
    204         $$ LANGUAGE plpgsql;
    205 
    206 
    207 CREATE TRIGGER trigger_validate_license_plate
    208 BEFORE INSERT OR UPDATE ON vehicles
     2013. Проверка дали возило е веќе осигурано (Auto_pol)
     202
     203{{{#!sql
     204        CREATE OR REPLACE FUNCTION check_vehicle_policy()
     205RETURNS TRIGGER AS $$
     206DECLARE
     207  active_count INT;
     208BEGIN
     209  SELECT COUNT(*) INTO active_count
     210  FROM project_2425.Auto_pol ap
     211  JOIN project_2425.Policy pol ON pol.p_id = ap.pol_id
     212  WHERE ap.v_id = NEW.v_id
     213    AND pol.s_date <= CURRENT_DATE
     214    AND pol.e_date >= CURRENT_DATE;
     215
     216  IF active_count > 0 THEN
     217    RAISE EXCEPTION 'Возилото веќе има активна полиса';
     218  END IF;
     219
     220  RETURN NEW;
     221END;
     222$$ LANGUAGE plpgsql;
     223
     224CREATE TRIGGER trg_check_vehicle_policy
     225BEFORE INSERT ON project_2425.Auto_pol
    209226FOR EACH ROW
    210 EXECUTE FUNCTION validate_license_plate_format();
     227EXECUTE FUNCTION check_vehicle_policy();
    211228}}}
    212229