====== Dokumentace k REST API Konfigurátoru ======
Toto API poskytuje přístup ke konfigurátoru prostřednictvím několika endpointů. Podporuje operace pro získání vlastností konfigurátoru, nastavení vlastností a získání konfigurátoru na základě kódu. Je určeno primárně pro komunikaci s grafickým klientm SCbrowser na základě popisu:
{{ :orfertopen:lc:lc_api:schema_2d_konfigurator_sapeli.pdf |}}
**Use Case: Integrace 2D konfigurátoru dveří SAPELI s SCbrowserem**
**Účel:** Tento use case popisuje integraci 2D konfigurátoru dveří SAPELI s SCbrowserem, který umožňuje online překreslení dveří při změně parametrů a poskytuje různé módy zobrazení a export.
**Aktéři:**
* **Koncový uživatel**: Osoba používající MOPS klienta na svém počítači.
* **MOPS klient**: Desktopová aplikace u koncového uživatele.
* **SCbrowser**: Aplikace zobrazující náhled dveří na základě parametrů.
* **MOPS server**: Server poskytující data o sortimentu a konfiguracích dveří.
* **SC server**: Server poskytující 2D geometrie modelů a textury.
**Předpoklady:**
* Koncový uživatel má přístup k MOPS klientovi a SCbrowseru na svém počítači.
* MOPS klient je schopen autentizace a vytvoření zakázky.
* MOPS server a SC server jsou dostupné a funkční.
**Scénář:**
- **Autentizace a přihlášení uživatele:**
* Koncový uživatel spustí MOPS klienta.
* MOPS klient vyžádá přihlašovací údaje a autentizuje uživatele pomocí MOPS serveru.
- **Vytvoření zakázky:**
* Po úspěšné autentizaci uživatel zadá údaje nové zakázky.
* MOPS klient vytvoří zakázku a zašle změny parametrů do MOPS serveru.
- **Spuštění SCbrowseru:**
* Koncový uživatel spustí SCbrowser.exe.
* SCbrowser je připraven komunikovat s MOPS klientem pomocí Win32Eventů.
- **Změna parametrů v konfigurátoru:**
* Uživatel změní parametry dveří v MOPS klientovi.
* MOPS klient zašle změněné parametry do MOPS serveru, který vygeneruje data ve formátu JSON.
- **Překreslení a aktualizace náhledu:**
* SCbrowser obdrží Win32Event, že došlo ke změně parametrů.
* SCbrowser zašle žádost na webovou službu MOPS serveru s ID eventu.
* MOPS server vrátí vygenerovaná data ve formátu JSON.
* SCbrowser načte data a aktualizuje náhled dveří podle nových parametrů.
- **Zobrazení a export:**
* SCbrowser zobrazí dveře v základním zobrazení.
* Uživatel může přepnout na zobrazení kót, expertní mód, tisk nebo export do PDF.
**Alternativní scénáře:**
* **Neplatné přihlašovací údaje:**
* Pokud uživatel zadá neplatné přihlašovací údaje, MOPS klient zobrazí chybovou zprávu a neumožní přístup.
* **Chyba při komunikaci s MOPS serverem:**
* Pokud dojde k chybě při zasílání změněných parametrů do MOPS serveru, MOPS klient informuje uživatele a pokusí se o opětovné odeslání.
**Výstupy:**
* Aktuální náhled dveří v SCbrowseru.
* Možnost exportu konfigurace do PDF.
* Možnost tisku konfigurace.
**Diagram sekvencí:**
Koncový uživatel -> MOPS klient: Přihlášení
MOPS klient -> MOPS server: Ověření přihlášení
MOPS server -> MOPS klient: Potvrzení přihlášení
Koncový uživatel -> MOPS klient: Zadání zakázky
MOPS klient -> MOPS server: Vytvoření zakázky
MOPS server -> MOPS klient: Potvrzení zakázky
Koncový uživatel -> SCbrowser: Spuštění
SCbrowser -> MOPS klient: Win32Event
Koncový uživatel -> MOPS klient: Změna parametrů
MOPS klient -> MOPS server: Odeslání parametrů
MOPS server -> SCbrowser: Data ve formátu JSON
SCbrowser -> Koncový uživatel: Aktualizace náhledu
===== Autentizace =====
Pro přístup k API je vyžadována autentizace. Každý požadavek musí obsahovat platný autentizační token v hlavičce. Token je získán prostřednictvím přihlašovacího procesu.
==== 1. Přihlášení ====
* **URL:** `/auth/login`
* **Metoda:** `POST`
* **Formát vstupu:** `application/json`
* **Formát výstupu:** `application/json`
== Parametry: ==
* **`username` (string)**: Login do OR-SYSTEM Open.
* **`password` (string)**: Heslo do OR-SYSTEM Open.
== Příklad požadavku: ==
{
"username": "uzivatel",
"password": "tajneheslo"
}
== Příklad odpovědi: ==
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
==== 2. Odhlášení ====
* **URL:** `/auth/logout`
* **Metoda:** `POST`
* **Formát vstupu:** `application/json`
* **Formát výstupu:** `application/json`
== Parametry: ==
* **`token` (string)**: Autentizační token, který má být zneplatněn.
== Příklad požadavku: ==
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
== Příklad odpovědi: ==
{
"status": "OK"
}
==== 3. Obnovení tokenu ====
* **URL:** `/auth/refresh`
* **Metoda:** `POST`
* **Formát vstupu:** `application/json`
* **Formát výstupu:** `application/json`
== Parametry: ==
* **`refreshToken` (string)**: Token pro obnovení autentizace.
== Příklad požadavku: ==
{
"refreshToken": "dGVzdHJlZnJlc2h0b2tlbg=="
}
== Příklad odpovědi: ==
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "dGVzdHJlZnJlc2h0b2tlbg=="
}
===== Endpointy =====
====1. Získání konfigurátoru====
Tento endpoint lze využít nezávisle na aplikaci SCbrowser. Po zadání kódu konfigurátoru, se získá seznam vlastností a popis konfigurátoru.
SCbrowser si tyto hodnoty uloží a v dalších krocích pak pracuje s odkazy.
* **URL:** `/konfigurator/get_konfigurator`
* **Metoda:** `GET`
* **Formát vstupu:** `application/json`
* **Formát výstupu:** `application/json`
== Parametry: ==
* **`kodKonfiguratoru` (string)**: Kód konfigurátoru, který má být získán.
== Příklad požadavku: ==
{
"kodKonfiguratoru": "V300"
}
== Příklad odpovědi: ==
{
"cKonfiguratorVlastnostExports": [
{
"cKonfiguratorSadaExports": [
{
"cKonfiguratorHodnotas": [
{
"idpk": 42515733,
"kgsIdpk": 88069,
"hodnota": "MAX 0529 SG",
"kgnJn": "N"
},
{
"idpk": 42875093,
"kgsIdpk": 88069,
"hodnota": "F095-ST87",
"kgnJn": "N"
},
{
"idpk": 42796385,
"kgsIdpk": 88069,
"hodnota": "S 1005-Y10R",
"kgnJn": "N"
},
{
"idpk": 42797942,
"kgsIdpk": 88069,
"hodnota": "S 8505-B80G",
"kgnJn": "N"
},
{
"idpk": 42797061,
"kgsIdpk": 88069,
"hodnota": "S 2502-B",
"kgnJn": "N"
},
{
"idpk": 42515729,
"kgsIdpk": 88069,
"hodnota": "MAX 0502 MT",
"kgnJn": "N"
},
{
"idpk": 42797121,
"kgsIdpk": 88069,
"hodnota": "S 3010-Y10R",
"kgnJn": "N"
},
{
"idpk": 42797674,
"kgsIdpk": 88069,
"hodnota": "S 5040-G",
"kgnJn": "N"
},
{
"idpk": 42796743,
"kgsIdpk": 88069,
"hodnota": "S 1515-R90B",
"kgnJn": "N"
},
{
"idpk": 42797713,
"kgsIdpk": 88069,
"hodnota": "S 5540-B30G",
"kgnJn": "N"
},
{
"idpk": 41760882,
"kgsIdpk": 88069,
"hodnota": "POL C 047-FA",
"kgnJn": "N"
},
{
"idpk": 42577856,
"kgsIdpk": 88069,
"hodnota": "POL U 192-EXM",
"kgnJn": "N"
},
{
"idpk": 42796145,
"kgsIdpk": 88069,
"hodnota": "S 0520-B40G",
"kgnJn": "N"
},
{
"idpk": 43792167,
"kgsIdpk": 88069,
"hodnota": "H3317-ST28",
"kgnJn": "N"
}
],
"idpk": 88073,
"kgvIdpk": 3031,
"kod": "9999999999",
"stav": 0,
"nazev": "systémová",
"popis": " ",
"vksIdpk": 25225,
"ename": "klima ",
"edat": 20120425,
"def": "N",
"zmenaCis": 0,
"zmenaTyp": " ",
"typ": "B",
"typVyr": " ",
"kgqJn": "N",
"expJn": " ",
"aname": " ",
"adat": "Jan 1, 1900, 12:00:00 AM",
"iko": "KGS,88073"
}
],
"idpk": 3031,
"kgzIdpk": 112,
"pos": 80,
"stav": 0,
"typ": " ",
"por": 80,
"vkvIdpk": 713,
"vkzIdpk": 433,
"nazev": "Šířka",
"popis": " ",
"vlivIna": "N",
"inaOd": 0,
"inaDel": 0,
"vlivNaz": "N",
"nazOd": 0,
"nazDel": 0,
"vlivVar": "N",
"varOd": 0,
"varDel": 0,
"editJn": "N",
"algTyp": " ",
"pocSad": 1,
"ename": "klima ",
"edat": 20120425,
"typK": "N",
"vlivOzn1": "N",
"ozn1Od": 0,
"ozn1Del": 0,
"vlivOzn2": "N",
"ozn2Od": 0,
"ozn2Del": 0,
"format": "X20 ",
"an": "A",
"hal": 20,
"hnk": 0,
"pilJn": "N",
"defTsJn": "N",
"aJn": "N",
"vlV": "N",
"vlH": "N",
"kf": 0,
"exK": 0,
"hodMin": " ",
"hodMax": " ",
"nasob": "N",
"pismo": "N",
"testLim": " ",
"povJn": "J",
"defJn": "N",
"zmenaCis": 0,
"zmenaTyp": " ",
"prHl": "N",
"defImp": "N",
"kgnJn": "N",
"eshopJn": "N",
"mecNr": 0,
"tKgs": "B",
"kMkz": 6029,
"aname": "klima ",
"adat": "Apr 25, 2012, 11:12:14 AM",
"rPos": 0,
"nHodnota": " ",
"dObr": " ",
"lObr": " ",
"oTyp": " ",
"kSmc": 3915,
"cVlivVlastnost": {
"kgvIdpk": 3031,
"stav": 0,
"vliv01": "J",
"vliv02": "N",
"vliv03": "N",
"vliv04": "N",
"vliv05": "N",
"vliv06": "N",
"vliv07": "N",
"vliv08": "N",
"vliv09": "N",
"vliv10": "N",
"vliv11": "N",
"vliv12": "N",
"vliv13": "N",
"vliv14": "N",
"vliv15": "N",
"vliv16": "N",
"vliv17": "N",
"vliv18": "N",
"vliv19": "N",
"vliv20": "N",
"ename": "klima ",
"edat": 20120425,
"aname": " ",
"adat": "Jan 1, 1900, 12:00:00 AM"
},
"iko": "KGV,3031"
}
],
"kod": "V300 ",
"stav": 5,
"idpk": 112,
"nazev": "V_Obkladový systém ",
"popis": "V_Obkladový systém ",
"typ": "3",
"ename": "klima ",
"edat": 20120425,
"inaDel": 12,
"nazDel": 40,
"varDel": 30,
"ozn1Del": 30,
"ozn2Del": 30,
"doplV": "N",
"minPor": 0,
"maxPor": 999999,
"aktPor": 706,
"novy": "1",
"cenaJn": "M",
"defJn": "J",
"kgqJn": "N",
"zmenaJn": "N",
"zmenaCis": 0,
"hlD": "N",
"urceni": " ",
"cenMkz": 6464,
"aname": "linhova2",
"adat": "May 10, 2024, 4:05:36 PM",
"dObr": " ",
"lObr": " ",
"oKfgJn": " ",
"oKfgMkz": 0,
"cenSmc": 4441,
"oKfgSmc": 0,
"cSabKfg": {
"kgzIdpk": 112,
"stav": 0,
"inaR": "VD300- ",
"nazR": " ",
"varR": "V300 ",
"ename": "klima ",
"edat": 20120425,
"ozn1R": " ",
"ozn2R": " ",
"aname": "klima ",
"adat": "Apr 25, 2012, 9:50:06 AM"
},
"iko": "KGZ,112"
}
====2. Získání vlastností konfigurátoru====
Získání možných kombinací vlastností v daném kroku konfigurace na základě requestId. Tento endpointje určen pro komunikaci s aplikací SCbrowser.
* **URL:** `/konfigurator/get_properties`
* **Metoda:** `GET`
* **Formát vstupu:** `application/json`
* **Formát výstupu:** `application/json`
== Parametry: ==
* **`requestId` (integer)**: ID požadavku na získání vlastností.
== Příklad požadavku: ==
{
"requestId": 123
}
== Příklad odpovědi: ==
{
"99":"99",
"A":"B",
"HNormal":"K41167875",
"H---":"K42548837",
"H1970":"K41171997",
"HČeská":"K41171800",
"H10":"K41169333",
"H140 mm":"K41171276",
"HO3":"K41184219",
"Hbez":"K41189148",
"HLevé":"K41171795",
"HStandardní SATÉN":"K41178641",
"H600":"K41171004",
"HStandardní":"K41167772",
"HUpraveno":"K41186633",
"HByt.s polodr.dř.zár.":"K41312159",
"HCPL Dub 17 struktur":"K42423206",
"HJednokřídlové":"K41167888",
"H65 mm":"K41189122",
"HDveře+zárubeň":"K41167713",
"H80/10 SATÉN":"K41172161",
"HElegant Komfort":"K42120310",
"HV100-VD":"K41167706",
"HKOMFORT WC":"K42120396"
}
====2. Nastavení vlastností konfigurátoru====
Tento endpointje určen pro komunikaci s aplikací SCbrowser. Aktualizje změněné vlastnosti v grafické konfiguraci do OR-SYSTEMu.
* **URL:** `/konfigurator/set_properties`
* **Metoda:** `POST`
* **Formát vstupu:** `application/json`
* **Formát výstupu:** `application/json`
== Parametry: ==
* **`requestId` (integer)**: ID požadavku na nastavení vlastností.
== Příklad požadavku: ==
{
"requestId": 123
}
== Příklad odpovědi: ==
OK: {"message":"","status":200}
====Výjimky a chyby====
V případě chyb nebo výjimek API vrací chybové zprávy s popisem problému.
== Příklad chybové odpovědi: ==
ERROR: {"message":"nenalezen kod V3100","status":500}