Changes between Version 34 and Version 35 of UseCaseImplementations
- Timestamp:
- 07/08/25 11:20:02 (2 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
UseCaseImplementations
v34 v35 26 26 == Use Case ID: 1 – Се регистрира == 27 27 [[Image(5.png,width=900, height=450)]][[BR]] 28 **Корисникот притиснува „Register“ и најпрво се извршува основ а валидација на формата на клиентска страна**[[BR]]28 **Корисникот притиснува „Register“ и најпрво се извршува основна валидација на формата на клиентска страна. **[[BR]] 29 29 [[Image(handleSubmit1.0.png)]][[BR]] 30 30 [[Image(handleSubmit2.0.png)]][[BR]] 31 **Потоа се повикува функција во „AuthContext“ која повикува помошна функција која испраќа POST барање до backend. Се врши повторна валидација на податоците, како и проверка дали постои корисник со внесените податоци. При успешен крај профилот на корисникот се зачувува во „state“ како и во „localStorage“, со цел побрзо ажурирање на податоци на клиентска страна**[[BR]]32 **Функцијата во „AuthContext “**31 **Потоа се повикува функција во „AuthContext“ која повикува помошна функција која испраќа POST барање до backend. Се врши повторна валидација на податоците, како и проверка дали постои корисник со внесените податоци. При успешен крај профилот на корисникот се зачувува во „state“ како и во „localStorage“, со цел побрзо ажурирање на податоци на клиентска страна. **[[BR]] 32 **Функцијата во „AuthContext.“** 33 33 [[Image(registerAuthContext.png)]][[BR]] 34 **Помошна функција во „services/registerLoginService “**[[BR]]34 **Помошна функција во „services/registerLoginService.“**[[BR]] 35 35 [[Image(registerUserService.png)]][[BR]] 36 **Функцијата во контролерот **[[BR]]36 **Функцијата во контролерот.**[[BR]] 37 37 [[Image(registerPostController.png)]][[BR]] 38 38 [[Image(registerPostController2.png)]][[BR]] 39 39 [[Image(registerPostController3.png)]][[BR]] 40 **Проверка на податоците внесени од корисникот се извршува и на backend во моделот „User“ **40 **Проверка на податоците внесени од корисникот се извршува и на backend во моделот „User“.** 41 41 [[Image(userValidate.png)]][[BR]] 42 42 43 43 == Use Case ID: 2 – Разгледува почетна страна == 44 44 [[Image(1.png)]][[BR]] 45 **На почетната страна се проверува дали е најавен корисникот и во зависност од тоа динамички се менува „Hero“ секцијата **45 **На почетната страна се проверува дали е најавен корисникот и во зависност од тоа динамички се менува „Hero“ секцијата.** 46 46 [[BR]] 47 47 [[Image(heroAuth.png)]] … … 55 55 == Use Case ID: 1 – Се најавува == 56 56 [[Image(6.png,width=900, height=550)]][[BR]] 57 **Корисникот притиснува „Log in“ и слично како и при регистрација, се повикува „login“ функција во „AuthContext“, потоа помошна функција во „services/registerLoginService“ и на крај се испраќа POST барање до backend со кое се справува контролерот. При успешен крај податоците за корисникот се зачувуваат во „state“ на клиентска страна**[[BR]]57 **Корисникот притиснува „Log in“ и слично како и при регистрација, се повикува „login“ функција во „AuthContext“, потоа помошна функција во „services/registerLoginService“ и на крај се испраќа POST барање до backend со кое се справува контролерот. При успешен крај, податоците за корисникот се зачувуваат во „state“ на клиентска страна. **[[BR]] 58 58 59 59 [[Image(handleSubmitLogin.png)]][[BR]] 60 **Функцијата во „AuthContext “ **[[BR]]60 **Функцијата во „AuthContext.“ **[[BR]] 61 61 [[Image(loginAuthContext.png)]][[BR]] 62 **Помошна функција во „services/registerLoginService“ **[[BR]]62 **Помошна функција во „services/registerLoginService“.**[[BR]] 63 63 [[Image(loginService.png)]][[BR]] 64 **Функцијата во контролерот **[[BR]]64 **Функцијата во контролерот.**[[BR]] 65 65 [[Image(loginController.png)]][[BR]] 66 66 … … 69 69 [[Image(4.png)]] 70 70 [[BR]] 71 **На почетната страна се проверува дали е најавен корисникот и во зависност од тоа динамички се менува „Hero“ секцијата **71 **На почетната страна се проверува дали е најавен корисникот и во зависност од тоа динамички се менува „Hero“ секцијата.** 72 72 73 73 … … 76 76 == Use Case ID: 1 – Преглед на контролната табла == 77 77 [[Image(Dashboard.png,width=900, height=450)]][[BR]] 78 **Во објектот „user“ се чуваат потребните информации како на пример дали корисникот го има решено предизвикот или не и слично **[[BR]]78 **Во објектот „user“ се чуваат потребните информации како на пример дали корисникот го има решено предизвикот или не и слично.**[[BR]] 79 79 [[Image(dashboard.png)]] 80 80 81 81 == Use Case ID: 2 – Преглед на својот профил == 82 82 [[Image(profile.png,width=900, height=450)]] 83 **Во објектот „user“ се чуваат потребните информации како на пример вкупен број на поени и решени предизвици **[[BR]]83 **Во објектот „user“ се чуваат потребните информации како на пример вкупен број на поени и решени предизвици.**[[BR]] 84 84 [[Image(Screenshot_1.png)]] 85 85 [[Image(Screenshot_2.png)]] … … 87 87 == Use Case ID: 3 – Пристап до дневниот предизвик == 88 88 [[Image(startedChallenge.png,width=900, height=450)]] [[BR]] 89 **Најпрво при пристап до предизвикот се повикува помошна функција која повикува GET барање до backend и се враќаат податоците за денешниот предизвик **[[BR]]89 **Најпрво при пристап до предизвикот се повикува помошна функција која повикува GET барање до backend и се враќаат податоците за денешниот предизвик.**[[BR]] 90 90 [[Image(fetchTaskForToday.png)]] [[BR]] 91 **Помошна функција во „services/taskService“ **[[BR]]91 **Помошна функција во „services/taskService“.**[[BR]] 92 92 [[Image(getTaskForDateService.png)]] [[BR]] 93 **Функциите во контролерот **[[BR]]93 **Функциите во контролерот.**[[BR]] 94 94 [[Image(getTaskByDateController.png)]] [[BR]] 95 95 [[Image(getTaskByDateController2.png)]] [[BR]] 96 **При избор на „Test case“ за корисникот најпрво се проверува дали претходно пристапил до предизвикот и ако да се повикуваат функциите за преземање на конкретниот „Test case“. Во спротив а се презема „Test case“ од низата „Test cases“ за соодветниот предизвик и преку помошната функција „updateUserDailyTestCaseId“ се повикува PUT барање до backend и се ажурира соодветната колона за корисникот во датабазата**[[BR]]96 **При избор на „Test case“ за корисникот најпрво се проверува дали претходно пристапил до предизвикот и ако да се повикуваат функциите за преземање на конкретниот „Test case“. Во спротивно се презема „Test case“ од низата „Test cases“ за соодветниот предизвик и преку помошната функција „updateUserDailyTestCaseId“ се повикува PUT барање до backend и се ажурира соодветната колона за корисникот во датабазата. **[[BR]] 97 97 [[Image(fetchTestCaseLogic1.png)]] [[BR]] 98 98 [[Image(fetchTestCaseLogic2.png)]] [[BR]] 99 **Помошни функции во „services/taskService “**[[BR]]99 **Помошни функции во „services/taskService.“**[[BR]] 100 100 [[Image(getSpecificTestCaseService.png)]] [[BR]] 101 101 [[Image(getTestCaseForTaskService.png)]] [[BR]] 102 102 [[Image(updateUserService.png)]] [[BR]] 103 **Функциите во контролерот **103 **Функциите во контролерот.** 104 104 [[Image(getTestCaseByIDController.png)]] [[BR]] 105 105 [[Image(getTestCaseController.png)]] [[BR]] 106 **Корисникот притиснува „Submit“ и се извршува основа валидација на податоците. Потоа се повикува помошна функција која повикува POST барање до backend каде се врши евалуација на резултатот внесен од корисникот **[[BR]]106 **Корисникот притиснува „Submit“ и се извршува основа валидација на податоците. Потоа се повикува помошна функција која повикува POST барање до backend каде се врши евалуација на резултатот внесен од корисникот.**[[BR]] 107 107 [[Image(handleSubmitSolution.png)]] [[BR]] 108 **Помошна функција во „services/taskService“ **[[BR]]108 **Помошна функција во „services/taskService“.**[[BR]] 109 109 [[Image(evaluateService.png)]] [[BR]] 110 **Овие функции се кор ситат при евалуација на резултатот внесен од корисникот. Најпрво се повикуваат функциите „getMinutesSinceSevenAM“ и „getTimeBonus“, со кои се пресметува времето поминато од поставување на предизвикот, односно од седум часот наутро. Потоа се повикува функцијата „getAttemptScore“ која служи за доделување поени во зависност од тоа колку обиди му биле потребни на корисникот да го реши предизвикот. За крај, се повикуваат функции за нормализација на резултатот внесен од корисникот и негова споредба со точниот резултат**[[BR]]110 **Овие функции се користат при евалуација на резултатот внесен од корисникот. Најпрво се повикуваат функциите „getMinutesSinceSevenAM“ и „getTimeBonus“, со кои се пресметува времето поминато од поставување на предизвикот, односно од седум часот наутро. Потоа се повикува функцијата „getAttemptScore“ која служи за доделување поени во зависност од тоа колку обиди му биле потребни на корисникот да го реши предизвикот. За крај, се повикуваат функции за нормализација на резултатот внесен од корисникот и негова споредба со точниот резултат.**[[BR]] 111 111 [[Image(helperEvalFunctions1.png)]] [[BR]] 112 112 [[Image(helperEvalFunctions2.png)]] [[BR]] 113 **Функциите во контролерот. Тука се ажурираат и соодветните полиња за корисникот и предизвикот во датабазата**[[BR]]113 **Функциите во контролерот. Тука се ажурираат соодветните записи во табелите за корисникот и предизвикот во датабазата.**[[BR]] 114 114 [[Image(evaluateController1.png)]] [[BR]] 115 115 [[Image(evaluateController2.png)]] [[BR]] 116 116 [[Image(evaluateController3.png)]] [[BR]] 117 **Функцијата во контролерот која е повикана од „updateUserDailyTestCaseId“ **[[BR]]117 **Функцијата во контролерот која е повикана од „updateUserDailyTestCaseId“.**[[BR]] 118 118 [[Image(updateTestCase.png)]] [[BR]] 119 119 … … 122 122 == Use Case ID: 4 – Прегледува ранг листата == 123 123 [[Image(leaderboard.png,width=900, height=450)]] 124 **Преку клиентска страна се испраќа GET барање до специфична „URL“ адреса на нашиот Supabase“ сервер каде што се извршува „edge“ функција**[[BR]]124 **Преку клиентска страна се испраќа GET барање до специфична „URL“ адреса на нашиот „Supabase“ сервер каде што се извршува „edge“ функција.**[[BR]] 125 125 [[Image(fetchLeaderBoard.png)]] [[BR]] 126 **Оваа функција се извршува на серверите на Supabase. Нејзината цел е да обработи барање, да земе податоци од базата и да ги врати назад на клиентот. Прво проверува дали веќе има зачуван (кеширан) одговор за точно тоа барање (иста страница и ист лимит) во табелата „leaderboard_cache“. Ако најде податок понов од 5 минути, веднаш го враќа како одговор.Ако не најде валиден влез, тогаш конструира барање до главната табела и се извршува сортирањето **[[BR]]126 **Оваа функција се извршува на серверите на Supabase. Нејзината цел е да обработи барање, да земе податоци од базата и да ги врати назад на клиентот. Прво проверува дали веќе има зачуван (кеширан) одговор за точно тоа барање (иста страница и ист лимит) во табелата „leaderboard_cache“. Ако најде податок понов од 5 минути, веднаш го враќа како одговор.Ако не најде валиден влез, тогаш конструира барање до главната табела и се извршува сортирањето.**[[BR]] 127 127 [[Image(indexts1.png)]] [[BR]] 128 128 [[Image(indexts2.png)]] [[BR]] … … 132 132 == Use Case ID: 5 – Прегледува форум == 133 133 [[Image(forum.png,width=900, height=450)]][[BR]] 134 **Најпрво се повикува помошна функција која испраќа GET барање до backend со одредени вредности за број на објави. Потоа преку функцијата во контролерот се враќа одговор со соодветниот број на објави **[[BR]]134 **Најпрво се повикува помошна функција која испраќа GET барање до backend со одредени вредности за број на објави. Потоа преку функцијата во контролерот се враќа одговор со соодветниот број на објави.**[[BR]] 135 135 [[Image(fetchPosts.png)]][[BR]] 136 **Помошна функција во „services/forumService“ **136 **Помошна функција во „services/forumService“.** 137 137 [[Image(getForumPostsService.png)]][[BR]] 138 **Функцијата во контролерот“ **[[BR]]138 **Функцијата во контролерот“.**[[BR]] 139 139 [[Image(getForumPostsController.png)]][[BR]] 140 140 … … 142 142 == Use Case ID: 6 – Пишува и постира на форумот == 143 143 [[Image(12.png,width=900, height=450)]][[BR]] 144 **Корисникот притиснува „Publish Post“, се повикува помошна функција и се испраќа POST барање до backend. Потоа се повикува функција во контролерот, каде најпрво се проверува дали корисникот има преостанати објави за тој ден. Ако има, се проверува содржината на објавата, односно дали содржи вулгарности. Аконе содржи, се испраќа GET барање до „OpenAi api“ преку кое се одредува дали содржината е соодветна за форумот. Доколку објавата е подолга од 200 карактери се внесува во табелата за проверка од модератор. Исто така, доколку системот одредил 3 пати во ред несоодветна содржина, корисникот има можност да ја испрати објавата до модератор за проверка.**[[BR]]145 **Функции на клиентска страна кои повикуваат помошни функции кои испраќаат POST барања до backend **144 **Корисникот притиснува „Publish Post“, се повикува помошна функција и се испраќа POST барање до backend. Потоа се повикува функција во контролерот, каде најпрво се проверува дали корисникот има преостанати објави за тој ден. Ако има, се проверува содржината на објавата, односно дали содржи вулгарности. Доколку не содржи, се испраќа GET барање до „OpenAi api“ преку кое се одредува дали содржината е соодветна за форумот. Доколку објавата е подолга од 200 карактери се внесува во табелата за проверка од модератор. Исто така, доколку системот одредил 3 пати во ред несоодветна содржина, корисникот има можност да ја испрати објавата до модератор за проверка.**[[BR]] 145 **Функции на клиентска страна кои повикуваат помошни функции кои испраќаат POST барања до backend.** 146 146 [[Image(createPost.png)]][[BR]] 147 147 [[Image(handleModeratorDecision.png)]][[BR]] 148 **Помошна функција во „services/forumService“ **[[BR]]148 **Помошна функција во „services/forumService“.**[[BR]] 149 149 [[Image(createPostService.png)]][[BR]] 150 **Помошна функција во „services/reviewService“ **[[BR]]150 **Помошна функција во „services/reviewService“.**[[BR]] 151 151 [[Image(moderatorApprovalService.png)]][[BR]] 152 **Функција во „forumController“. Оваа функција е одговорна и за ажурирање на соодветните полиња за преостанати дневни објави за корисникот **[[BR]]152 **Функција во „forumController“. Оваа функција е одговорна и за ажурирање на соодветните полиња за преостанати дневни објави за корисникот.**[[BR]] 153 153 [[Image(createPostController1.0.png)]][[BR]] 154 154 [[Image(createPostController2.0.png)]][[BR]] 155 **Функција која испраќа барање до „OpenAi api“ **[[BR]]155 **Функција која испраќа барање до „OpenAi api“.**[[BR]] 156 156 [[Image(aiFunction.png)]][[BR]] 157 **Функција во „reviewController“ која ја додава објавата во табелата за проверка од модератор **[[BR]]157 **Функција во „reviewController“ која ја додава објавата во табелата за проверка од модератор.**[[BR]] 158 158 [[Image(createReviewPost.png)]][[BR]] 159 159 … … 161 161 == Use Case ID: 7 – Коментирање на дискусии == 162 162 [[Image(writingComment.png,width=900, height=550)]][[BR]] 163 **Корисникот притиснува „Post Comment“ и се повикува помошна функција која испраќа POST барање до backend. Барањето е обработено од функцијата во контролерот, каде најпрво се проверува коментарот дали содржи вулгарности. Доколку не содржи се додава нов коментар во датабазата, кој соодветс вува на објавата**[[BR]]163 **Корисникот притиснува „Post Comment“ и се повикува помошна функција која испраќа POST барање до backend. Барањето е обработено од функцијата во контролерот, каде најпрво се проверува коментарот дали содржи вулгарности. Доколку не содржи се додава нов коментар во датабазата, кој соодветствува на објавата.**[[BR]] 164 164 [[Image(handleSubmitComment.png)]][[BR]] 165 **Помошна функција во „services/forumService“ **[[BR]]165 **Помошна функција во „services/forumService“.**[[BR]] 166 166 [[Image(createCommentService.png)]][[BR]] 167 **Функцијата во контролерот **167 **Функцијата во контролерот.** 168 168 [[Image(createCommentController.png)]][[BR]] 169 169 === Модератор === … … 171 171 == Use Case ID: 1 – Креира нов предизвик == 172 172 [[Image(CreateNewChallenge3.0.png,width=900, height=450)]] 173 **Модераторот притиснува „Create Challenge“, се повикува помошна функција која испраќа POST барање до backend. Функцијата во контролерот го обработува барањето, така што најпрво се проверува дали корисникот навистина е модератор, а потоа се повикува валидациска функција за предизвикот. При успешен крај предизвикот се додава во датабазата **[[BR]]173 **Модераторот притиснува „Create Challenge“, се повикува помошна функција која испраќа POST барање до backend. Функцијата во контролерот го обработува барањето, така што најпрво се проверува дали корисникот навистина е модератор, а потоа се повикува валидациска функција за предизвикот. При успешен крај предизвикот се додава во датабазата.**[[BR]] 174 174 [[Image(handlesubmit1.png)]][[BR]] 175 175 [[Image(handlesubmit2.png)]][[BR]] 176 **Помошна функција во „services/taskService“ **[[BR]]176 **Помошна функција во „services/taskService“.**[[BR]] 177 177 [[Image(createNewTaskService.png)]][[BR]] 178 **Функцијата во контролерот **[[BR]]178 **Функцијата во контролерот.**[[BR]] 179 179 [[Image(createNewTaskController1.png)]][[BR]] 180 180 [[Image(createNewTaskController2.png)]][[BR]] 181 **Функцијата за валидација во моделот „Challenge“ **[[BR]]181 **Функцијата за валидација во моделот „Challenge“.**[[BR]] 182 182 [[Image(validate.png)]][[BR]] 183 183 … … 191 191 [[Image(deleteChallenge.png,width=900, height=450)]] 192 192 **Модераторот притиснува „Delete“, се повикува функцијата „deleteChallenge“ на клиентска страна, се повикува помошна функција која испраќа DELETE барање до backend. Со барањето се справува функцијата во контролерот, каде најпрво се проверува дали барањето е навистина направено од модератор.**[[BR]] 193 **Функцијата на клиентска страна **[[BR]]193 **Функцијата на клиентска страна.**[[BR]] 194 194 [[Image(deleteChallenge.2.png)]][[BR]] 195 **Помошна функција во „services/taskService“ **[[BR]]195 **Помошна функција во „services/taskService“.**[[BR]] 196 196 [[Image(deleteTaskService.png)]][[BR]] 197 **Функцијата во контролерот **[[BR]]197 **Функцијата во контролерот.**[[BR]] 198 198 [[Image(deleteTaskController.png)]][[BR]] 199 199 … … 201 201 [[Image(deletePost.png,width=900, height=450)]][[BR]] 202 202 **Модераторот притиснува „Delete“, се повикува функција на клиентска страна, потоа помошна функција која испраќа DELETE барање до backend. Со барањето се справува функцијата во контролерот, каде се проверува дали барањето е направено од модератор или од авторот на објавата.**[[BR]] 203 **Функцијата на клиентска страна **[[BR]]203 **Функцијата на клиентска страна.**[[BR]] 204 204 [[Image(handleDeletePost.png)]][[BR]] 205 **Помошна функција во „services/forumService“ **[[BR]]205 **Помошна функција во „services/forumService“.**[[BR]] 206 206 [[Image(deletePostService.png)]][[BR]] 207 **Функцијата во контролерот **[[BR]]207 **Функцијата во контролерот.**[[BR]] 208 208 [[Image(deleteForumPostController.png)]][[BR]] 209 209 210 210 == Use Case ID: 4 – Отстранува коментари == 211 211 [[Image(deleteComment.png,width=900, height=450)]] 212 **Слично како во „Use Case ID: 3 – Отстранува објави“, се пов кува функција на клиентска страна, потоа помошна функција и за крај функцијата во контролерот, каде се извршува истата проверка.**213 **Функцијата на клиентска страна **[[BR]]212 **Слично како во „Use Case ID: 3 – Отстранува објави“, се повикува функција на клиентска страна, потоа помошна функција и за крај функцијата во контролерот, каде се извршува истата проверка.** 213 **Функцијата на клиентска страна.**[[BR]] 214 214 [[Image(handleDeleteComment.png)]][[BR]] 215 **Помошна функција во „services/forumService“ **[[BR]]216 [[Image(delet eCommentService.png)]][[BR]]217 **Функцијата во контролерот **[[BR]]215 **Помошна функција во „services/forumService“.**[[BR]] 216 [[Image(deletCommentService.png)]][[BR]] 217 **Функцијата во контролерот.**[[BR]] 218 218 [[Image(deleteCommentController.png)]][[BR]] 219 219 220 220 == Use Case ID: 5 – Одобрува објави == 221 **Модераторот пристапува до погледот за филтрирање на објави**222 [[Image(maangePosts.png,width=900, height=450)]][[BR]]223 **Модераторот успешно одобрува објава**224 221 [[Image(approvePost.png,width=900, height=450)]] 225 [[Image(approvePostSuccess.png,width=900, height=450)]] 222 **Модераторот притиснува „Approve“, се повикува функцијата „handleApprovePost“ на клиентска страна, потоа се повикува помошна функција која испраќа POST барање до backend. Ова барање се обработува од функција во контролерот, каде објавата се додава во табелата за објави, а се отстранува од табелата за проверка на објави.**[[BR]] 223 **Функцијата на клиентска страна.**[[BR]] 224 [[Image(handleApprovePost.png)]][[BR]] 225 **Помошна функција во „services/reviewService“.**[[BR]] 226 [[Image(approvePostService.png)]][[BR]] 227 **Функцијата во контролерот.**[[BR]] 228 [[Image(approvePostController.2.png)]][[BR]] 226 229 227 230 == Use Case ID: 5 – Одбива објави== 228 **Модераторот успешно одбива објава**229 231 [[Image(deletePost2.0.png,width=900, height=450)]] 230 [[Image(deletePost2.0Success.png,width=900, height=450)]] 231 232 233 232 **Слично како во „Use Case ID: 5 – Одобрува објави“, се повикува функција на клиентска страна, потоа помошна функција која испраќа DELETE барање до backend. Ова барање се обработува од функција во контролерот, каде објавата се отстранува од табелата за проверка на објави. **[[BR]] 233 **Функцијата на клиентска страна.**[[BR]] 234 [[Image(handleDeletePostR.png)]][[BR]] 235 **Помошна функција во „services/reviewService“.**[[BR]] 236 [[Image(deletePostServiceR.png)]][[BR]] 237 **Функцијата во контролерот.**[[BR]] 238 [[Image(deletePostControllerR.png)]][[BR]] 239 240 241