====== 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}