Documentation Index
Fetch the complete documentation index at: https://docs.wellapp.ai/llms.txt
Use this file to discover all available pages before exploring further.
PersonMedia is a soft-deletable pivot (junction) entity that links a People record to a Media record, enabling a person to have one or more associated media assets (profile photos, avatars, documents). It carries no business attributes beyond its two foreign keys and lifecycle timestamps. The entity is workspace-scoped implicitly through its People relation; it belongs to the Supporting category alongside similar pivot tables such as CompanyMedia and PersonEmail. Every row is authored by the connector sync or enrichment pipeline; no public PATCH route exists for end-users to modify it directly.
| Naming | Value |
|---|
| Object | PersonMedia |
Resource type (JSON:API type) | person_media |
| Collection / records root | โ (not a records root) |
| REST base | /v1/person-media |
| Entity class | PersonMedia |
Internal object. Not currently exposed on the public REST API. The operations below describe the intended contract.
API operations
| Operation | Method & path | Status |
|---|
| List | GET /v1/person-media | ๐ก Planned |
| Retrieve | GET /v1/person-media/{id} | ๐ก Planned |
| Create | POST /v1/person-media | ๐ก Planned |
| Update | PATCH /v1/person-media/{id} | ๐ก Planned |
| Delete | DELETE /v1/person-media/{id} | ๐ก Planned |
Data model
Attributes
| Field | Type | Required | Constraints | Allowed values | Description |
|---|
| created_at | datetime ๐ system | โ
Yes | NOT NULL; set by onCreate: () => new Date() | ISO 8601 UTC datetime | Timestamp set once at row creation via MikroORM onCreate hook. Never updated afterwards. |
| deleted_at | datetime | null | โช No | nullable | ISO 8601 UTC datetime or null | Soft-delete timestamp. NULL means the pivot link is active. Set by the soft-delete lifecycle when the link is removed; never cleared once set. |
Relationships
| Name | Type | Required | Description |
|---|
| person | to-one (ManyToOne) | โ
Yes | The People record this media asset is attached to. FK person_pk โ core_api.peoples.pk. Indexed via idx_person_media_person for reverse traversal from People to its media. |
| media | to-one (ManyToOne) | โ
Yes | The Media record (file/image asset) associated with the person. FK media_pk โ core_api.media.pk. Indexed via idx_person_media_media to support Hasura media โ person_media array relationship traversal. |
System-computed
- pk โ auto-increment serial integer, internal join key only; never exposed via the public API.
- created_at โ set by MikroORM onCreate hook (onCreate: () => new Date()) at row insertion; not updated on subsequent writes.
- deleted_at โ managed by the soft-delete lifecycle; NULL on creation, set to current timestamp when the pivot link is logically removed. Queries must always filter deleted_at IS NULL to respect soft-delete semantics.
- Note on migration parity gap: the Migration20250919154301.ts DDL created the table with an updated_at timestamptz NULL column, but the entity class declares no @Property for updated_at. The column exists in the database but is unmapped in ORM layer โ it will remain NULL for all rows unless manually backfilled or the entity is amended.
Example
{
"data": {
"type": "person_media",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"attributes": {
"created_at": "2025-11-14T09:22:34.000Z",
"deleted_at": null
},
"relationships": {
"person": {
"data": { "type": "people", "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479" }
},
"media": {
"data": { "type": "media", "id": "c3d4e5f6-a1b2-4890-bcde-f01234567890" }
}
}
}
}
Source: apps/api/src/database/entities/PersonMedia.ts ยท domain: financial-graph ยท tier: Supporting