Changes between Version 11 and Version 12 of AdvancedApplicationDevelopment


Ignore:
Timestamp:
06/25/24 19:39:20 (8 days ago)
Author:
211012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedApplicationDevelopment

    v11 v12  
    232232    }
    233233}}}
    234 И приказот кој го добива корисникот е следниот:
     234И приказот кој го добива корисникот е следниот:
     235[[Image(izleznost.png)]]
    235236== Прегледува вкупни резултати од избори со кандидати/кандидатски листи
    236237На јавната страница /results достапни се податоци за резултатите од тековни и минати реализации со можност за филтрирање по реализации, општини и/или гласачки места. Очекувано, при реално користење оваа функционалност би била најкористена и најоптоварена, а истовремено повлекува големо количество податоци, односно податоци за сите гласови, кандидатури, избирачки места и слично. Со цел да направиме пооптимално решение, оваа го имплементиравме на начин што во базата е креирана функција којашто при креирање реализација креира материјализирани погледи за резултатите по општини и по избирачки места. На овој начин, обезбедуваме при освежување на погледот, соодветно да се освежи само погледот за моменталната реализација, без притоа да трошиме ресурси за агрегација на резултатите од претходни реализации, како и да не го оптоваруваме погледот со дополнителен, голем број редици.
     238[[Image(rezultati.png)]]
    237239{{{#!java
    238240create or replace function public.create_view_for_candidates_realizations()
     
    418420    }
    419421}}}
     422
     423За освежување на погледите, имајќи предвид дека се со динамички генерирано име, потребно беше решение со кое на истиот начин истоте ќе се освежат. За таа цел, во базата креиравме соодветни функции кои го освежуваат погледот со id зададено како параметар
     424{{{#!sql
     425create or replace function public.refresh_view_for_lists_realizations(real_id bigint)
     426    returns void
     427    language plpgsql
     428as
     429$$
     430declare
     431    view_name text;
     432    result record;
     433begin
     434
     435    view_name := format('lists_results_per_polling_stations_%s', real_id);
     436    raise notice '%', view_name;
     437    execute format('refresh materialized view %s;', view_name);
     438   
     439    view_name := format('lists_results_per_municipalities_%s', real_id);
     440    raise notice '%', view_name;
     441    execute format('refresh materialized view %s;', view_name);
     442
     443end;
     444$$;
     445}}}
     446
     447{{{#!sql
     448create function refresh_view_for_candidacy_realizations(real_id bigint) returns void
     449    language plpgsql
     450as
     451$$
     452declare
     453    view_name text;
     454    result record;
     455begin
     456
     457    view_name := format('results_per_polling_stations_%s', real_id);
     458    raise notice '%', view_name;
     459    execute format('refresh materialized view %s;', view_name);
     460
     461    view_name := format('results_per_municipalities_%s', real_id);
     462    raise notice '%', view_name;
     463    execute format('refresh materialized view %s;', view_name);
     464end;
     465$$;
     466}}}
     467За ова соодветно да се поврзе со програмската имплементација, имплементиравме метод кој се извршува на секои 30 секунди и ги освежува погледите за реализацијата која се одржува на денот на извршување на програмата
     468{{{!#java
     469    @Scheduled(cron = "*/30 * * * *")
     470    private void refreshMaterializedViews() {
     471        ElectionRealization er = electionRealizationService.findTodaysRealization();
     472        turnoutRepository.refreshCandidatesResults(er.id);
     473        System.out.println("REFRESHED VIEW");
     474    }
     475}}}
    420476== Пријавува учество на кандидатски листи
    421477Администраторот со пристап до адресата /candidatesLists добива приказ на листа со постоечки кандидатски листи и можност за креирање на нова кандидатска листа со избор на општина, реализација и изборна единица. Потоа следи одбирање на кандидатите при што бројот е лимитиран на 20, според изборниот законик во Македонија. Креирањето на кандидатската листа е исто така имплементирано во вид на трансакција, односно методот е анотиран со @Transactional.
     478[[Image(kandidatska_lista.png)]]
     479[[Image(kandidatska_lista_2.png)]]
    422480{{{#!java
    423481    @Override
     
    456514    }
    457515}}}
     516{{{#!sql
     517DO
     518$$
     519    DECLARE
     520        new_kl_id BIGINT;
     521    BEGIN
     522        INSERT INTO kandidatski_listi (ie_id, p_id, ri_id, kl_opis, o_id)
     523        VALUES (1, 1, 1, 'kandidatura_opis', 1)
     524        RETURNING kl_id INTO new_kl_id;
     525
     526        INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (1, kl_id);
     527        INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (2, kl_id);
     528        INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (3, kl_id);
     529        INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (4, kl_id);
     530        INSERT INTO e_kandidat_vo (g_id, kl_id) VALUES (5, kl_id);
     531
     532        COMMIT;
     533    END
     534$$;
     535}}}