Changes between Version 2 and Version 3 of UseCaseImplementations


Ignore:
Timestamp:
02/20/24 16:12:34 (3 months ago)
Author:
211012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCaseImplementations

    v2 v3  
    6767}}}
    6868За спречување злопупотреба целиот процес на гласање се одвива преку чување на потребните атрибути во сесија на серверот, па така, по успешна валидација на граѓанинот, се креира нова сесија, како атрибут се запишува неговиот идентификатор и корисникот се пренасочува до страницата за избор на инстанца од избори на која ќе гласата (/vote/available). Во спротивно, корисникот се враќа на страницата за најава и се испишува соодветна порака за грешка.
     69По пренасочувањето, корисникот го добива следниот приказ, а за ова барање е одговорен контролерот:
     70{{{#!java
     71    @GetMapping("/vote/available")
     72    public String getAvailableElections(Model m,
     73                                        HttpServletRequest httpServletRequest) {
     74        if (httpServletRequest.getSession(false) == null) {
     75            return "redirect:/vote";
     76        }
     77        Long citizenId = (Long) httpServletRequest.getSession().getAttribute("citizenId");
     78        List<CandidatesElectionRealization> availableElections = candidatesElectionRealizationService.findAvailable(citizenId);
     79        m.addAttribute("realizations", availableElections);
     80        m.addAttribute("replaceTemplate", "elections_choice");
     81        return "index";
     82    }
     83}}}
     84{{{#!java
     85    @Override
     86    public List<CandidatesElectionRealization> findAvailable(Long citizenId) {
     87        Citizen citizen = citizenService.findById(citizenId);
     88        return repository.availableElections(citizen, citizen.getAddress().getMunicipality());
     89    }
     90}}}
     91{{{#!java
     92    @Query(value = "select distinct elections from CandidatesElectionRealization elections join Candidacy candidacy on candidacy.candidatesElectionRealization = elections where elections.date >= current_date and elections not in (select v.electionRealization from Vote v where v.citizen = :citizen) and (candidacy.municipality is null or candidacy.municipality = :municipality)")
     93    List<CandidatesElectionRealization> availableElections(@Param("citizen") Citizen citizen,
     94                                                           @Param("municipality") Municipality municipality);
     95}}}
     96Од безбедносни причини споменати погоре, идентификаторот на корисникот се зема од сесијата и соодветно од сервисот се бара листа на избори на кои најавениот корисник има право да гласа. Преку соодветниот репозиториум и прашалникот наведен во претходните фази и напишан во JPQL погоре, од базата се земаат потребните податоци. Истите се прикажуваат во паѓачка листа. Доколку корисникот се обиде да пристапи до оваа страница без претходна успешна валидација, по проверката за постоење на сесијата и валиден идентификатор, истиот ќе биде пренасочен кон страницата за најава.