Changes between Version 1 and Version 2 of AdvancedApplicationDevelopment


Ignore:
Timestamp:
06/18/24 17:11:13 (2 weeks ago)
Author:
211012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedApplicationDevelopment

    v1 v2  
    11= Напреден апликативен развој =
     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
     74begin;
     75
     76insert into komisii (im_id, ri_id) values (3, 1) returning kom_id;
     77
     78
     79insert into clenovi_na_komisija (g_id) values (20);
     80insert into clenovi_na_komisija (g_id) values (21);
     81insert into clenovi_na_komisija (g_id) values (22);
     82insert into clenovi_na_komisija (g_id) values (23);
     83insert into clenovi_na_komisija (g_id) values (24);
     84
     85COMMIT;
     86}}}