#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

StatusMeaningDescriptionSchema
200OKSuccessful ResponseCollections

#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

StatusMeaningDescriptionSchema
200OKSuccessful ResponseMessage

#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

NameInTypeRequiredDescription
number_of_votesqueryintegertruenone

Example responses

200 Response

{ "status": "string", "message": "string" }

Responses

StatusMeaningDescriptionSchema
200OKSuccessful ResponseMessage
422Unprocessable EntityValidation ErrorHTTPValidationError

#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

NameInTypeRequiredDescription
number_of_votesqueryintegertruenone

Example responses

200 Response

{ "status": "string", "message": "string" }

Responses

StatusMeaningDescriptionSchema
200OKSuccessful ResponseMessage
422Unprocessable EntityValidation ErrorHTTPValidationError