Changes between Version 19 and Version 20 of UseCaseModel/evaluation
- Timestamp:
- 09/01/25 23:41:49 (3 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
UseCaseModel/evaluation
v19 v20 135 135 == Примери за тригери 136 136 137 1. Проверка на датумска логика 138 {{{#!sql 139 140 CREATE OR REPLACE FUNCTION project.validate_policy_dates() 137 1. Лог за бришење на клиенти (Customer) 138 {{{#!sql 139 140 -- Табела за логирање 141 CREATE 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 149 CREATE OR REPLACE FUNCTION log_customer_delete() 141 150 RETURNS TRIGGER AS $$ 142 151 BEGIN 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; 147 155 END; 148 156 $$ LANGUAGE plpgsql; 149 157 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(); 158 CREATE TRIGGER trg_log_customer_delete 159 AFTER DELETE ON project_2425.Customer 160 FOR EACH ROW 161 EXECUTE FUNCTION log_customer_delete(); 153 162 154 163 }}} … … 190 199 }}} 191 200 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 201 3. Проверка дали возило е веќе осигурано (Auto_pol) 202 203 {{{#!sql 204 CREATE OR REPLACE FUNCTION check_vehicle_policy() 205 RETURNS TRIGGER AS $$ 206 DECLARE 207 active_count INT; 208 BEGIN 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; 221 END; 222 $$ LANGUAGE plpgsql; 223 224 CREATE TRIGGER trg_check_vehicle_policy 225 BEFORE INSERT ON project_2425.Auto_pol 209 226 FOR EACH ROW 210 EXECUTE FUNCTION validate_license_plate_format();227 EXECUTE FUNCTION check_vehicle_policy(); 211 228 }}} 212 229