Skip to main content

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.
NamingValue
ObjectPersonMedia
Resource type (JSON:API type)person_media
Collection / records rootโ€” (not a records root)
REST base/v1/person-media
Entity classPersonMedia
Internal object. Not currently exposed on the public REST API. The operations below describe the intended contract.

API operations

OperationMethod & pathStatus
ListGET /v1/person-media๐ŸŸก Planned
RetrieveGET /v1/person-media/{id}๐ŸŸก Planned
CreatePOST /v1/person-media๐ŸŸก Planned
UpdatePATCH /v1/person-media/{id}๐ŸŸก Planned
DeleteDELETE /v1/person-media/{id}๐ŸŸก Planned

Data model

Attributes

FieldTypeRequiredConstraintsAllowed valuesDescription
created_atdatetime ๐Ÿ”’ systemโœ… YesNOT NULL; set by onCreate: () => new Date()ISO 8601 UTC datetimeTimestamp set once at row creation via MikroORM onCreate hook. Never updated afterwards.
deleted_atdatetime | nullโšช NonullableISO 8601 UTC datetime or nullSoft-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

NameTypeRequiredDescription
personto-one (ManyToOne)โœ… YesThe 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.
mediato-one (ManyToOne)โœ… YesThe 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