= Функции, Процедури и Тригери = == Функции == Во системот се имплементирани функции кои се користат за пресметка на статистички податоци и добивање информации поврзани со рецепти и форум објави. === get_forumpost_comments_count === Ја враќа вкупната бројка на коментари за одреден форум пост. * Влезен параметар: `p_forumpost_id` * Излез: број на коментари === get_forumpost_likes_count === Ја враќа вкупната бројка на лајкови за одреден форум пост. * Влезен параметар: `p_forumpost_id` * Излез: број на лајкови === get_recipe_average_rating === Ја пресметува просечната оцена на избран рецепт. * Влезен параметар: `p_recipe_id` * Излез: просечна оцена === get_recipe_favorites_count === Го враќа бројот на корисници кои го имаат додадено рецептот во омилени. * Влезен параметар: `p_recipe_id` * Излез: број на омилени === get_total_recipes_by_category === Го пресметува бројот на рецепти во дадена категорија. * Влезен параметар: `p_category_id` * Излез: број на рецепти === get_total_recipes_by_cuisine === Го пресметува бројот на рецепти за избран тип на кујна. * Влезен параметар: `p_cuisine_id` * Излез: број на рецепти === is_quick_recipe === Проверува дали рецептот може да се подготви за најмногу 30 минути. * Влезен параметар: `p_recipe_id` * Излез: TRUE/FALSE == Процедури == Процедурите се користат за централизирано извршување на бизнис логиката и заштита на интегритетот на податоците. === add_recipe_review === Овозможува додавање рецензија за рецепт. Пред внесување се проверува: * дали корисникот го има пробано рецептот * дали веќе има оставено рецензија * дали оцената е во дозволени граници (1-5) === add_forum_comment === Додава нов коментар на форум пост. Се проверува: * дали содржината не е празна * дали форум постот постои === add_recipe_to_favorites === Додава рецепт во листата на омилени рецепти на корисникот. Се спречува двојно додавање на ист рецепт. === add_recipe_attempt === Евидентира дека корисникот го има подготвено рецептот. Се спречува повеќекратно означување на истиот рецепт. === remove_recipe_from_favorites === Го отстранува рецептот од листата на омилени рецепти. === delete_forum_comment === Овозможува бришење на форум коментар. Пред бришење се проверува дали коментарот постои. === add_recipe_dislike === Додава dislike на рецепт. Се спречува повеќекратно додавање dislike од ист корисник. === remove_recipe_dislike === Го отстранува претходно додадениот dislike. === add_forumpost_like === Додава like на форум пост. Се спречува двојно лајкнување на ист пост од ист корисник. == Тригери == Тригерите автоматски се активираат при INSERT или UPDATE операции и обезбедуваат валидација и интегритет на податоците. === trg_validate_recipe_name === Табела: `recipe` Проверува дали името на рецептот е внесено и не е празно. === trg_validate_recipe_calories === Табела: `recipe` Проверува дали бројот на калории е поголем или еднаков на нула. === trg_validate_review_rating === Табела: `recipe_review` Проверува дали оцената е во опсег од 1 до 5. === trg_validate_recipe_review_attempt === Табела: `recipe_review` Не дозволува оставање рецензија доколку корисникот претходно не го пробал рецептот. === trg_validate_forum_comment === Табела: `forumpost_comment` Проверува дали содржината на коментарот е валидна и не е празна. === trg_prevent_duplicate_favorite === Табела: `recipe_favorite` Спречува додавање на ист рецепт повеќе од еднаш во омилени. === trg_prevent_duplicate_forumpost_like === Табела: `forumpost_like` Спречува двојно лајкнување на форум пост. === trg_prevent_duplicate_recipe_dislike === Табела: `recipe_dislike` Спречува двојно додавање dislike за ист рецепт. === trg_set_forumpost_created_at === Табела: `forumpost` Автоматски го поставува полето `created_at` при креирање на нов форум пост. === trg_set_comment_created_at === Табела: `forumpost_comment` Автоматски го поставува полето `created_at` при креирање на нов коментар. === trg_set_recipe_attempt_time === Табела: `recipe_attempt` Автоматски го поставува времето на подготвување во полето `attempted_at`. == Заклучок == Во системот се имплементирани: * 7 кориснички функции * 9 процедури * 11 тригери Овие механизми овозможуваат автоматска валидација на податоците, спречување на дупликати, автоматско пополнување на временски ознаки и обезбедување на конзистентност и интегритет на податоците во базата.