Appearance
Entity: dashboardBlock
Entity Type: Database table
Description: A dashboardBlock (tile) represents a single pinned panel on a user's dashboard — what was pinned (type + config) and where it sits on the grid (position). Created via the universal pin action available on panels throughout the application; see Dashboard Management for the pin flow and the type-to-schema validation mechanism.
Data Attributes Table
| Attribute Name | Description | Data Type | Default Value | Required (= Nullable) | Unique | Format | Validations | Index | Example |
|---|---|---|---|---|---|---|---|---|---|
| id | Unique identifier for the dashboard block (tile) record. | UUID | Generated in code (app layer) | Yes | Yes | UUID v7 | Must be a valid UUID v7. | Primary Key | 01960000-0000-7000-8000-000000000201 |
| tenantId | Tenant this dashboard block belongs to. Required on every entity — primary mechanism for data isolation across organisations. | UUID | - | Yes | No | UUID v7 | Foreign Key → tenant.id | name: idx_dashboardBlock_tenantId, type: btree | 01960000-0000-7000-8000-000000000099 |
| dashboardLayoutId | The dashboard layout this tile belongs to. | UUID | - | Yes | No | UUID v7 | Foreign Key → dashboardLayout.id | name: idx_dashboardBlock_dashboardLayoutId, type: btree | 01960000-0000-7000-8000-000000000101 |
| type | Identifies which tile renderer draws this block and which schema its config must satisfy. Extensible — new values are added as new panels gain a pin action; not a fixed enum. | String | - | Yes | No | Type-to-schema registry — see Dashboard Management, Tile type registry and validation. | Must match a registered tile type. | name: idx_dashboardBlock_type, type: btree | placeholderChart |
| positionX | Horizontal grid position of the tile's top-left corner. | Integer | - | Yes | No | Grid units | Non-negative integer. | - | 0 |
| positionY | Vertical grid position of the tile's top-left corner. | Integer | - | Yes | No | Grid units | Non-negative integer. | - | 2 |
| width | Width of the tile in grid units. | Integer | Tile type's default width | Yes | No | Grid units | Positive integer; resizing preserves the tile type's fixed aspect ratio (height is derived). | - | 4 |
| height | Height of the tile in grid units. | Integer | Tile type's default height | Yes | No | Grid units | Positive integer; derived from width and the tile type's fixed aspect ratio. | - | 3 |
| config | Configuration captured at pin time describing what the tile shows (not a data snapshot — the tile always renders live data from this config). Shape depends on type. | JSON | {} | Yes | No | Type-dependent — see Dashboard Management, Tile type registry and validation. | Validated on write against the required-key schema registered for type. In this iteration, only presence of required keys is checked. | - | {"title": "Building A — electricity"} |
| createdAt | Timestamp of entity creation (pin time). Immutable. | Timestamp with time zone | Set in code | Yes | No | ISO 8601 | - | - | 2026-07-24T10:05:00Z |
| updatedAt | Timestamp of last entity update (e.g. moved or resized). | Timestamp with time zone | Set in code | Yes | No | ISO 8601 | - | - | 2026-07-24T10:05:00Z |
| deletedAt | Timestamp of soft delete — set when the tile is unpinned/removed. Records with deletedAt IS NULL are considered active. | Timestamp with time zone | null | No | No | ISO 8601 | - | - | null |
| createdBy | Identifier of the actor who created this record. | String | - | Yes | No | type:actor | - | - | user:01960000-0000-7000-8000-000000000050 |
| updatedBy | Identifier of the actor who last updated this record. | String | - | Yes | No | type:actor | - | - | user:01960000-0000-7000-8000-000000000050 |
Note. config's internal shape is not documented on the source page — it is validated only for presence of required keys against a registry described in the Dashboard Management feature, and is extensible per type. No JSON-DAT sibling file is created for it since no concrete shape is specified to document.
Audited fields
Recorded on created (in full), updated (changed only) and deleted (in full): dashboardLayoutId, type, positionX, positionY, width, height, config.
Excluded: none.
Every entry would carry subjectEntityType = dashboardLayout / subjectEntityId = dashboardLayoutId — a tile has no independent identity outside the dashboard it's pinned to.
Not registered for entityName resolution — identified by its position within a dashboardLayoutId, not a name a person would type.