| 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 | | |