#
Databáza
Server používa na ukladanie dát dokumentovú databázu MongoDB. Aj keď je do MongoDB možné vkladať dáta s rôznymi atribútmi, používame modely jednotlivých dátových entít, ktoré špecifikujú štruktúru objektu a definujú typy jeho atribútov. Pracujeme s nasledujúcimi kolekciami:
- votes
- parties
- candidates
- polling_places
- key_pairs
Štruktúra uloženého hlasu:
class Vote(BaseModel):
token: str
party_id: Optional[int] = None
election_id: str
candidate_ids: List[int] = []
Ďalej sa počas spracovania hlasov dynamicky pridajú dva atribúty a to:
polling_place_id: int
synchronized: bool
Atribút polling_place_id slúži na spojenie hlasu s miestnosťou, v ktorej bol zvolený atribút synchronized, ktorý indikuje, či bol daný hlas už zandexovaný do ElasticSearch-u.
Štruktúra politickej strany:
class Party(BaseModel):
id: int = Field(..., alias="_id")
party_number: int
name: str
official_abbr: str
abbr: str
image: str
image_bytes: str
color: str
candidates: List[Candidate] = []
Dátová štruktúra politickej strany obsahuje základné údaje ako názov, skratka, číslo a doplnkové údaje ako farba a logo, ktoré sa používajú v štatistickej aplikácii. Ďalej strana obsahuje zoznam kadidátov, ktorí sú reprezentovaný vlastným modelom.
Štruktúra volebnej miestnosti:
class PollingPlace(BaseModel):
id: int = Field(..., alias="_id")
region_code: int
region_name: str
administrative_area_code: int
administrative_area_name: str
county_code: int
county_name: str
municipality_code: int
municipality_name: str
polling_place_number: int
registered_voters_count: int
Dátová štruktúra volebnej miestnosti obsahuje informácie o územných celkoch, v ktorých sa daná miestnosť nachádza. Tieto údaje budú následne použité na prepočítavanie výslekov pre rôzne lokality (obce, okresy a kraje).
Štruktúra kandidáta:
class Candidate(BaseModel):
id: int = Field(..., alias="_id")
party_number: int
order: int
first_name: str
last_name: str
degrees_before: str
age: int
occupation: str
residence: str
Dátová štruktúra kandidáta obsahuje základné údaje o kandidátovi, ktoré sú použité na zobrazovanie výsledkov a obsahuje taktiež prepojenie na politickú stranu, ktorej je súčasťou.
Štruktúra kľúčového páru:
class KeyPair(BaseModel):
id: int = Field(..., alias="_id")
polling_place_id: int
private_key_pem: str
public_key_pem: str
g_private_key_pem: str
g_public_key_pem: str
Kľúčový pár je špecifický pre každú volebnú miestnosť a jeho privátnym kľúčom je dešifrovaná iba kominikácia, ktorá prichádza z tejto volebnej miestnosti. Tento krok zvyšuje bezpečnosť komunikácie.
#
Popis API
#
schema_database_schema_get
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/database/schema', headers = headers)
print(r.json())
GET /database/schema
Schema
Get all collections from database
Example responses
200 Response
{
"collections": []
}
Responses
#
import_data_database_import_data_post
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.post('/database/import-data', headers = headers)
print(r.json())
POST /database/import-data
Import Data
Example responses
200 Response
{
"status": "string",
"message": "string"
}
Responses
#
seed_data_database_seed_data_post
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.post('/database/seed-data', params={
'number_of_votes': '0'
}, headers = headers)
print(r.json())
POST /database/seed-data
Seed Data
Parameters
Example responses
200 Response
{
"status": "string",
"message": "string"
}
Responses
#
seed_votes_database_seed_votes_post
Code samples
import requests
headers = {
'Accept': 'application/json'
}
r = requests.post('/database/seed-votes', params={
'number_of_votes': '0'
}, headers = headers)
print(r.json())
POST /database/seed-votes
Seed Votes
Parameters
Example responses
200 Response
{
"status": "string",
"message": "string"
}