Admin Dashboard — Domain Model
Status: populated
Owner: Platform Engineering (Frontend)
Last updated: 2026-04-18
1. Overview
The admin-dashboard is a stateless frontend. It has no persistent domain entities. The domain objects described here are view-layer representations shaped from backend API responses.
2. View Models
AdminSession
Held in encrypted httpOnly cookie. Never exposed to client JS.
| Field | Type | Source |
|---|
userId | string | JWT sub |
email | string | JWT claim email |
roles | string[] | JWT claim roles — must include admin |
accessToken | string | Platform JWT |
expiresAt | ISO8601 | JWT exp |
MetricsSummary
Polled every 30 seconds from analytics-service.
| Field | Type | Notes |
|---|
totalMessagesSent24h | number | Last 24 hours |
totalMessagesDelivered24h | number | |
deliveryRate24h | number | 0–1 float |
activeOperators | number | Operators with active SMPP connections |
queueDepth | number | Current NATS queue depth |
alertCount | number | Active system alerts |
fetchedAt | ISO8601 | Server-side timestamp of data |
ThroughputPoint
One data point in the 24h hourly throughput chart.
| Field | Type | Notes |
|---|
hour | ISO8601 | Top of the hour UTC |
sent | number | Messages submitted |
delivered | number | Messages with DLR delivered |
failed | number | Messages with DLR failed |
DeliveryBreakdown
Pie chart data from analytics-service.
| Field | Type | Notes |
|---|
delivered | number | Count |
failed | number | Count |
pending | number | Count |
undeliverable | number | Count |
OperatorSummaryRow
Top-5 operators table on dashboard.
| Field | Type | Notes |
|---|
operatorId | string | |
operatorName | string | |
messagesSent24h | number | |
deliveryRate | number | |
avgLatencyMs | number | |
status | connected | disconnected | degraded | |
SmppOperator
Full operator record for /operators CRUD pages.
| Field | Type | Notes |
|---|
operatorId | string | ULID |
name | string | Display name |
host | string | SMPP server hostname |
port | number | Default 2775 |
systemId | string | SMPP bind credential |
bindType | transceiver | transmitter | receiver | |
throughputTps | number | Max messages per second |
priority | number | Routing priority (lower = higher priority) |
status | active | inactive | maintenance | |
connectionState | connected | disconnected | error | Live state from smpp-connector |
createdAt | ISO8601 | |
updatedAt | ISO8601 | |
RoutingRule
| Field | Type | Notes |
|---|
ruleId | string | ULID |
name | string | |
priority | number | Evaluation order |
conditions | RuleCondition[] | Prefix, country, account tier |
operatorIds | string[] | Target operators (ordered by preference) |
isActive | boolean | |
createdAt | ISO8601 | |
AdminMessageLogEntry
Cross-tenant message log.
| Field | Type | Notes |
|---|
messageId | string | ULID |
tenantId | string | Tenant UUID |
accountId | string | Account UUID |
to | string | E.164 |
from | string | Sender ID |
status | string | Full status enum |
operatorId | string | null | |
operatorName | string | null | |
submittedAt | ISO8601 | |
deliveredAt | ISO8601 | null | |
errorCode | string | null | |
TenantInvoice
| Field | Type | Notes |
|---|
invoiceId | string | |
tenantId | string | |
tenantName | string | |
periodStart | ISO8601 | |
periodEnd | ISO8601 | |
amountDue | string | Currency-formatted |
status | paid | open | overdue | |
ServiceHealthStatus
| Field | Type | Notes |
|---|
serviceName | string | e.g. sms-orchestrator |
status | healthy | degraded | down | |
latencyMs | number | null | Last health check latency |
checkedAt | ISO8601 | |
details | string | null | Optional diagnostic message |
3. Browser Storage
| Storage | Key | Content | TTL |
|---|
httpOnly cookie | __admin_session | Encrypted JWT + user metadata | JWT expiry (1h) |
httpOnly cookie | __admin_refresh | Encrypted refresh token | 7 days |
sessionStorage | adm_msg_filters | Last-used cross-tenant message filters | Tab lifetime |
sessionStorage | adm_dashboard_range | Selected time range on dashboard | Tab lifetime |