Tmavý režim
Aplikace (/applications)
Správa aplikací v systému. Pouze SuperAdmin může vytvářet, upravovat a mazat aplikace.
GET /applications — seznam aplikací
http
GET /api/applications
Authorization: Bearer <superadmin-token>Response
json
{
"success": true,
"data": [
{
"id": 1,
"code": "crm",
"name": "CRM Systém",
"description": "Správa zákazníků a obchodních příležitostí",
"createdAt": "2024-01-10T08:00:00.000Z"
},
{
"id": 2,
"code": "vallox-panel",
"name": "Vallox Panel",
"description": null,
"createdAt": "2024-01-11T09:00:00.000Z"
}
]
}GET /applications/:appCode — detail aplikace
http
GET /api/applications/crm
Authorization: Bearer <superadmin-token>Response
json
{
"success": true,
"data": {
"id": 1,
"code": "crm",
"name": "CRM Systém",
"description": "Správa zákazníků a obchodních příležitostí",
"createdAt": "2024-01-10T08:00:00.000Z"
}
}POST /applications — vytvoření aplikace
http
POST /api/applications
Authorization: Bearer <superadmin-token>
Content-Type: application/jsonRequest body
json
{
"code": "nova-app",
"name": "Nová Aplikace",
"description": "Popis aplikace (volitelné)",
"supportedLanguages": ["cs", "en"]
}| Pole | Typ | Povinné | Popis |
|---|---|---|---|
code | string | ✓ | Unikátní kód aplikace (slug) |
name | string | ✓ | Zobrazované jméno |
description | string | ✗ | Volitelný popis |
supportedLanguages | string[] | ✗ | Podmnožina jazyků, které aplikace umí (kódy malými písmeny). Každý kód musí existovat v registru jazyků (/admin/languages) — jinak 400 s details.code = "UNKNOWN_LANGUAGES". Prázdné pole [] = bez omezení. Vrací se ve všech GET /applications*. |
Konvence pojmenování
code by měl být lowercase slug bez mezer: crm, vallox-panel, atrea-service.
Response 201 Created
json
{
"success": true,
"data": {
"id": 3,
"code": "nova-app",
"name": "Nová Aplikace",
"description": "Popis aplikace",
"createdAt": "2024-01-20T12:00:00.000Z"
}
}PUT /applications/:appCode — aktualizace aplikace
http
PUT /api/applications/nova-app
Authorization: Bearer <superadmin-token>
Content-Type: application/jsonRequest body
json
{
"name": "Nová Aplikace v2",
"description": "Aktualizovaný popis",
"supportedLanguages": ["cs", "en", "de"]
}code nelze měnit po vytvoření. supportedLanguages se při poslání celé přepíše (není to patch jednotlivých prvků).
DELETE /applications/:appCode — smazání aplikace
http
DELETE /api/applications/nova-app
Authorization: Bearer <superadmin-token>Response 204 No Content
Kaskádové smazání
Smazání aplikace smaže kaskádově všechna závislá data:
- Všechna oprávnění aplikace
- Všechny role aplikace
- Všechna přiřazení rolí uživatelům
- Všechny resource-level overrides
- Všechny app adminy
- Notifikační typy a šablony
GET /applications/:appCode/i18n/:locale — překlady notifikačních typů
Vrátí plochou mapu překladů (Record<string, string>) pro daný appCode a locale. FE může mapu přímo nahrát do i18n knihovny (vue-i18n, i18next, …) bez další transformace.
http
GET /api/applications/crm/i18n/cs
Authorization: Bearer <token>Response
json
{
"code": "OK",
"response": {
"notifications.types.new_task.title": "Nový úkol",
"notifications.types.new_task.description": "Oznámení o přiřazení nového úkolu",
"notifications.types.deal_closed.title": "Obchod uzavřen",
"notifications.types.deal_closed.description": "Notifikace při uzavření obchodu",
"notifications.types.generic.title": "Obecná notifikace",
"notifications.types.generic.description": "Testovací / obecné oznámení"
}
}| Klíč | Zdroj |
|---|---|
notifications.types.<code>.title | notification_types.name |
notifications.types.<code>.description | notification_types.description (vynechá se, pokud null) |
TIP
Endpoint nevyžaduje SuperAdmin — slouží FE pro vykreslení názvu typu v Nastavení / Inboxu. Locale je zatím průchozí parametr; samotná tabulka notification_types ukládá texty bez locale, ale endpoint je již nachystaný na budoucí překladovou tabulku.
Workflow: nastavení nové aplikace
Kompletní postup pro nastavení nové aplikace:
1. Vytvořte aplikaci
bash
POST /api/applications
{ "code": "moje-app", "name": "Moje Aplikace" }2. Vytvořte oprávnění
bash
POST /api/applications/moje-app/permissions
{ "code": "documents.read", "type": "binary", "groupName": "Dokumenty" }
POST /api/applications/moje-app/permissions
{ "code": "documents.edit", "type": "tiered", "groupName": "Dokumenty" }3. Vytvořte role
bash
POST /api/applications/moje-app/roles
{ "code": "viewer", "description": "Pouze čtení" }
POST /api/applications/moje-app/roles
{ "code": "editor", "description": "Čtení a editace" }4. Přiřaďte oprávnění rolím
bash
# Role "viewer" — jen čtení
PUT /api/applications/moje-app/roles/1/permissions
{ "permissions": [{ "permissionId": 1, "accessLevel": "allowed" }] }
# Role "editor" — čtení + editace
PUT /api/applications/moje-app/roles/2/permissions
{
"permissions": [
{ "permissionId": 1, "accessLevel": "allowed" },
{ "permissionId": 2, "accessLevel": "edit" }
]
}5. Přidejte app admina (volitelně)
bash
POST /api/users/admins/apps/moje-app
{ "email": "admin@firma.cz" }6. Přiřaďte uživatelům role
bash
PUT /api/users/jan.novak@firma.cz/apps/moje-app/roles
{ "roleIds": [2] }7. Testujte oprávnění
bash
POST /api/check
{
"email": "jan.novak@firma.cz",
"app": "moje-app",
"permission": "documents.edit"
}