| | 4 | |
| | 5 | = Процедури и тригери (Stored Procedures & Triggers) = |
| | 6 | |
| | 7 | == Што додадовме == |
| | 8 | * Погледи: vw_user_spend, vw_class_utilization, vw_training_pop_monthly |
| | 9 | * Тригери: BEFORE INSERT guard, AFTER INSERT/DELETE на "User_Booked_Class" (одржуваат seats_available) |
| | 10 | * Складирана функција: book_class(user_id, class_id) |
| | 11 | * Индекси (од страната Оптимизација) |
| | 12 | |
| | 13 | == Скрипта == |
| | 14 | Целиот SQL е во `backend/sql/blisscore_enhancements.sql` и содржи: |
| | 15 | - 3x CREATE VIEW (vw_user_spend, vw_class_utilization, vw_training_pop_monthly) |
| | 16 | - 3x CREATE FUNCTION за тригерите (guard/decrement/increment) |
| | 17 | - 3x CREATE TRIGGER за "User_Booked_Class" |
| | 18 | - CREATE FUNCTION book_class(p_user_id BIGINT, p_class_id BIGINT) RETURNS text |
| | 19 | - Индекси |
| | 20 | |
| | 21 | |
| 185 | | = Процедури и тригери (Stored Procedures & Triggers) = |
| 186 | | |
| 187 | | == Што додадовме == |
| 188 | | * Погледи: vw_user_spend, vw_class_utilization, vw_training_pop_monthly |
| 189 | | * Тригери: BEFORE INSERT guard, AFTER INSERT/DELETE на "User_Booked_Class" (одржуваат seats_available) |
| 190 | | * Складирана функција: book_class(user_id, class_id) |
| 191 | | * Индекси (од страната Оптимизација) |
| 192 | | |
| 193 | | == Скрипта == |
| 194 | | Целиот SQL е во `backend/sql/blisscore_enhancements.sql` и содржи: |
| 195 | | - 3x CREATE VIEW (vw_user_spend, vw_class_utilization, vw_training_pop_monthly) |
| 196 | | - 3x CREATE FUNCTION за тригерите (guard/decrement/increment) |
| 197 | | - 3x CREATE TRIGGER за "User_Booked_Class" |
| 198 | | - CREATE FUNCTION book_class(p_user_id BIGINT, p_class_id BIGINT) RETURNS text |
| 199 | | - Индекси |
| 200 | | |