Skip to content
Snippets Groups Projects

Publikace výsledkovky na web MO

Merged Jiří Kalvoda requested to merge jk/vysledkovka into devel
1 file
+ 77
0
Compare changes
  • Side-by-side
  • Inline
+ 77
0
 
Snapshot výsledkové listiny
 
===========================
 
 
Výsledkové listiny soutěží (nikoliv celých kol, protože u celých kol
 
výsledkovky nezveřejňujeme) zobrazované účastníkům (případně exportované na web
 
MO) se generují ze snapshotů obsahujících veškeré informace. K snapshotu může
 
být také přidružena PDF verze výsledkové listiny.
 
 
Každý snapshot je reprezentován řádkem v tabulce score_tables.
 
 
Následující tři sloupce obsahují JSON nesoucí informace:
 
 
tasks
 
-----
 
```sql
 
tasks jsonb NOT NULL
 
```
 
 
```json
 
[ Pro každou úlohu:
 
{
 
'code': <str> task.code,
 
'name': <str> task.name, # Může být i prázdný řetězec, není-li definováno
 
'max_points': <Optional[string]> task.max_points # decimal zapsaný řetězcem; u starších snapshotů není definován
 
# Pokud není definovaný maximální počet, tak je hodnota None
 
} # Starší formát obsahoval dvojici ("code", "name")
 
# Upgrade pomocí db/upgrade-20220702.py
 
]
 
```
 
 
rows
 
----
 
```sql
 
rows jsonb NOT NULL
 
```
 
 
```json
 
[ Pro každého účastníka:
 
{
 
'order': { # Struktura mo.score.ScoreOrder
 
'place': <int>
 
'span': <int> # u nedělených míst 1, u dělených počet spojených míst (2.-5. -> span 4)
 
'continuation': <bool> # jestli je pokračováním místa o jedno předcházející
 
} or None # V případě, že místo nemá být uvedeno
 
'winner': <bool> result.winner
 
'successful': <bool> result.successful
 
'name': <string> result.user.full_name
 
'user_id': <int> result.user.user_id, # u starších snapshotů není definován
 
'school': <str> result.pant.school_place.name or "?"
 
'grade': <str> result.pant.grade,
 
'tasks': [ # Pro každou úlohu:
 
<Optional[int]> počet bodů nebo None, pokud úlohu neřešil
 
],
 
'total_points': <str> result.total_points # decimal zapsaný řetězcem
 
'birth_year': <int> result.pant.birth_year,
 
'order_key': [ # n-tice klíčů podle kterých třídit, všechny klíče tříděny vzestupně
 
<Any>
 
]
 
 
}
 
]
 
```
 
 
score_metadata
 
--------------
 
```sql
 
score_metadata jsonb NOT NULL DEFAULT '{}
 
```
 
 
```json
 
{
 
'boundary': { # u starších snapshotů není definován
 
'winnera ': <Optional[str]> round.score_winner_limit # decimal zapsaný řetězcem
 
'successful': <Optional[str]> round.score_successful_limit # decimal zapsaný řetězcem
 
},
 
}
 
```
Loading