= Use-case 0005 Implementation - Персонализирани препораки на книги = '''Иницирачки актер:''' Купувач '''Други актери:''' Нема == Опис == Најавениот корисник може да добива персонализирани препораки на книги според неговите зачувани преференции за жанрови и категории. Дополнително, корисникот може да избере моментално расположение или потреба, по што апликацијата ги прикажува книгите поврзани со избраното расположение. == Сценарио == 1. Корисникот се најавува во апликацијата и ја отвора страницата „Мои преференции“, каде што може да избере жанрови и категории што го интересираат. [[Image(UseCase0005_1.png, width=800)]] 2. Корисникот избира еден или повеќе жанрови и категории. Во примерот се избрани жанрот „Продуктивност“ и категоријата „Кариера“, по што корисникот го притиска копчето „Зачувај ги преференциите“. [[Image(UseCase0005_2.png, width=800)]] 3. Системот ги зачувува избраните жанрови и категории за најавениот корисник. Претходно зачуваните преференции се бришат, а новоизбраните се внесуваат во базата на податоци. За жанровите се користат следните SQL наредби: {{{ #!sql DELETE FROM project.preferira_zhanr WHERE korisnik_id = %s; }}} {{{ #!sql INSERT INTO project.preferira_zhanr (korisnik_id, zhanr_id, datum_dodavanje) VALUES (%s, %s, CURRENT_DATE); }}} За категориите се користат следните SQL наредби: {{{ #!sql DELETE FROM project.preferira_kategorija WHERE korisnik_id = %s; }}} {{{ #!sql INSERT INTO project.preferira_kategorija (korisnik_id, kategorija_id, datum_dodavanje) VALUES (%s, %s, CURRENT_DATE); }}} 4. По зачувувањето на преференциите, системот го пренасочува корисникот кон страницата „Препораки“. Системот ги споредува зачуваните преференции на корисникот со жанровите и категориите на книгите и ги прикажува книгите што одговараат на неговите интереси. За добивање на персонализираните препораки се користи следната SQL наредба: {{{ #!sql SELECT DISTINCT k.kniga_id, k.naslov, k.cena, k.opis, k.godina_izdavanje FROM project.knigi k WHERE EXISTS ( SELECT 1 FROM project.ima_zhanr iz JOIN project.preferira_zhanr pz ON iz.zhanr_id = pz.zhanr_id WHERE iz.kniga_id = k.kniga_id AND pz.korisnik_id = %s ) OR EXISTS ( SELECT 1 FROM project.ima_kategorija ik JOIN project.preferira_kategorija pk ON ik.kategorija_id = pk.kategorija_id WHERE ik.kniga_id = k.kniga_id AND pk.korisnik_id = %s ) ORDER BY k.kniga_id; }}} [[Image(UseCase0005_3.png, width=800)]] 5. На истата страница корисникот може да избере и моментално расположение или потреба од понудените опции: „Мотивација“, „Релаксација“, „Инспирација“, „Фокус“ и „Личен развој“. Расположенијата се вчитуваат од базата со следната SQL наредба: {{{ #!sql SELECT raspolozenie_id, naziv, opis FROM project.raspolozenija ORDER BY raspolozenie_id; }}} [[Image(UseCase0005_4.png, width=800)]] 6. Корисникот избира расположение. Во примерот е избрана „Релаксација“. Системот го пронаоѓа избраното расположение со следната SQL наредба: {{{ #!sql SELECT raspolozenie_id, naziv, opis FROM project.raspolozenija WHERE raspolozenie_id = %s; }}} 7. Системот ги пронаоѓа книгите поврзани со избраното расположение преку табелата `project.povrzana_so`. {{{ #!sql SELECT k.kniga_id, k.naslov, k.cena, k.opis, k.godina_izdavanje FROM project.knigi k JOIN project.povrzana_so p ON k.kniga_id = p.kniga_id WHERE p.raspolozenie_id = %s ORDER BY k.kniga_id; }}} 8. Системот ги прикажува книгите што одговараат на избраното расположение. Во примерот за „Релаксација“ се прикажуваат соодветните книги поврзани со ова расположение. [[Image(UseCase0005_5.png, width=800)]]