====== Balans Web API - Console ======
Administratorska veb konzola za registraciju klijenata i upravljanje licencama modula nad Balans Web API-jem.\\\\
Zamenjuje ručni rad kroz Swagger — firma → nalog → moduli → licence — kroz forme, sa generisanim licencama kao spiskom kodova.
Konzola je zaseban frontend koji komunicira isključivo kroz REST zahteve modula [[kb:web_api:module_realm|Realm]]. Nema sopstvenu bazu ni servis: posle build-a je statička aplikacija koju servira veb server.
===== Pristup =====
Svi administratorski zahtevi traže ulogu **ADMIN** (profil ''MelanyAdmin'') i registrovan modul **Realm**.\\\\
Prijava ide kroz ''POST /api/rest/auth'', a dobijeni token se šalje u zaglavlju:
\\
Authorization: Bearer {token}\\
Prijava prima **pubId** firme (''wcom.pubid''), ne ''firid''.
===== REST API Zahtevi =====
^ Metod ^ Putanja ^ Uloga ^ Opis ^ Revizija ^
| GET | /api/rest/realm/admin/companies | ADMIN | Spisak registrovanih firmi | 26-08-24 |\\
| GET | /api/rest/realm/admin/company/{firid}/modules | ADMIN | Aktivni moduli firme sa licencom i datumom isteka | 26-08-24 |\\
| GET | /api/rest/realm/admin/licences | ADMIN | Spisak licenci po modulu, firmi i statusu | 26-08-24 |\\
| POST | /api/rest/realm/admin/licence/assign | ADMIN | Dodela slobodne licence ciljnoj firmi | 26-08-24 |\\
| POST | /api/rest/realm/admin/licence/revoke | ADMIN | Odvezivanje licence od firme | 26-08-24 |\\
| PUT | /api/rest/realm/admin/licence | ADMIN | Izmena trajanja licence | 26-08-24 |
===== Ulazni parametri =====
==== Spisak licenci ====
''GET /api/rest/realm/admin/licences'' prima tri opciona URL parametra:
* **moduleId** - filter po modulu (0 ili izostavljen = svi moduli)\\
* **companyId** - filter po firmi, vrednost je ''firid'' (izostavljen = sve firme)\\
* **free** - ''true'' = slobodne, ''false'' = iskorišćene, izostavljen = sve
==== Akcije nad licencom ====
Telo zahteva je JSON:
\\
POST /api/rest/realm/admin/licence/assign\\
{ "licence": "4301-KUY0YI", "firid": 223 }
POST /api/rest/realm/admin/licence/revoke\\
{ "licence": "4301-KUY0YI" }
PUT /api/rest/realm/admin/licence\\
{ "licence": "4301-KUY0YI", "duration": 30 }\\
^ Polje ^ Tip ^ Opis ^
| licence | string | Kod licence (''walibslic.walic_licence'') |\\
| firid | integer | Identifikator ciljne firme (''firme.firid''), samo pri dodeli |\\
| duration | integer | Trajanje u danima; **0 = neograničeno** (istek 3000-01-01) |
===== Životni ciklus licence =====
Licenca je kod za jedan modul, jednu firmu i određeno trajanje. Dva odvojena koraka:
- **Generisanje** (''PUT /api/rest/realm/licence/generate'') pravi slobodne kodove, nevezane za firmu.\\
- **Dodela** veže kod za firmu i upisuje aktivan modul sa datumom isteka.
Odvezivanje vraća kod među slobodne i postavlja istek aktivnog modula na prethodni dan — zapis o modulu se **ne briše**, čime se čuvaju podešavanja modula.\\\\
Premeštanje licence sa jedne firme na drugu je zato dva koraka: odvezivanje pa dodela.
===== Registracija klijenta =====
^ Korak ^ Zahtev ^ Uloga ^ Opis ^ Revizija ^\\
| 1 | POST /api/rest/realm/company | bez tokena | Registracija firme; vraća ''pubId'' | 26-08-24 |\\
| 2 | POST /api/rest/realm/user | bez tokena | Klijentski nalog za ''pubId'' firme | 26-08-24 |\\
| 3 | POST /api/rest/realm/licence/activate | USER, ADMIN | Aktivacija licence za modul | 26-08-24 |\\
| 4 | PUT /api/rest/realm/licence/generate | ADMIN | Generisanje licenci za modul | 26-08-24 |
Korak 1 je idempotentan — ponovna registracija iste firme vraća postojeći ''pubId'', ne grešku.\\\\
Firma mora prethodno da postoji u tabeli ''firme'' (''firid'' se ne kreira kroz konzolu).
===== Rezultat =====
^ HTTP Kod ^ Opis ^ Revizija ^\\
| 200 | Zahtev je uspešno izvršen. | 26-08-24 |\\
| 400 | Nije predat obavezan parametar (''firid'', ''duration'' ili ''licence''). | 26-08-24 |\\
| 401 | Token nije validan. | 26-08-24 |\\
| 403 | Nalog nema ulogu ADMIN ili nema pristup modulu Realm. | 26-08-24 |\\
| 404 | Licenca ili firma ne postoji. | 26-08-24 |\\
| 409 | Licenca je već dodeljena — prvo je odvezati. | 26-08-24 |\\
| 409 | Firma već ima važeću licencu za taj modul. | 26-08-24 |\\
| 409 | Modul koristi besplatno licenciranje — dodela nije primenljiva. | 26-08-24 |\\
| 409 | Licenca nije dodeljena — nema šta da se odveže. | 26-08-24 |\\
| 409 | Modul je neaktivan ili u režimu održavanja. | 26-08-24 |\\
| 500 | Nepoznata serverska greška. | 26-08-24 |
===== Napomene =====
* **pubId i firid nisu isto.** ''firid'' je identifikator firme u Balansu (i naziv firmine baze ''b{firid}''), a ''pubId'' generiše server pri registraciji firme i koristi se pri prijavi.\\
* **realmId** (''wcom.mel_id'') je identifikator Balans klastera na kom firma živi. Pri registraciji firme server ga proverava u registru izdatih licenci; nepoznat ''realmId'' se odbija.\\
* **Trajanje 0** znači neograničeno i prikazuje se kao datum isteka 3000-01-01.