| 2 | |
| 3 | === 1. Извештај: Број на настани по година и земја === |
| 4 | |
| 5 | **Опис:** Овој извештај го прикажува бројот на настани по година, групирани според земјата. |
| 6 | |
| 7 | {{{ |
| 8 | SELECT |
| 9 | EXTRACT(YEAR FROM e.sql_date) AS year, |
| 10 | a.country_code, |
| 11 | COUNT(e.global_event_id) AS event_count |
| 12 | FROM |
| 13 | events e |
| 14 | JOIN |
| 15 | event_details ed ON e.global_event_id = ed.global_event_id |
| 16 | JOIN |
| 17 | actors a ON ed.actor_id = a.actor_id |
| 18 | GROUP BY |
| 19 | year, a.country_code |
| 20 | ORDER BY |
| 21 | year DESC, event_count DESC; |
| 22 | }}} |
| 23 | |
| 24 | --- |
| 25 | |
| 26 | === 2. Извештај: Топ 5 актери според бројот на споменувања === |
| 27 | |
| 28 | **Опис:** Овој извештај ги прикажува топ 5 актери според бројот на споменувања во настани. |
| 29 | |
| 30 | {{{ |
| 31 | SELECT |
| 32 | a.actor_name, |
| 33 | COUNT(ed.actor_id) AS mention_count |
| 34 | FROM |
| 35 | event_details ed |
| 36 | JOIN |
| 37 | actors a ON ed.actor_id = a.actor_id |
| 38 | GROUP BY |
| 39 | a.actor_name |
| 40 | ORDER BY |
| 41 | mention_count DESC |
| 42 | LIMIT 5; |
| 43 | }}} |
| 44 | |
| 45 | --- |
| 46 | |
| 47 | === 3. Извештај: Просечен тон на настани по месец === |
| 48 | |
| 49 | **Опис:** Овој извештај ја пресметува просечната вредност на тонот на настаните за секој месец. |
| 50 | |
| 51 | {{{ |
| 52 | SELECT |
| 53 | TO_CHAR(e.sql_date, 'YYYY-MM') AS month, |
| 54 | AVG(e.avg_tone) AS average_tone |
| 55 | FROM |
| 56 | events e |
| 57 | GROUP BY |
| 58 | month |
| 59 | ORDER BY |
| 60 | month DESC; |
| 61 | }}} |
| 62 | |
| 63 | --- |
| 64 | |
| 65 | === 4. Извештај: Број на конфликти во квартален период по земја === |
| 66 | |
| 67 | **Опис:** Овој извештај го пресметува бројот на конфликти во тековниот квартал за секоја земја. |
| 68 | |
| 69 | {{{ |
| 70 | SELECT |
| 71 | EXTRACT(YEAR FROM e.sql_date) AS year, |
| 72 | EXTRACT(QUARTER FROM e.sql_date) AS quarter, |
| 73 | a.country_code, |
| 74 | COUNT(e.global_event_id) AS conflict_count |
| 75 | FROM |
| 76 | events e |
| 77 | JOIN |
| 78 | event_details ed ON e.global_event_id = ed.global_event_id |
| 79 | JOIN |
| 80 | actors a ON ed.actor_id = a.actor_id |
| 81 | WHERE |
| 82 | e.sql_date >= DATE_TRUNC('quarter', CURRENT_DATE) |
| 83 | GROUP BY |
| 84 | year, quarter, a.country_code |
| 85 | ORDER BY |
| 86 | year DESC, quarter DESC, conflict_count DESC; |
| 87 | }}} |
| 88 | |
| 89 | --- |
| 90 | |
| 91 | === 5. Извештај: Конфликти според нивото на доверливост === |
| 92 | |
| 93 | **Опис:** Овој извештај ги групира настаните според нивото на доверливост на предвидувањето. |
| 94 | |
| 95 | {{{ |
| 96 | SELECT |
| 97 | e.event_code, |
| 98 | COUNT(e.global_event_id) AS event_count, |
| 99 | ROUND(AVG(p.confidence_score), 2) AS avg_confidence |
| 100 | FROM |
| 101 | events e |
| 102 | JOIN |
| 103 | predictions p ON e.global_event_id = p.event_id |
| 104 | GROUP BY |
| 105 | e.event_code |
| 106 | ORDER BY |
| 107 | avg_confidence DESC; |
| 108 | }}} |
| 109 | |
| 110 | --- |
| 111 | |
| 112 | === 6. Извештај: Конфликти според број на извори === |
| 113 | |
| 114 | **Опис:** Ги прикажува најзначајните конфликти според бројот на извори што ги известиле. |
| 115 | |
| 116 | {{{ |
| 117 | SELECT |
| 118 | e.global_event_id, |
| 119 | e.sql_date, |
| 120 | e.event_code, |
| 121 | e.num_sources |
| 122 | FROM |
| 123 | events e |
| 124 | ORDER BY |
| 125 | e.num_sources DESC |
| 126 | LIMIT 10; |
| 127 | }}} |
| 128 | |
| 129 | --- |
| 130 | |
| 131 | === 7. Извештај: Тренд на зголемување на конфликтите во последните 6 месеци === |
| 132 | |
| 133 | **Опис:** Ги прикажува земјите со најголемо зголемување на бројот на конфликти. |
| 134 | |
| 135 | {{{ |
| 136 | SELECT |
| 137 | a.country_code, |
| 138 | COUNT(e.global_event_id) AS conflict_count |
| 139 | FROM |
| 140 | events e |
| 141 | JOIN |
| 142 | event_details ed ON e.global_event_id = ed.global_event_id |
| 143 | JOIN |
| 144 | actors a ON ed.actor_id = a.actor_id |
| 145 | WHERE |
| 146 | e.sql_date >= CURRENT_DATE - INTERVAL '6 months' |
| 147 | GROUP BY |
| 148 | a.country_code |
| 149 | ORDER BY |
| 150 | conflict_count DESC |
| 151 | LIMIT 10; |
| 152 | }}} |
| 153 | |
| 154 | --- |
| 155 | |
| 156 | === 8. Складирана процедура: Додавање на нов корисник === |
| 157 | |
| 158 | **Опис:** Додава нов корисник во системот. |
| 159 | |
| 160 | {{{ |
| 161 | CREATE OR REPLACE PROCEDURE add_new_user( |
| 162 | p_first_name VARCHAR, |
| 163 | p_last_name VARCHAR, |
| 164 | p_email VARCHAR, |
| 165 | p_password_hash VARCHAR, |
| 166 | p_role_id INT, |
| 167 | p_register_date DATE |
| 168 | ) AS $$ |
| 169 | BEGIN |
| 170 | INSERT INTO users (first_name, last_name, email, password_hash, role_id, register_date) |
| 171 | VALUES (p_first_name, p_last_name, p_email, p_password_hash, p_role_id, p_register_date); |
| 172 | END; |
| 173 | $$ LANGUAGE plpgsql; |
| 174 | }}} |
| 175 | |
| 176 | --- |
| 177 | |
| 178 | === 9. Складирана процедура: Додавање нова претплата === |
| 179 | |
| 180 | **Опис:** Ја додава претплатата на корисник за следење на конфликти. |
| 181 | |
| 182 | {{{ |
| 183 | CREATE OR REPLACE PROCEDURE add_subscription( |
| 184 | p_user_id INT, |
| 185 | p_plan_id INT, |
| 186 | p_start_date DATE, |
| 187 | p_end_date DATE, |
| 188 | p_status VARCHAR |
| 189 | ) AS $$ |
| 190 | BEGIN |
| 191 | INSERT INTO subscription (user_id, plan_id, start_date, end_date, status) |
| 192 | VALUES (p_user_id, p_plan_id, p_start_date, p_end_date, p_status); |
| 193 | END; |
| 194 | $$ LANGUAGE plpgsql; |
| 195 | }}} |
| 196 | |
| 197 | --- |
| 198 | |
| 199 | === 10. Складирана процедура: Ажурирање на статусот на корисник === |
| 200 | |
| 201 | **Опис:** Оваа процедура го ажурира статусот на даден корисник. |
| 202 | |
| 203 | {{{ |
| 204 | CREATE OR REPLACE PROCEDURE update_user_status( |
| 205 | p_user_id INT, |
| 206 | p_role_id INT |
| 207 | ) AS $$ |
| 208 | BEGIN |
| 209 | UPDATE users |
| 210 | SET role_id = p_role_id |
| 211 | WHERE user_id = p_user_id; |
| 212 | END; |
| 213 | $$ LANGUAGE plpgsql; |
| 214 | }}} |
| 215 | |
| 216 | --- |
| 217 | |
| 218 | === 11. Складирана процедура: Генерирање на известувања за конфликти === |
| 219 | |
| 220 | **Опис:** Оваа процедура автоматски генерира известувања за корисниците кои следат одредени конфликти. |
| 221 | |
| 222 | {{{ |
| 223 | CREATE OR REPLACE PROCEDURE generate_notifications() AS $$ |
| 224 | BEGIN |
| 225 | INSERT INTO notifications (user_id, event_id, notification_date, status) |
| 226 | SELECT |
| 227 | s.user_id, |
| 228 | e.global_event_id, |
| 229 | CURRENT_DATE, |
| 230 | 'Pending' |
| 231 | FROM |
| 232 | subscription s |
| 233 | JOIN |
| 234 | events e ON s.plan_id = e.event_code |
| 235 | WHERE |
| 236 | e.sql_date >= CURRENT_DATE - INTERVAL '7 days'; |
| 237 | END; |
| 238 | $$ LANGUAGE plpgsql; |
| 239 | }}} |
| 240 | |
| 241 | |
| 242 | |