Struktury Danych — Światy
Świat (World)
Kraj na globusie
json
{
"id": "world_poland",
"type": "country",
"name": "Polska",
"name_local": "Polska",
"description": "Odkryj historię, kulturę i przyrodę Polski",
"thumbnail": "worlds/poland.png",
"flag_icon": "flags/pl.png",
"language": "pl",
"locations": ["loc_camp_01", "loc_library_01", "loc_factory_01", "loc_office_01", "loc_field_01", "loc_cinema_01"],
"age_groups": null,
"visibility": "public",
"created_by": "system",
"assigned_users": null,
"stats": {
"total_tasks": 120,
"total_locations": 6
}
}json
{
"id": "world_spain",
"type": "country",
"name": "Hiszpania",
"name_local": "España",
"description": "Descubre la historia y cultura de España",
"thumbnail": "worlds/spain.png",
"flag_icon": "flags/es.png",
"language": "es",
"locations": ["loc_camp_es_01", "loc_library_es_01", "loc_cinema_es_01", "loc_music_es_01"],
"age_groups": null,
"visibility": "public",
"created_by": "system",
"assigned_users": null,
"stats": {
"total_tasks": 85,
"total_locations": 4
}
}json
{
"id": "world_germany",
"type": "country",
"name": "Niemcy",
"name_local": "Deutschland",
"description": "Entdecke die Geschichte und Kultur Deutschlands",
"thumbnail": "worlds/germany.png",
"flag_icon": "flags/de.png",
"language": "de",
"locations": ["loc_camp_de_01", "loc_factory_de_01", "loc_observatory_de_01"],
"age_groups": null,
"visibility": "public",
"created_by": "system",
"assigned_users": null,
"stats": {
"total_tasks": 65,
"total_locations": 3
}
}Planeta otwarta (open to join)
json
{
"id": "world_open_english",
"type": "planet",
"name": "Kurs angielskiego — Beginners",
"name_local": "English for Beginners",
"description": "Angielski dla początkujących — od A1 do A2",
"thumbnail": "planets/english.png",
"flag_icon": null,
"language": null,
"locations": ["loc_library_en_01", "loc_cinema_en_01", "loc_music_en_01"],
"age_groups": ["4-8"],
"visibility": "open",
"created_by": "org_001",
"assigned_users": null,
"stats": {
"total_tasks": 45,
"total_locations": 3,
"members_count": 234
}
}json
{
"id": "world_open_python",
"type": "planet",
"name": "Programowanie Python — Podstawy",
"name_local": null,
"description": "Kurs programowania Python dla studentów i dorosłych",
"thumbnail": "planets/python.png",
"flag_icon": null,
"language": null,
"locations": ["loc_observatory_py_01", "loc_factory_py_01"],
"age_groups": ["14+"],
"visibility": "open",
"created_by": "org_university_001",
"assigned_users": null,
"stats": {
"total_tasks": 30,
"total_locations": 2,
"members_count": 89
}
}Planeta zamknięta (assigned)
json
{
"id": "world_custom_001",
"type": "planet",
"name": "Klasa 3A — Matematyka",
"name_local": null,
"description": "Zadania matematyczne dla klasy 3A SP7 Kraków",
"thumbnail": "planets/math_3a.png",
"flag_icon": null,
"language": null,
"locations": ["loc_factory_3a_01", "loc_observatory_3a_01"],
"age_groups": ["8-13"],
"visibility": "closed",
"created_by": "school_001",
"assigned_users": ["child_001", "child_002", "child_003", "child_005", "child_006"],
"stats": {
"total_tasks": 20,
"total_locations": 2,
"members_count": 5
}
}Planeta rodzica
json
{
"id": "world_custom_parent_001",
"type": "planet",
"name": "Nauka Ani",
"name_local": null,
"description": "Zadania dodatkowe od mamy",
"thumbnail": "planets/ania_learning.png",
"flag_icon": null,
"language": null,
"locations": ["loc_library_ania_01"],
"age_groups": ["4-8"],
"visibility": "closed",
"created_by": "parent_001",
"assigned_users": ["child_001"],
"stats": {
"total_tasks": 8,
"total_locations": 1,
"members_count": 1
}
}Pola
| Pole | Typ | Opis |
|---|---|---|
id | string | Unikalny identyfikator |
type | string | "country" (globus) lub "planet" (kosmos) |
name | string | Nazwa wyświetlana |
name_local | string? | Nazwa w lokalnym języku (kraje) |
description | string | Krótki opis |
thumbnail | string | Ścieżka do obrazka |
flag_icon | string? | Ikona flagi (tylko kraje) |
language | string? | Język główny świata (kraje: "pl", "es", "de"...; planety: null) |
locations | string[] | Lista ID lokacji |
age_groups | string[]? | Ograniczenia wiekowe — tablica, np. ["4-8", "8-13"]. Dostępne wartości: "2-4", "4-8", "8-13", "14+" lub null (bez ograniczeń). null = dostępny dla wszystkich grup wiekowych (brak ograniczenia). Tablica = ograniczony do podanych grup. Dla publicznych krajów zazwyczaj null, dla planet może być ograniczony. |
visibility | string | "public" (kraje), "open" (planety otwarte), "closed" (planety zamknięte) |
created_by | string | "system" (kraje), "parent_XXX", "school_XXX", "org_XXX" (planety) |
assigned_users | string[]? | Lista ID użytkowników z dostępem. Wymagane (tablica, nie null) gdy visibility: "closed" — jeśli pusta [], nikt poza twórcą nie ma dostępu. Dla public i open wartość to null. |
stats | object | Statystyki świata |
Widoczność (visibility)
| Wartość | Typ świata | Opis |
|---|---|---|
public | country | Kraj na globusie — widoczny dla wszystkich, zawsze dostępny |
open | planet | Planeta otwarta — widoczna w kosmosie, każdy może dołączyć |
closed | planet | Planeta zamknięta — NIE jest widoczna dla nikogo, chyba że użytkownik jest jawnie dodany do assigned_users |
Zasady widoczności closed
- Planeta zamknięta NIE pojawia się w wynikach
GET /app/planets/open - Planeta zamknięta pojawia się w
GET /app/planets/minetylko jeśli użytkownik znajduje się w tablicyassigned_users - Jeśli
assigned_usersjest pusta ([]), nikt nie może zobaczyć ani dołączyć do planety (poza twórcą) - Tylko twórca planety i jawnie przypisani użytkownicy (
assigned_users) mają dostęp - Pole
assigned_usersjest wymagane (nie może byćnull) gdyvisibilityto"closed"— musi być tablicą (może być pusta[])