| 2 | Во последната верзија апликацијата имплементирани се следните сценарија (сите од прототипот и дополнителни): |
| 3 | ||= ID =||= UseCase =|| |
| 4 | || 1 || Прегледува избирачки список || |
| 5 | || 2 || Ажурира избирачки список || |
| 6 | || 3 || Прегледува изборни единици || |
| 7 | || 4 || Ажурира изборни единици || |
| 8 | || 5 || Прегледува гласачки места || |
| 9 | || 6 || Aжурира гласачки места || |
| 10 | || 7 || Креира инстанца од избори || |
| 11 | || 8 || Пријавува учество на партија и кандидати || |
| 12 | || 9 || **Назначува членови на комисија** || |
| 13 | || 10 || Гласа онлајн || |
| 14 | || 11 || **Доделува идентификациски код за гласање со физичко присуство** || |
| 15 | || 12 || **Гласа со физичко присуство** || |
| 16 | || 13 || Прегледува вкупна излезност || |
| 17 | || 14 || **Прегледува статистики од излезност по критериуми** || |
| 18 | || 15 || Прегледува вкунпи резултати од избори со кандидат || |
| 19 | || 16 || **Прегледува вкунпи резултати од избори со кандидатски листи** || |
| 20 | || 16 || **Прегледува статистики од резултати од избори по критериуми** || |
| 21 | || 17 || **Поднесува приговор** || |
| 22 | || 18 || **Одлучува по приговорот** || |
| 23 | || 19 || **Пријавува учество на кандидатски листи** || |
| 24 | |
| 25 | == Назначува членови на комисија |
| 26 | Администраторот пристапува на адреса /admin/committee каде му се отвора страница на која се прикажани сите комисии и формулар за внесување податоци за нова комисија. За ова е одговорен следниот контролер: |
| 27 | |
| 28 | {{{#!java |
| 29 | @GetMapping("admin/committee") |
| 30 | public String showCommittee(Model m) { |
| 31 | m.addAttribute("realizations", electionRealizationService.findAll()); |
| 32 | m.addAttribute("committeeMembers", committeeMemberService.findAll()); |
| 33 | m.addAttribute("pollingStations", addressService.findAllPollingStations()); |
| 34 | m.addAttribute("committees", committeeService.findAll()); |
| 35 | m.addAttribute("committeeForm", new Committee()); |
| 36 | m.addAttribute("replaceTemplate", "add_comitee"); |
| 37 | return "admin"; |
| 38 | } |
| 39 | }}} |
| 40 | По внесување на податоците и клик на копчето „Запиши“ се праќа POST барање до контролерот кој ги обработува. |
| 41 | {{{#!java |
| 42 | @PostMapping("/admin/committee") |
| 43 | public String addCommittee( |
| 44 | @RequestParam(required = false) Long id, |
| 45 | @RequestParam Long electionRealization, |
| 46 | @RequestParam Long pollingStation, |
| 47 | @RequestParam List<Long> membersId |
| 48 | ) { |
| 49 | committeeService.update(id, pollingStation, electionRealization, membersId); |
| 50 | return "redirect:/admin/committee"; |
| 51 | } |
| 52 | }}} |
| 53 | Контролерот повикува функција од committeeService за додавање и ажурирање на комисии каде се креира нова инстанца од објектот Committee, и за истиот се полнат добиентите податоци од формуларот. Дополнително, се додаваат и членовите на комисијата кои се во many-to-many релација со комисијата. Оттаму се повикува функцијата save од committeeRepository кој наследува од JpaRepository. Таа служи за зачувување на новиот објект во базата. За да се обезбеди интегритет и конзистентност на податоците, методот е анотиран со @Transactional, односно функцијата успешно ќе заврши ако и само ако успешно се запишат и комисијата и членовите. |
| 54 | {{{#!java |
| 55 | @Transactional |
| 56 | @Override |
| 57 | public Committee update(Long id, Long pollingStationId, Long electionRealizationId, List<Long> membersId) { |
| 58 | Committee committee; |
| 59 | if (id != null){ |
| 60 | committee = findById(id); |
| 61 | } else { |
| 62 | committee = new Committee(); |
| 63 | } |
| 64 | |
| 65 | committee.setPollingStation(addressService.findPollingStationById(pollingStationId)); |
| 66 | committee.setElectionRealization(electionRealizationService. findById(electionRealizationId)); |
| 67 | committeeRepository.save(committee); |
| 68 | membersId.forEach(memberId -> addMemberToCommittee(committee.getId(), memberId)); |
| 69 | return committeeRepository.save(committee); |
| 70 | } |
| 71 | }}} |
| 72 | Истава имплементација, преточена во SQL прашалникот кој се извршува позадински би изгледала вака: |
| 73 | {{{#!sql |
| 74 | begin; |
| 75 | |
| 76 | insert into komisii (im_id, ri_id) values (3, 1) returning kom_id; |
| 77 | |
| 78 | |
| 79 | insert into clenovi_na_komisija (g_id) values (20); |
| 80 | insert into clenovi_na_komisija (g_id) values (21); |
| 81 | insert into clenovi_na_komisija (g_id) values (22); |
| 82 | insert into clenovi_na_komisija (g_id) values (23); |
| 83 | insert into clenovi_na_komisija (g_id) values (24); |
| 84 | |
| 85 | COMMIT; |
| 86 | }}} |