Changes between Version 2 and Version 3 of AdvancedApplicationDevelopment


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

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedApplicationDevelopment

    v2 v3  
    7272Истава имплементација, преточена во SQL прашалникот кој се извршува позадински би изгледала вака:
    7373{{{#!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;
     74DO $$
     75    DECLARE
     76        new_kom_id BIGINT;
     77    BEGIN
     78        INSERT INTO komisii (im_id, ri_id) VALUES (1, 1)
     79        RETURNING kom_id INTO new_kom_id;
     80   
     81        INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (20, new_kom_id);
     82        INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (21, new_kom_id);
     83        INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (22, new_kom_id);
     84        INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (23, new_kom_id);
     85        INSERT INTO se_clenovi_na (g_id, kom_id) VALUES (24, new_kom_id);
     86   
     87        COMMIT;
     88    END $$;
    8689}}}
     90== Доделува идентификациски код за гласање со физичко присуство
     91Корисниците со улога членови на комисија, можат да се најават на системот и пристапат на адресата /admin/electionRealizationInterface, при што добиваат преглед на избирачкиот список од реализацијата којашто се одржува на деновите на најава, за гласачкото место во кое се одговорни. Дополнително, на крајот на редот достапна е акцијата „Гласај“ со што можат да генерираат идентификациски код за гласање доколку гласачот сака да го оствари правото на глас со физичко присуство. Контролерот кој ја опслужува оваа акција е следен:
     92{{{#!java
     93    @GetMapping("/admin/electionRealizationInterface")
     94    public String showElectionRealization(Model m, Principal p, Authentication authentication) {
     95        UserProfile userProfile = (UserProfile) authentication.getPrincipal();
     96        m.addAttribute("realization", committeeService.findElectionRealizationByCitizen(userProfile.getCitizen().getId()));
     97        m.addAttribute("citizens", committeeService.getCitizens(userProfile.getCitizen().getId()));
     98        m.addAttribute("replaceTemplate","election_realization_interface");
     99        return "index";
     100    }
     101}}}
     102За да се избегнат било какви манипулации и приказ на информации кои не треба да се достапни за најавениот корисник, неговиот идентитет се утврдува директно на серверска страна, од најавениот корисник. Дополнително во сервисите се процесираат реализацијата и избирачкиот список кој треба да го гледа корисникот.
     103{{{#!java
     104    @Override
     105    public List<Citizen> getCitizens(Long committeeId) {
     106        CommitteeMember committeeMember = committeeMemberRepository.findById(committeeId).orElseThrow(RuntimeException::new);
     107        Committee committee = committeeRepository.findCommitteeByMembersContainsAndElectionRealization_DateIsAfter(committeeMember, LocalDate.now().minusDays(1));
     108        PollingStation pollingStation = committee.getPollingStation();
     109        return citizenRepository.findAllByAddress_PollingStation(pollingStation.getId()).stream().filter(x -> x instanceof Citizen).toList();
     110    }
     111}}}
     112Во committeeService-от се пронаѓа членот на комисија кој го претставува корисничкиот профил, комисијата во која е член, како и избирачкиот список за гласачкото местоо за кое е одговорна. Во
     113програмската имплементација, ова се прави со повик на соодветни методи од Spring Data JPA, а во SQL би изгледало вака:
     114{{{#!sql
     115    select *
     116    from komisii k
     117    join se_clenovi_na ck on k.kom_id = ck.kom_id
     118    join realizacii_na_izbori ri on ri.ri_id = k.ri_id
     119    where ck.g_id = 1 and ri.ri_id = 1 and ri.ri_datum = CURRENT_DATE
     120    limit 1
     121}}}