Skip to content

OtwartaPlatformaWyborcza/OPW-backend-JavaEE

Repository files navigation

Otwarta Platforma Wyborcza

  1. Organizacja
  2. Członkowie
  3. Jak do nas dołączyć?

Otwarta Platforma Wyborcza - backend

Nasz monolityczny backend / maski administracyjne

Linki

Element Link
Tablica Trello https://trello.com/b/hKes4OCP/otwarta-platforma-wyborcza
Backend (Java EE) daily http://dev.otwartapw.pl/opw/
Frontend komisja (AngularJS) daily http://k.dev.otwartapw.pl/
Frontend wyniki (jQuery) daily http://dev.otwartapw.pl/

Quickstart

  1. MySQL skonfiguruj serwer do pracy w trybie UTF-8, jako engine InnoDB
  • default-storage-engine = InnoDB
  • collation-server = utf8_general_ci
  • character-set-server = utf8
  1. MySQL dodaj użytkownika opw zgodnie z definicją w glassfish-resources.xml
  2. MySQL Workbench wykonaj import bazy (opcja Forward Engineer)
  3. GlassFish wykonaj import glassfish-resources.xml
  4. mvn clean install i deploy na serwer

Simplestart

  1. Sklonuj repozytorium zastępując {YOUR_PROJECTS_DIRECTORY} ścieżką do katalogu w którym ma znaleźć się projekt.

     $ cd {YOUR_PROJECT_DIRECTORY}
     $ git clone https://github.com/OtwartaPlatformaWyborcza/OPW-backend-JavaEE.git
    
  2. Skonfiguruj bazę danych zastępując {YOUR_PROJECTS_DIRECTORY} ścieżką do katalogu w którym znajduje się sklonowany projekt.

     $ mysql -u root -p --execute="CREATE USER 'opw'@'localhost' IDENTIFIED BY 'Lc4!_-f4FjmypLDRHW.'; GRANT ALL PRIVILEGES ON * . * TO 'opw'@'localhost'; FLUSH PRIVILEGES;"
     $ mysql -u opw --password='Lc4!_-f4FjmypLDRHW.' --execute="SOURCE {YOUR_PROJECTS_DIRECTORY}/OtwartaPlatformaWyborcza/ddl/db_opw.sql"
    
  3. Skonfiguruj serwer aplikacji. Zastąp {YOUR_PROJECTS_DIRECTORY} ścieżką do katalogu w którym znajduje się projekt.

     $ wget http://download.java.net/glassfish/4.1/release/glassfish-4.1.zip
     $ unzip glassfish-4.1*zip
     $ echo "export GLASSFISH_HOME=`pwd`/glassfish4" >> ~/.bashrc
     $ ./glassfish4/glassfish/bin/asadmin add-resources {YOUR_PROJECTS_DIRECTORY}/OtwartaPlatformaWyborcza/opw/src/main/setup/glassfish-resources.xml
    
  4. Zbuduj i uruchom projekt. Zastąp {YOUR_PROJECTS_DIRECTORY} ścieżką do katalogu w którym znajduje się projekt.

     $ cd {YOUR_PROJECTS_DIRECTORY}/OtwartaPlatformaWyborcza/opw
     $ mvn clean install glassfish:deploy
    

##Wymagane oprogramowania

  • JDK7 (migracja na JDK8 ASAP)
  • IDE z obsługą Maven 3
  • Kontener JEE w profilu full (zależność JavaMail) (preferuje i polecam GlassFish 4)
  • Wymagane JNDI resources
    • GlassFish pozwala na import definicji z pliku XML setup/glassfish-resources.xml
    • jdbc/opw dla bazy danych (plik XML - pełna definicja)
    • mail/opw dla JavaMail (plik XML - brakuje loginów, haseł jak i adresów)
  • MySQL 5 na localhost (w pliku .mwb jest ustawiona min. kompatybilność na 5.5)
    • url, port, login i hasło są w pliku persistance.xml
  • MySQL Workbench
    • baza danych jest definiowana jako diagram ERM
    • synchronizacja z serwerem poprzez opcje Forward Engineer (CTRL+G)

Proces

Przygotowanie wyborów

  1. Administrator definiuje / importuje oficjalną listę Komisji Okręgowych (51)
  2. Administrator definiuje / importuje oficjalną listę Kandydatów (11)
  3. Administrator definiuje / importuje oficjalną listę Komisji Obwodowych (około 27 000)
  4. Administrator zakłada / importuje konta użytkowników (wolentariusze, mężowie zaufania, około 25 000)
  5. System automatycznie rozsyła hasła użytkowikom, wraz z linkiem do aktywacji konta, na podany adres E-Mail.
  6. Administrator systemu ma możliwość edycji i weryfikacji kont użytkownków wraz ich danymi (możliwa fluktuacja użytkowników tuż przed wyborami)

Dzień wyborczy - perspektywa użytkownika

  1. Użytkownik loguje się na stronie OPW i wybiera z listy jedną z przypisanych mu Komisji Obwodowych.
  2. Użytkownik widzi na okrenie dokładne informacje dotyczące wybranej Komisji Obwodowej.
  3. Użytkownik wpisuje dane / liczby wyborcze z protokołu do aplikacji OPW.
  4. Walidacja protokołu po stronie klienta (JavaScript/HTML5) dla błędów twardych.
  5. Użytkownik wysyła dane/liczby wyborcze na serwer OPW.

Dzień wyborczy - perspektywa serwera

  1. Liczby wyborcze spływają na serwer.
  2. Każdy protokół jest walidowany, w przypadku identyfikacji błędu miękkiego protokół protokół zostanie otagowany.
  3. Protokoły są zapisywane w bazie danych.
  4. Aktualny wynik wyborów jest publikowany co 5 minut.

Dzień wyborczy / perspektywa gościa

  1. Gość wchodzi na stronę główną aplikacji OPW-dashboard
  2. OPW/dashboard zapewnia dostęp do aktualnych wyników w skali kraju jak i gminy.

Specyfikacja

Grupy użytkowników

  1. Administrator (admin)
  2. Użytkownik (user)
  3. Gość (guest)

Grupy użytkowników (docelowa architektura)

  1. Administrator (admin)
  2. Koordynator Gminy (odpowiedzialny za operatorów)
  3. Operator Informatyczny (najczęściej informatyk, może być odpowiedzialny za kilka komisji)
  4. Przewodniczący Komisji
  5. Gość (guest) - obywatel który odwiedza strone aby sprawdzić wynik wyborów

Software stack

Backend

  1. Java EE 7 (GlassFish 4, JPA2, CDI, EJB, JSF 2.2 (PrimeFaces 5.1), JAX-RS, JAAS, JavaMail)
  2. MySQL 5.5 (UTF8, InnoDB, MySQL Workbench)
  3. REST
  4. HTML5
  5. CSS3
  6. Maven 3

Frontend

  1. HTML5
  2. JavaScript (AngularJS)
  3. CSS3
  4. Bootstrap

REST

Proces wgrywania protokołu z perspektywy.

  1. GET Zalogowanie
  2. GET Lista komisji obwodowych za które użytkownik jest odpowiedzialny
  3. GET Detale wybranej komisji obwodowej (dane podstawowe, lista kandydatów, lista protokołów)
  4. POST Upload liczb wyborczych
  5. GET Wylogowanie

Headers

Jako prefix X-OPW

  • X-OPW-login
  • X-OPW-password
  • X-OPW-token
  • X-OPW-API-client
  • X-OPW-API-token
  • X-OPW-debug-500

Dokumentacja API REST jest dostępna w następujących formatach:

Roadmap

Plan implementacji

Wersja 0.1 [wydana 2015.03.24]

  • [DONE] Definicja bazy danych
  • [DONE] Funkcjonalność CRUD(Create Remove Update Delete) w przeglądarce dla obiektów
    • user (+ generowanie hasła )
    • kandydat
    • komisja okręgowa
    • komisja obwodowa

Wersja 0.2 [wydana 2015.03.29]

  • [DONE] Wysyłanie E-Maili z loginem i hasłem
  • [DONE] Użytkownik może zarejestrować numer telefonu dla funkcji protokół SMS
  • [DONE] Konfiguracja Jenkins i działający CI
  • [DONE] Definicja i implementacja interfejsu REST
  • [DONE] Kolejne funkcje dla administratora
    • reset hasła użytkownika
    • aktywowanie i deaktywowanie konta użytkownika
  • [DONE] Definicja szablonu E-Mail

Wersja 0.3.0 [wydana 2015.04.03]

  • [DONE] OPW-T-4 : Generowanie E-Mail poprzez szablony FreeMarker
  • [DONE] Integracja TestNG i Mockito
  • [DONE] Integracja mvn release

Wersja 0.4.0 [wydana 2015.04.12]

  • [DONE] OPW-T-5 : Rozbicie kolumny name w bazie danych na firstname i lastname
  • [DONE] OPW-A-8 Możliwość zamknięcia listy kandydatów.
  • [DONE] OPW-A-3 Import CSV dla encji: komisja okręgowa
  • [DONE] OPW-T-5 : Definicja struktury plików CSV Komisji Obwodowych
  • [DONE] Migracja repozytoriów do organizacji
  • [DONE] Wykonanie mockup serwisów REST dla klientów

Wersja 0.5.0 [wydana 2015.04.24]

  • [DONE] OPW-T-6 Autoryzacja i autentyfikacja użytkowników
  • [DONE] OPW-A-2 Import CSV dla Komisji Obwodowych
  • [DONE] OPW-U-6 aktywacja konta
  • [DONE] OPW-T-2 Integracja SFL4J

Wersja 0.6.0 [wydana 2015.05.03]

  • [DONE] OPW-A-9 CRUD listy Komisji Obwodowych przypisanych do użytkownika.
  • [DONE] OPW-U-2 Lista moich Komisji Obwodowych.
  • [DONE] OPW-U-5 Upload liczb wyborczych.
  • [DONE] OPW-U-7 Ręczny wybór Komisji Obwodowej.
  • [DONE] OPW-U-8 Lista protokołów dla Komisji Obwodowej.
  • [DONE] OPW-T-8 Serwis REST do rejestracji.
  • [DONE] REST API dla klienta AngularJS

Wersja 0.7.0 [wydana 2015.05.08]

  • [DONE] OPW-T-1 Dokumentacji REST API
  • [DONE] OPW-U-3 Podstawowe informacje dla wybranej Komisji Obwodowej.
  • [DONE] OPW-U-9 Jako użytkownik, mogę oddać głos +/- dla protokołu
  • [DONE] OPW-A-6 Import kont użytkowników z pliku CSV
  • [DONE] OPW-G-3 Formularz rejestracji.
  • [DONE] OPW-I-1 Konfiguracja klastra GlassFish 4.1 (min. 3x Slave)

Wersja 0.8.0 [wydana 2015.05.11]

  • [DONE] Definicja infrastruktury na nadchodzące wybory
  • [DONE] OPW-U-4 Walidacja błędów twardych.
  • [DONE] OPW-I-2 Klaster PostgreSQL
  • [DONE] OPW-I-3 Docker dashboard
  • [DONE] OPW-I-4 Docker client
  • [DONE] OPW-I-5 Docker backend

Wersja 0.9.0

  • [DONE] OPW-T-10 DB Linki dla wybranego protokołu
  • [DONE] OPW-T-11 DB Odwzorowanie koncepcji 'group' i 'permission'
  • [DONE] OPW-T-12 Oddzielenie masek administracyjnych
  • [DONE] OPW-U-10 Lista linków dla protokołu
  • [DONE] OPW-T-12 Dodawanie i usuwanie linków dla wybranego protokołu
  • [DONE] OPW-T-13 Lista przypisanych komisji obwodowych

Wersja 1.0

  • [DONE] Backend w Java EE
  • [DONE] Maski administratora w JSF
  • [DONE] Maski użytkowników w HTML - AngularJS + REST
  • [DONE] Wyniki wyborów w HTML - jQuery + REST

Wersja 1.1

  • [WiP] Definicja szablonu SMS
  • Podbieranie protokołów przesłanych na skrzynke pocztową
  • Automatyczne parsowanie protokołów ze skrzynki pocztowej
    • import poprawnych protokołów
    • tagowanie błędnych protokołów
  • tagowanie błędnych protokołów

About

Otwarta Platforma Wyborcza - Backend na wybory Prezydenta RP 2015

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages