Nasz monolityczny backend / maski administracyjne
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/ |
- 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
- MySQL dodaj użytkownika opw zgodnie z definicją w
glassfish-resources.xml
- MySQL Workbench wykonaj import bazy (opcja Forward Engineer)
- GlassFish wykonaj import
glassfish-resources.xml
- mvn clean install i deploy na serwer
-
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
-
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"
-
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
-
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)
- GlassFish pozwala na import definicji z pliku XML
- 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
- url, port, login i hasło są w pliku
- MySQL Workbench
- baza danych jest definiowana jako diagram ERM
- synchronizacja z serwerem poprzez opcje Forward Engineer (CTRL+G)
Przygotowanie wyborów
- Administrator definiuje / importuje oficjalną listę Komisji Okręgowych (51)
- Administrator definiuje / importuje oficjalną listę Kandydatów (11)
- Administrator definiuje / importuje oficjalną listę Komisji Obwodowych (około 27 000)
- Administrator zakłada / importuje konta użytkowników (wolentariusze, mężowie zaufania, około 25 000)
- System automatycznie rozsyła hasła użytkowikom, wraz z linkiem do aktywacji konta, na podany adres E-Mail.
- 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
- Użytkownik loguje się na stronie OPW i wybiera z listy jedną z przypisanych mu Komisji Obwodowych.
- Użytkownik widzi na okrenie dokładne informacje dotyczące wybranej Komisji Obwodowej.
- Użytkownik wpisuje dane / liczby wyborcze z protokołu do aplikacji OPW.
- Walidacja protokołu po stronie klienta (JavaScript/HTML5) dla błędów twardych.
- Użytkownik wysyła dane/liczby wyborcze na serwer OPW.
Dzień wyborczy - perspektywa serwera
- Liczby wyborcze spływają na serwer.
- Każdy protokół jest walidowany, w przypadku identyfikacji błędu miękkiego protokół protokół zostanie otagowany.
- Protokoły są zapisywane w bazie danych.
- Aktualny wynik wyborów jest publikowany co 5 minut.
Dzień wyborczy / perspektywa gościa
- Gość wchodzi na stronę główną aplikacji OPW-dashboard
- OPW/dashboard zapewnia dostęp do aktualnych wyników w skali kraju jak i gminy.
- Administrator (admin)
- Użytkownik (user)
- Gość (guest)
- Administrator (admin)
- Koordynator Gminy (odpowiedzialny za operatorów)
- Operator Informatyczny (najczęściej informatyk, może być odpowiedzialny za kilka komisji)
- Przewodniczący Komisji
- Gość (guest) - obywatel który odwiedza strone aby sprawdzić wynik wyborów
- Java EE 7 (GlassFish 4, JPA2, CDI, EJB, JSF 2.2 (PrimeFaces 5.1), JAX-RS, JAAS, JavaMail)
- MySQL 5.5 (UTF8, InnoDB, MySQL Workbench)
- REST
- HTML5
- CSS3
- Maven 3
- HTML5
- JavaScript (AngularJS)
- CSS3
- Bootstrap
Proces wgrywania protokołu z perspektywy.
- GET Zalogowanie
- GET Lista komisji obwodowych za które użytkownik jest odpowiedzialny
- GET Detale wybranej komisji obwodowej (dane podstawowe, lista kandydatów, lista protokołów)
- POST Upload liczb wyborczych
- GET Wylogowanie
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:
Plan implementacji
- [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
- [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
- [DONE] OPW-T-4 : Generowanie E-Mail poprzez szablony FreeMarker
- [DONE] Integracja TestNG i Mockito
- [DONE] Integracja mvn release
- [DONE] OPW-T-5 : Rozbicie kolumny
name
w bazie danych nafirstname
ilastname
- [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
- [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
- [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
- [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)
- [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
- [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
- [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
- [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