Changes between Version 2 and Version 3 of AdvancedDatabaseDevelopment
- Timestamp:
- 05/11/26 13:05:39 (2 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AdvancedDatabaseDevelopment
v2 v3 76 76 ==== Функции / Stored Procedures ==== 77 77 78 Функција за пресметување на дневно завршување за еден корисник и датум. Вметнува ред во daily_completion s(доколку не постои), ги поврзува завршените задачи и го ресетира нивниот статус.78 Функција за пресметување на дневно завршување за еден корисник и датум. Вметнува ред во daily_completion (доколку не постои), ги поврзува завршените задачи и го ресетира нивниот статус. 79 79 {{{ 80 80 CREATE OR REPLACE FUNCTION trekr.fn_compute_daily_completion(user_id bigint, day date) … … 103 103 END IF; 104 104 105 -- FIX: table name daily_completion (not daily_completions) 105 106 SELECT dc.daily_completion_id, dc.procent INTO dc_id, pct 106 FROM trekr.daily_completion sdc107 FROM trekr.daily_completion dc 107 108 WHERE dc.user_id = user_id AND dc.date = day 108 109 LIMIT 1; … … 113 114 END IF; 114 115 115 SELECT COUNT(*) INTO total_count FROM trekr.tasks t WHERE t.discipline_user_id = ( 116 SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id 117 ); 118 119 SELECT COUNT(*) INTO finished_count FROM trekr.tasks t WHERE t.discipline_user_id = ( 120 SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id 121 ) AND t.finished = true; 116 -- FIX: discipline_users has no surrogate discipline_user_id; use user_id directly 117 -- FIX: column is is_finished (not finished) 118 SELECT COUNT(*) INTO total_count 119 FROM trekr.tasks t 120 WHERE t.discipline_user_id = user_id; 121 122 SELECT COUNT(*) INTO finished_count 123 FROM trekr.tasks t 124 WHERE t.discipline_user_id = user_id 125 AND t.is_finished = true; 122 126 123 127 IF total_count <= 0 THEN … … 127 131 END IF; 128 132 129 INSERT INTO trekr.daily_completions (user_id, date, procent) 133 -- FIX: table name daily_completion (not daily_completions) 134 INSERT INTO trekr.daily_completion (user_id, date, procent) 130 135 VALUES (user_id, day, pct) 131 136 RETURNING daily_completion_id INTO dc_id; 132 137 138 -- FIX: table name task_daily_completion (not task_daily_completions) 139 -- FIX: column is is_finished (not finished) 140 -- FIX: use user_id directly instead of subquery for discipline_user_id 133 141 FOR finished_tasks IN 134 142 SELECT t.task_id FROM trekr.tasks t 135 WHERE t.discipline_user_id = ( 136 SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id 137 ) AND t.finished = true 143 WHERE t.discipline_user_id = user_id 144 AND t.is_finished = true 138 145 LOOP 139 INSERT INTO trekr.task_daily_completion s(task_id, daily_completion_id)146 INSERT INTO trekr.task_daily_completion (task_id, daily_completion_id) 140 147 VALUES (finished_tasks.task_id, dc_id) 141 148 ON CONFLICT DO NOTHING; 142 149 END LOOP; 143 150 144 UPDATE trekr.tasks t SET finished = false145 WHERE t.discipline_user_id = (146 SELECT du.discipline_user_id FROM trekr.discipline_users du WHERE du.user_id = user_id147 );151 -- FIX: column is is_finished (not finished) 152 -- FIX: use user_id directly instead of subquery for discipline_user_id 153 UPDATE trekr.tasks t SET is_finished = false 154 WHERE t.discipline_user_id = user_id; 148 155 149 156 RETURN QUERY SELECT true, dc_id, pct; … … 255 262 === Имплементација === 256 263 257 ==== Погледи (Views) ==== 264 ==== Погледи (Views) ==== 258 265 259 266 Поглед за месечен приход по корисник — прикажува вкупен приход по корисник, месец и година. 260 267 {{{ 268 -- FIX: incomes uses user_id as FK (not finance_user_id) 261 269 CREATE OR REPLACE VIEW trekr.vw_finance_monthly_summary AS 262 270 SELECT 263 i. finance_user_id ASuser_id,271 i.user_id, 264 272 EXTRACT(YEAR FROM i.date)::int AS year, 265 273 EXTRACT(MONTH FROM i.date)::int AS month, 266 274 SUM(i.amount) AS total_income 267 275 FROM trekr.incomes i 268 GROUP BY i. finance_user_id, EXTRACT(YEAR FROM i.date), EXTRACT(MONTH FROM i.date);276 GROUP BY i.user_id, EXTRACT(YEAR FROM i.date), EXTRACT(MONTH FROM i.date); 269 277 }}} 270 278 271 279 Поглед за вкупниот приход на секој корисник во тековниот месец. 272 280 {{{ 281 -- FIX: incomes uses user_id as FK (not finance_user_id) 273 282 CREATE OR REPLACE VIEW trekr.vw_finance_current_month AS 274 283 SELECT … … 277 286 FROM trekr.finance_users f 278 287 LEFT JOIN trekr.incomes i 279 ON i. finance_user_id = f.user_id288 ON i.user_id = f.user_id 280 289 AND date_trunc('month', i.date) = date_trunc('month', current_date) 281 290 GROUP BY f.user_id;
