Kompletná dokumentácia REST API endpointov pre prácu s olympionikmi SR.
Base URL: /zadanie2/api/
Mutačné endpointy (POST, PUT, DELETE) vyžadujú JWT token v hlavičke:
Authorization: Bearer <váš_jwt_token>
Získanie tokenu:
POST /zadanie2/api/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "heslo123"
}
Odpoveď (200):
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 3600,
"user": {
"id": 1,
"first_name": "Ján",
"last_name": "Novák",
"email": "user@example.com"
}
}
Token je platný 1 hodinu. Po expirácii je nutné sa znova prihlásiť.
| Kód | Názov | Popis |
|---|---|---|
| 200 | OK | Úspešné čítanie alebo aktualizácia údajov |
| 201 | Created | Nový záznam bol úspešne vytvorený |
| 400 | Bad Request | Chybný vstup — chýba povinné pole alebo neplatný formát |
| 401 | Unauthorized | Chýba alebo neplatný JWT token |
| 404 | Not Found | Záznam s daným ID neexistuje |
| 409 | Conflict | Duplicitný záznam (UNIQUE constraint) |
| 500 | Internal Error | Neočakávaná chyba na serveri |
Query parametre (voliteľné):
| Parameter | Typ | Popis |
|---|---|---|
type | string | Typ OH: LOH alebo ZOH |
year | int | Rok olympiády (napr. 2024) |
placing | int | Umiestnenie (1 = zlato, 2 = striebro, 3 = bronz) |
discipline | string | Názov disciplíny alebo jeho časť (LIKE) |
Príklad:
GET /zadanie2/api/athletes?type=LOH&year=2024
Odpoveď (200):
[
{
"athlete_id": 1,
"first_name": "Peter",
"last_name": "Sagan",
"birth_date": "1990-01-26",
"birth_country": "Slovensko",
"oh_year": "2016",
"oh_type": "LOH",
"discipline": "cyklistika",
"placing": 1,
"medal_name": "Zlatá medaila",
"medal_record_id": 42
}
]
URL parametre:
| Parameter | Typ | Popis |
|---|---|---|
id | int | ID atléta z tabuľky athletes |
Odpoveď (200):
{
"id": 1,
"first_name": "Peter",
"last_name": "Sagan",
"birth_date": "1990-01-26",
"birth_country": "Slovensko",
"medals": [
{
"medal_record_id": 42,
"discipline": "cyklistika",
"placing": 1,
"oh_year": "2016",
"oh_type": "LOH"
}
]
}
Chyba (404):
{ "error": "Olympionik nenájdený" }
Vyžaduje JWT autentifikáciu
Telo požiadavky (JSON):
{
"first_name": "Peter",
"last_name": "Sagan",
"birth_date": "1990-01-26",
"birth_place": "Žilina",
"birth_country": "Slovensko",
"medals": [
{
"oh_year": "2016",
"oh_type": "LOH",
"oh_city": "Rio de Janeiro",
"oh_country": "Brazília",
"discipline": "cyklistika",
"placing": 1
}
]
}
Odpoveď (201):
{
"message": "Olympionik pridaný",
"athlete_id": 1,
"medals_added": 1
}
Vyžaduje JWT autentifikáciu
Telo požiadavky: JSON pole objektov (rovnaká štruktúra ako single create).
[
{ "first_name": "Peter", "last_name": "Sagan", "medals": [...] },
{ "first_name": "Anastasiya", "last_name": "Kuzminová", "medals": [...] }
]
Odpoveď (201):
{
"message": "Spracovaných: 2, pridaných: 2, chýb: 0",
"results": [
{ "index": 0, "status": "ok", "athlete_id": 1, "medals_added": 1 },
{ "index": 1, "status": "ok", "athlete_id": 2, "medals_added": 3 }
]
}
Vyžaduje JWT autentifikáciu
Telo požiadavky (JSON): len polia, ktoré chcete zmeniť.
{
"first_name": "Nové meno",
"birth_place": "Bratislava"
}
Odpoveď (200):
{ "message": "Údaje boli aktualizované" }
Vyžaduje JWT autentifikáciu
Vymaže atléta a všetky jeho medailové záznamy (ON DELETE CASCADE).
Odpoveď (200):
{ "message": "Olympionik a všetky jeho záznamy boli vymazané" }
Chyba (404):
{ "error": "Olympionik nenájdený" }
Vracia údaje jedného záznamu z tabuľky athlete_medals vrátane údajov o atlétovi.
Odpoveď (200):
{
"id": 42,
"athlete_id": 1,
"first_name": "Peter",
"last_name": "Sagan",
"oh_year": "2016",
"oh_type": "LOH",
"discipline": "cyklistika",
"placing": 1
}
Vyžaduje JWT autentifikáciu
{
"first_name": "Peter",
"last_name": "Sagan",
"oh_year": "2020",
"oh_type": "LOH",
"oh_city": "Tokio",
"oh_country": "Japonsko",
"discipline": "cyklistika",
"placing": 2
}
Odpoveď (200):
{ "message": "Záznam bol aktualizovaný" }
Vracia zoznam unikátnych olympionikov, každý s vnoreným poľom medals.
Odpoveď (200):
[
{
"id": 1,
"first_name": "Peter",
"last_name": "Sagan",
"birth_date": "1990-01-26",
"birth_country": "Slovensko",
"medals": [
{ "medal_record_id": 42, "discipline": "cyklistika", "placing": 1, "oh_year": "2016", "oh_type": "LOH" }
]
}
]
Vyžaduje JWT autentifikáciu
Telo požiadavky:
{
"oh_year": "2024",
"oh_type": "LOH",
"oh_city": "Paríž",
"oh_country": "Francúzsko",
"discipline": "cyklistika",
"placing": 1
}
Odpoveď (201):
{ "message": "Medaila pridaná" }
Chyba (409):
{ "error": "Atlét nenájdený alebo duplicitná medaila" }
Vyžaduje JWT autentifikáciu
Vymaže jeden záznam z tabuľky athlete_medals. Atlét zostane v databáze.
Odpoveď (200):
{ "message": "Medailový záznam vymazaný" }
Špeciálny endpoint pre DataTables jQuery plugin. Vracia dáta vo formáte
{ draw, recordsTotal, recordsFiltered, data }.
Query parametre: Štandardné DataTables parametre
(draw, start, length, search[value], order[0][column], order[0][dir])
+ vlastné filtre (filterYear, filterDiscipline).
Telo požiadavky:
{
"email": "user@example.com",
"password": "heslo123"
}
Odpoveď (200):
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 3600,
"user": { "id": 1, "first_name": "Ján", "last_name": "Novák", "email": "user@example.com" }
}
Chyba (401):
{ "error": "Nesprávne prihlasovacie údaje" }