wiki:AdvancedApplicationDevelopment

Version 2 (modified by 211012, 2 weeks 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)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.