Changes between Version 2 and Version 3 of dbdevelopment
- Timestamp:
- 01/31/26 12:26:22 (30 hours ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
dbdevelopment
v2 v3 14 14 ==== Тригери ==== 15 15 16 BEFORE INSERT тригер на enrollment за автоматско доделување на активната верзија на curse (course version). 16 17 {{{ 17 18 CREATE OR REPLACE FUNCTION set_active_course_version_on_enrollment() … … 48 49 ==== Функции / Stored Procedures ==== 49 50 51 Функција за креирање на нов enrollment. При креирање се зема најновата активна верзија на курсот. 50 52 {{{ 51 53 CREATE OR REPLACE FUNCTION create_enrollment_for_active_version(p_user_id INTEGER, p_course_id INTEGER) … … 80 82 ==== Погледи (Views) ==== 81 83 84 Поглед за генерирање на основни информации за кои enrollments имаат застарена верзија од курсот, а кои најнова. 82 85 {{{ 83 86 CREATE OR REPLACE VIEW enrollments_with_active_version AS … … 89 92 ct.title_short AS course_title, 90 93 cv.id AS course_version_id, 91 cv.version_number ,92 cv.active ,93 e.enrollment_purchase_date ,94 e.status 94 cv.version_number AS course_version_number, 95 cv.active AS is_version_active, 96 e.enrollment_purchase_date AS purchase_date, 97 e.status AS enrollment_status 95 98 FROM enrollment e 96 JOIN "user"u ON e.user_id = u.id99 JOIN user u ON e.user_id = u.id 97 100 JOIN course c ON e.course_id = c.id 98 101 JOIN course_version cv ON e.course_version_id = cv.id … … 115 118 ==== Тригери ==== 116 119 120 BEFORE UPDATE тригер за атрибутот active во course_version, со цел осигурување дека постои само една активна верзија од курсот. 117 121 {{{ 118 122 CREATE OR REPLACE FUNCTION ensure_single_active_version() 119 RETURNS TRIGGER AS $$ 123 RETURNS TRIGGER 124 AS $$ 120 125 BEGIN 121 126 IF NEW.active = TRUE THEN … … 129 134 RETURN NEW; 130 135 END; 131 $$ LANGUAGE plpgsql; 136 $$ 137 LANGUAGE plpgsql; 132 138 133 139 CREATE TRIGGER trg_ensure_single_active_version … … 138 144 }}} 139 145 146 BEFORE DELETE тригер за course version, со цел осигурување дека course version не може да биде избришано доколку веќе постојат enrollments за него. 140 147 {{{ 141 148 CREATE OR REPLACE FUNCTION prevent_version_deletion_with_active_enrollments() 142 RETURNS TRIGGER AS $$ 149 RETURNS TRIGGER 150 AS $$ 143 151 DECLARE 144 152 v_active_enrollments INTEGER; … … 154 162 RETURN OLD; 155 163 END; 156 $$ LANGUAGE plpgsql; 164 $$ 165 LANGUAGE plpgsql; 157 166 158 167 CREATE TRIGGER trg_prevent_version_deletion … … 164 173 ==== Погледи (Views) ==== 165 174 175 Поглед за преглед на курсевите со нивните најнови верзии и enrollments. 166 176 {{{ 167 177 CREATE OR REPLACE VIEW course_latest_versions AS … … 203 213 ==== Прилагодени домени (Custom Domains) ==== 204 214 215 Ограничување дека рејтинг мора да биде во доменот [1, 5] 205 216 {{{ 206 217 CREATE DOMAIN rating_scale AS INTEGER … … 212 223 ==== Тригери ==== 213 224 225 BEFORE INSERT тригер за review, каде се прекинува внесувањето на review доколку курсот (enrollment) не е завршен. 214 226 {{{ 215 227 CREATE OR REPLACE FUNCTION validate_review_before_insert() … … 247 259 ==== Погледи (Views) ==== 248 260 261 Поглед за преглед на секој курс со неговата просечна оценка и дистрибуција на оценки. 249 262 {{{ 250 263 CREATE OR REPLACE VIEW course_average_ratings AS … … 276 289 * Корисникот може да користи само една бесплатна консултација 277 290 * Може да се креира meeting_reminder за бесплатна консултација само ако корисникот сè уште не ја искористил 278 * После креирање на meeting_reminder за бесплатна консултација, флагот use r_used_free_consultation автоматски се поставува на TRUE291 * После креирање на meeting_reminder за бесплатна консултација, флагот used_free_consultation автоматски се поставува на TRUE 279 292 280 293 === Имплементација === … … 282 295 ==== Тригери ==== 283 296 297 BEFORE INSERT тригер на meeting reminder, каде не смее да се креира нов митинг и потсетување по емаил доколку корисникот веќе имал бесплатна консултација. 284 298 {{{ 285 299 CREATE OR REPLACE FUNCTION check_free_consultation_eligibility() … … 288 302 v_used_free_consultation BOOLEAN; 289 303 BEGIN 290 SELECT use r_used_free_consultation INTO v_used_free_consultation291 FROM "user"304 SELECT used_free_consultation INTO v_used_free_consultation 305 FROM _user 292 306 WHERE id = NEW.user_id; 293 307 … … 306 320 }}} 307 321 322 AFTER INSERT тригер на meeting reminder, каде одкако ќе се закаже состанокот да се маркира дека тој корисник го има искористено своето право за бесплатна консултативна сесија со експерт. 308 323 {{{ 309 324 CREATE OR REPLACE FUNCTION mark_free_consultation_as_used() 310 325 RETURNS TRIGGER AS $$ 311 326 BEGIN 312 UPDATE "user"313 SET use r_used_free_consultation = TRUE327 UPDATE _user 328 SET used_free_consultation = TRUE 314 329 WHERE id = NEW.user_id 315 AND use r_used_free_consultation = FALSE;330 AND used_free_consultation = FALSE; 316 331 317 332 RETURN NEW; … … 327 342 ==== Функции / Stored Procedures ==== 328 343 344 Функција која кажува дали корисникот може да закаже бесплатна консултативна сесија со експерт. 329 345 {{{ 330 346 CREATE OR REPLACE FUNCTION can_user_schedule_free_consultation(p_user_id INTEGER) … … 332 348 can_schedule BOOLEAN, 333 349 reason TEXT 334 ) AS $$ 350 ) 351 AS $$ 335 352 DECLARE 336 353 v_used_free_consultation BOOLEAN; 337 v_pending_meetings INTEGER; 338 BEGIN 339 SELECT user_used_free_consultation INTO v_used_free_consultation 340 FROM "user" 354 BEGIN 355 SELECT used_free_consultation INTO v_used_free_consultation 356 FROM _user 341 357 WHERE id = p_user_id; 342 358 … … 346 362 END IF; 347 363 348 SELECT COUNT(*) INTO v_pending_meetings349 FROM meeting_reminder350 WHERE user_id = p_user_id351 AND meeting_at > NOW();352 353 IF v_pending_meetings > 0 THEN354 RETURN QUERY SELECT FALSE, 'Already has pending meeting scheduled';355 RETURN;356 END IF;357 358 364 RETURN QUERY SELECT TRUE, 'Eligible for free consultation'; 359 365 END; 360 $$ LANGUAGE plpgsql; 361 }}} 362 366 $$ 367 LANGUAGE plpgsql; 368 }}} 369
