Tmavý režim
Typy notifikací & šablony
Notifikační typy
Notifikační typ definuje kategorii notifikace — co se oznamuje, jakými kanály a zda to může uživatel vypnout.
Struktura
typescript
{
id: number;
applicationCode: string;
code: string; // unikátní kód v rámci aplikace
name: string; // zobrazovaný název (pro UI preferencí)
description: string | null;
emailEnabled: boolean; // email kanál povolen pro tento typ
pushEnabled: boolean; // push kanál povolen pro tento typ
userCanDisable: boolean; // může uživatel typ vypnout?
defaultEmail: boolean; // výchozí stav email pro nové uživatele
defaultPush: boolean; // výchozí stav push pro nové uživatele
}userCanDisable
Pokud userCanDisable = false, uživatel nemůže tento typ vypnout ve svých preferencích. Vhodné pro kritické systémové notifikace (bezpečnostní upozornění, platební potvrzení).
Výchozí preference
Při prvním přístupu uživatele k notifikačním preferencím se vytvoří záznamy s hodnotami defaultEmail a defaultPush. Uživatel je pak může změnit (pokud userCanDisable = true).
Správa typů
bash
# Vytvoření
POST /api/admin/notifications/types/:appCode
{
"code": "security_alert",
"name": "Bezpečnostní upozornění",
"emailEnabled": true,
"pushEnabled": true,
"userCanDisable": false, # uživatel NEMŮŽE vypnout
"defaultEmail": true,
"defaultPush": true
}
# Aktualizace
PUT /api/admin/notifications/types/detail/:id
# Smazání
DELETE /api/admin/notifications/types/detail/:idŠablony
Šablona definuje vizuální podobu notifikace pro konkrétní typ a locale.
Struktura
typescript
{
id: number;
applicationCode: string;
type: string; // kód notifikačního typu
locale: string; // "cs", "en", "de", ...
subjectTemplate: string; // Mustache šablona předmětu
bodyTemplate: string; // Mustache HTML šablona těla
description: string | null;
}Unikátní kombinace
Každá šablona je unikátní kombinací (application, type, locale). Pro jeden typ může existovat více šablon — pro různá locale.
moje-app + new_order + cs → česká šablona
moje-app + new_order + en → anglická šablonaFallback na locale
Při odesílání notifikace se locale určí v tomto pořadí:
- Pole
localev request body UserProfile.localepříjemce- Fallback na
"cs"pokud šablona pro locale neexistuje - Pokud neexistuje ani
"cs"šablona →skipped
Mustache šablony
Šablony používají jednoduchou Mustache syntaxi:
Základní syntax
{{proměnná}} — vykreslí hodnotuPříklad šablony
Subject:
Nová objednávka č. {{orderNumber}} od {{customerName}}Body (HTML):
html
<!DOCTYPE html>
<html>
<body>
<h1 style="color: {{brandPrimaryColor}}">Nová objednávka!</h1>
<p>Přijali jsme objednávku č. <strong>{{orderNumber}}</strong></p>
<table>
<tr><td>Zákazník:</td><td>{{customerName}}</td></tr>
<tr><td>Email:</td><td>{{customerEmail}}</td></tr>
<tr><td>Hodnota:</td><td>{{totalAmount}} Kč</td></tr>
</table>
<p>
<a href="{{orderUrl}}" style="color: {{brandLinkColor}}">
Zobrazit objednávku
</a>
</p>
<hr>
<small>{{brandFooterText}}</small>
</body>
</html>Automaticky dostupné proměnné (brand context)
| Proměnná | Obsah |
|---|---|
| Hlavní barva brandu (hex) |
| Tmavší varianta hlavní barvy |
| Barva pozadí |
| Barva textu |
| Barva odkazů |
| URL loga brandu |
| Text v patičce |
| Název brandu |
| Odesílací email |
Brand se načte dle UserProfile.brand příjemce. Pokud brand neexistuje, použije se výchozí brand.
Uživatelská data
Proměnné z pole data requestu jsou přímo dostupné:
bash
POST /api/internal/notifications
{
"data": {
"orderNumber": "2024-042",
"customerName": "Jan Novák",
"totalAmount": "15000"
}
}V šabloně: , ,
Preview šablony
Před nasazením šablony si ji lze vyzkoušet:
bash
POST /api/admin/notifications/templates/preview
Authorization: Bearer <superadmin-token>
{
"subjectTemplate": "Objednávka č. {{orderNumber}}",
"bodyTemplate": "<h1>Přijata!</h1><p>{{orderNumber}} — {{totalAmount}} Kč</p>",
"data": {
"orderNumber": "TEST-001",
"totalAmount": "5000"
},
"brand": "atrea"
}Response
json
{
"data": {
"subject": "Objednávka č. TEST-001",
"htmlBody": "<h1>Přijata!</h1><p>TEST-001 — 5000 Kč</p>"
}
}Checklist pro nový notifikační typ
- [ ] Vytvořit
NotificationTypepřesPOST /admin/notifications/types/:appCode - [ ] Vytvořit šablonu pro výchozí locale (
cs) přesPOST /admin/notifications/templates/:appCode - [ ] Vytvořit šablony pro ostatní locale (en, de, ...)
- [ ] Otestovat preview šablony s testovacími daty
- [ ] Ověřit, že backend aplikace posílá správná
datapro šablonu - [ ] Zkontrolovat
emailEnabled/pushEnableddle požadavků - [ ] Rozhodnout o
userCanDisable(kritické notifikace = false)