| Version 7 (modified by , 18 hours ago) ( diff ) |
|---|
Имплементација на случаи на употреба
На следната табела се прикажани корисничките сценарија за кои ќе го прикажам кодот во контролерите:
| ID | Use Case Scenario | Actor |
| 7 | Пребарување низ ментори | Најавен корисник |
| 9 | Автоматско совпаѓање (match) со ментор | Студент |
| 10 | Контактирање на ментор | Студент |
| 11 | Пишување мислење за ментор | Студент |
| 12 | Прифати или одби барање за контакт | Ментор |
| 13 | Прифати или одби мислење на студент | Ментор |
Најавен корисник
Пребарување низ ментори
Најпрво имаме преглед на ментори без применето филтрирање, каде сите ментори се прикажани во грид.
Имплементацијата на кодот е следна:
Метод IsStudent() - заштитен (protected) метод кој проверува дали моментално најавениот корисник е од тип Student.
Прво го зема ID-то на најавениот корисник преку User.Identity.GetUserId(). Потоа, преку Entity Framework ја пребарува табелата Users, но само корисници од тип Student (користејќи OfType<Student>()). Методот Any враќа true ако постои студент со истото ID, во спротивно false. Овој метод се користи за контрола на логиката во View (на пример, да се прикажат одредени функционалности само за студенти).
Метод ViewMentors(...) - ActionResult метод кој враќа View со листа на ментори и поддржува повеќе параметри за пребарување и филтрирање: име, презиме, предмет, тема и достапност.
Се креира нов ApplicationDbContext и се вчитуваат сите ментори заедно со нивните предмети (Subjects) и теми (Topics) користејќи Include. Податоците од ентитетот Mentor се мапираат во EditMentorModel (ViewModel). Потоа следуваат условни филтри:
- Ако е внесено име, се проверува дали името или презимето на менторот го содржи внесениот текст (без разлика на големи/мали букви).
- Ако е внесено презиме, се филтрира само по презиме.
- Ако е внесен предмет, се проверува дали некој од предметите на менторот го содржи внесениот текст.
- Ако е внесена тема, се проверува истото за темите.
- Ако е внесена вредност за available, таа се парсира во bool и се филтрираат само ментори со соодветна достапност.
Во ViewBag.IsStudent се сместува резултатот од методот IsStudent() за да може View-то да знае дали корисникот е студент. Потоа, View-то се враќа со филтрираната листа на ментори.
По примена на филтрирање според предмет, ги имаме следните резултати:
Корисникот може да филтрира според повеќе критериуми одеднаш.
Студент
Автоматско совпаѓање (match) со ментор
Корисниците кои се студенти можат да направат автоматско совпаѓање со ментор според предметите и интересите кои се во нивните профили.
Имплементација:
Овој HTTP GET метод служи за пронаоѓање на ментори кои најдобро одговараат на интересите и предметите на најавениот студент.
Најпрво го зема ID-то на тековниот корисник. Се вчитува студентот од базата, заедно со неговите предмети и теми. Доколку корисникот не е студент, се враќа HttpNotFound, а оваа функционалност е сокриена за ментори во View-то.
Потоа се вчитуваат сите достапни ментори со нивните предмети и интереси. Се екстрахираат листи од имиња на предмети и теми за студентот и за секој ментор се пресметува „score“ (оценка на совпаѓање) преку методот CalculateMatchScore. Се задржуваат само менторите со score поголем од 0 и се сортираат по опаѓачки редослед.
Резултатите повторно се мапираат во EditMentorModel и се враќа View-то ViewMentors, но овојпат со листа на најдобро совпаднати ментори.
CalculateMatchScore е имплементиран под него:
Ако matchType е "subjects" или "both", се пресметува пресекот помеѓу предметите на студентот и менторот. Секој заеднички предмет носи 2 поени. Ако matchType е "interests" или "both", се пресметува пресекот помеѓу темите на интерес. Секоја заедничка тема носи 3 поени, така што темите имаат поголем приоритет од предметите.
На крај се враќа вкупниот резултат кон FindBestMatch.
Контактирање на ментор
Пишување мислење за ментор
Ментор
Прифати или одби барање за контакт
Прифати или одби мислење на студент
Attachments (29)
- пребарување (1).png (151.7 KB ) - added by 20 hours ago.
- пребарување2 (1).png (105.6 KB ) - added by 20 hours ago.
- автоматскосовпаѓање.png (20.1 KB ) - added by 20 hours ago.
- prebaruvanjekod1.png (157.8 KB ) - added by 19 hours ago.
- prebaruvanjekod2.png (124.6 KB ) - added by 19 hours ago.
- findbestmatch1.png (95.8 KB ) - added by 19 hours ago.
- findbestmatch2.png (126.4 KB ) - added by 19 hours ago.
- calculate.png (80.2 KB ) - added by 19 hours ago.
- прегледнаментор.png (188.1 KB ) - added by 19 hours ago.
- контактментор.png (22.3 KB ) - added by 19 hours ago.
- прифатиодби.png (36.2 KB ) - added by 19 hours ago.
- прифатиодби2.png (29.9 KB ) - added by 19 hours ago.
- kontaktkod1.png (107.3 KB ) - added by 19 hours ago.
- kontaktkod2.png (46.3 KB ) - added by 19 hours ago.
- inboxkod1.png (105.4 KB ) - added by 19 hours ago.
- inboxkod2.png (99.3 KB ) - added by 19 hours ago.
- acceptkod.png (59.0 KB ) - added by 19 hours ago.
- replykod.png (86.5 KB ) - added by 19 hours ago.
- rejectkod.png (27.4 KB ) - added by 19 hours ago.
- getnotif1.png (99.6 KB ) - added by 19 hours ago.
- getnotif2.png (102.1 KB ) - added by 19 hours ago.
- getnotif3.png (99.0 KB ) - added by 19 hours ago.
- markread.png (43.6 KB ) - added by 19 hours ago.
- opinion1.png (108.5 KB ) - added by 19 hours ago.
- opinion2.png (102.1 KB ) - added by 19 hours ago.
- мислењементор.png (16.6 KB ) - added by 19 hours ago.
- прифатиодбимислење.png (26.8 KB ) - added by 19 hours ago.
- прифатиодбимислење2.png (22.9 KB ) - added by 19 hours ago.
- filter (1).png (73.7 KB ) - added by 19 hours ago.

.png)


.png)
.png)









