== **Use Case Realizations** ---- || **ID** || **Use Case Realization** || || Login || Корисникот ја пристапува home страницата на сајтот. Има опции да се регистрира или да внесе корисничко име и лозинка. По внесување на неговите податоци, избира каков корисник е од User, Company и Team (во овој случај User). На фронтенд се се праќаат податоци до бекендот преку форма. При примање на податоците, бекендот го проверува корисникот во датабазата преку AccountService класата која на пониско ниво комуницира со AccountRepository при што се разграничува според изборот на тоа каков корисник се логира. По успешно наоѓање на корисникот во базата, соодветно се испраќаат корисничките информации до фронтендот преку Data Transfer Object, при добивање на успешни податоци на фронтендот корисникот се редиректира до страницата за поглед на профилот. Доколку не постои таков корисник соодветно е испратена порака за непостоечки корисник. Со ова завршува најавата на корисникот што е имплементирана на ист начин за било кој тип на корисник. По успешната најава корисникот се наоѓа на страницата за поглед на сопствените податоци. || || 1 || **Пребарува пракса/работа/проект според клучен збор** По успешна најава User тип на корисник има опција во навигацискиот бар да пребарува работа/пракса/проект според клучен збор. Ова се одвива на тој начин што корисникот внесува некој клучен збор на фронтенд и избира каков тип на работа бара. Ова се одвива преку форма, која постира на бекендот на патека /api/search и соодветно /job, /internship или /project. Ова се одвива преку SearchControllerot кој комуницира со WorkService преку функцијата за full-text search која е различна за сите типови на работа, соодветно во функцијата се креираат филтрирани листи преку итерации на сите работи кој содржат вештина или дескрипција/име ист на текстот кој е внесен како параметар во пребарувањето. По итерациите се враќа листа на одредени работи кој одговараат на критериумот, при што истите се испраќаат на фронтенд каде соодветно се додаваат во состојбата на реакт компонентата која врши real-time refresh на клиентот и ги листа резултатите од пребарувањето. || || 2-3 || **Ажурира лични податоци / Ажурира вештини кој ги поседува или сака да ги стекне** По најавата, корисникот може да одбере да ги смени својте лични податоци. По кликање на копчето Edit на фронтендот корисникот е редиректиран во рамките на фронтендот, на посебна форма во која може да ги внесе промените кој сака да ги направи на својот профил. По внесување на соодветните промени и кликање на копчето Confirm се праќа Post request на бекендот кој го прима патеката /api/edit/account и /user/{userid}/{userEmail}, ова се разликува за различните типови на корисници. По пристап на оваа патека, бекендот ги зема податоците за корисникот како и неговиот id и email потоа враќа optional доколку тој email постои, креира две листи од вештини кој се земаат од база врз основа на нивните id-a кој се праќаат од корисникот како List потоа се повикува AccountService функцијата editUser која ги прима сите нови вредности како параметри. Оваа функција проверува дали постои тој email, доколку постои се фрла exception кој е хендлан така што на фронтендот му праќа објект со ерор и е презентиран во формата за едит на податоци. Доколку новиот e-mail помине се гради UserResponseDTO Кој ги праќа новите податоци до фронтендот и корисникот се редиректира назад на профилот на фронтендот. || || 4 || **Објавува работа/пракса за која се потребни одредени вештини** // По најава како компанија, која се одвива исто како за секој корисник, компанијата може да одбере да регистрира работа или пракса. По избор на тоа што сака да регистрира, е редиректирана на соодветната страна на фронтендот, која содржи форма во која треба да се пополнат податоците за соодветно работата или праксата. По пополнувањето се клика на копче за Confirm при што се праќаат податоците до бекендот преку формата на патека /api/register/work и соодветно /job или /internship. По прифаќање на податоците бекендот проверува дали корисникот кој ја постирал работата има привилегии да го направи тоа. Доколку има се креира нова работа и се додава во базата преку WorkService сервисот. При регистрација на било каква работа MatchmakerService сервисот одново ги мечува сите корисници со ново внесените работи, пракси или проекти и ги зачувува коефициентите во базата. По завршување на сето ова на компанија корисникот му се враќа ново внесената работа како објект на фронтендот. Од таму оваа работа се додава во листата на сите работи на тој корисник, се редиректира до работите и се прикажува новата листа. Иста е постапката и за internship. ||