Version 2 (modified by 7 months ago) ( diff ) | ,
---|
Напреден апликативен развој
Во последната верзија апликацијата имплементирани се следните сценарија (сите од прототипот и дополнителни):
ID | UseCase |
---|---|
1 | Прегледува избирачки список |
2 | Ажурира избирачки список |
3 | Прегледува изборни единици |
4 | Ажурира изборни единици |
5 | Прегледува гласачки места |
6 | Aжурира гласачки места |
7 | Креира инстанца од избори |
8 | Пријавува учество на партија и кандидати |
9 | Назначува членови на комисија |
10 | Гласа онлајн |
11 | Доделува идентификациски код за гласање со физичко присуство |
12 | Гласа со физичко присуство |
13 | Прегледува вкупна излезност |
14 | Прегледува статистики од излезност по критериуми |
15 | Прегледува вкунпи резултати од избори со кандидат |
16 | Прегледува вкунпи резултати од избори со кандидатски листи |
16 | Прегледува статистики од резултати од избори по критериуми |
17 | Поднесува приговор |
18 | Одлучува по приговорот |
19 | Пријавува учество на кандидатски листи |
Назначува членови на комисија
Администраторот пристапува на адреса /admin/committee каде му се отвора страница на која се прикажани сите комисии и формулар за внесување податоци за нова комисија. За ова е одговорен следниот контролер:
@GetMapping("admin/committee") public String showCommittee(Model m) { m.addAttribute("realizations", electionRealizationService.findAll()); m.addAttribute("committeeMembers", committeeMemberService.findAll()); m.addAttribute("pollingStations", addressService.findAllPollingStations()); m.addAttribute("committees", committeeService.findAll()); m.addAttribute("committeeForm", new Committee()); m.addAttribute("replaceTemplate", "add_comitee"); return "admin"; }
По внесување на податоците и клик на копчето „Запиши“ се праќа POST барање до контролерот кој ги обработува.
@PostMapping("/admin/committee") public String addCommittee( @RequestParam(required = false) Long id, @RequestParam Long electionRealization, @RequestParam Long pollingStation, @RequestParam List<Long> membersId ) { committeeService.update(id, pollingStation, electionRealization, membersId); return "redirect:/admin/committee"; }
Контролерот повикува функција од committeeService за додавање и ажурирање на комисии каде се креира нова инстанца од објектот Committee, и за истиот се полнат добиентите податоци од формуларот. Дополнително, се додаваат и членовите на комисијата кои се во many-to-many релација со комисијата. Оттаму се повикува функцијата save од committeeRepository кој наследува од JpaRepository. Таа служи за зачувување на новиот објект во базата. За да се обезбеди интегритет и конзистентност на податоците, методот е анотиран со @Transactional, односно функцијата успешно ќе заврши ако и само ако успешно се запишат и комисијата и членовите.
@Transactional @Override public Committee update(Long id, Long pollingStationId, Long electionRealizationId, List<Long> membersId) { Committee committee; if (id != null){ committee = findById(id); } else { committee = new Committee(); } committee.setPollingStation(addressService.findPollingStationById(pollingStationId)); committee.setElectionRealization(electionRealizationService. findById(electionRealizationId)); committeeRepository.save(committee); membersId.forEach(memberId -> addMemberToCommittee(committee.getId(), memberId)); return committeeRepository.save(committee); }
Истава имплементација, преточена во SQL прашалникот кој се извршува позадински би изгледала вака:
begin; insert into komisii (im_id, ri_id) values (3, 1) returning kom_id; insert into clenovi_na_komisija (g_id) values (20); insert into clenovi_na_komisija (g_id) values (21); insert into clenovi_na_komisija (g_id) values (22); insert into clenovi_na_komisija (g_id) values (23); insert into clenovi_na_komisija (g_id) values (24); COMMIT;
Attachments (9)
- komisii_1.png (65.0 KB ) - added by 7 months ago.
- komisii_2.png (155.6 KB ) - added by 7 months ago.
- kod.png (36.8 KB ) - added by 7 months ago.
- kod.2.png (36.8 KB ) - added by 7 months ago.
- glas_kod.png (18.7 KB ) - added by 7 months ago.
- izleznost.png (120.0 KB ) - added by 7 months ago.
- rezultati.png (115.3 KB ) - added by 7 months ago.
- kandidatska_lista.png (77.0 KB ) - added by 7 months ago.
- kandidatska_lista_2.png (81.4 KB ) - added by 7 months ago.
Download all attachments as: .zip