From 059becbf097664e7067dc17040b28c77207b8b31 Mon Sep 17 00:00:00 2001 From: dswbx Date: Fri, 19 Sep 2025 11:28:51 +0200 Subject: [PATCH] refactor: update id handling for media entity Revised `id` and `entity_id` types to support both string and number for flexibility. Adjusted `PolymorphicRelation` to use `PrimaryFieldType` for improved type safety and maintainability. --- app/src/data/relations/PolymorphicRelation.ts | 3 ++- app/src/media/api/MediaController.ts | 6 ++---- app/src/media/media-entities.ts | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/data/relations/PolymorphicRelation.ts b/app/src/data/relations/PolymorphicRelation.ts index acb4a8c..25b8705 100644 --- a/app/src/data/relations/PolymorphicRelation.ts +++ b/app/src/data/relations/PolymorphicRelation.ts @@ -6,6 +6,7 @@ import { EntityRelation, type KyselyJsonFrom, type KyselyQueryBuilder } from "./ import { EntityRelationAnchor } from "./EntityRelationAnchor"; import { type RelationType, RelationTypes } from "./relation-types"; import { s } from "bknd/utils"; +import type { PrimaryFieldType } from "bknd"; export type PolymorphicRelationConfig = s.Static; @@ -70,7 +71,7 @@ export class PolymorphicRelation extends EntityRelation { + override getReferenceQuery(entity: Entity, id: PrimaryFieldType): Partial { const info = this.queryInfo(entity); return { diff --git a/app/src/media/api/MediaController.ts b/app/src/media/api/MediaController.ts index 5be44fd..6a72048 100644 --- a/app/src/media/api/MediaController.ts +++ b/app/src/media/api/MediaController.ts @@ -181,16 +181,14 @@ export class MediaController extends Controller { "param", s.object({ entity: entitiesEnum, - id: s.number(), + id: s.anyOf([s.number(), s.string()]), field: s.string(), }), ), jsc("query", s.object({ overwrite: s.boolean().optional() })), permission([DataPermissions.entityCreate, MediaPermissions.uploadFile]), async (c) => { - const entity_name = c.req.param("entity"); - const field_name = c.req.param("field"); - const entity_id = Number.parseInt(c.req.param("id")); + const { entity: entity_name, id: entity_id, field: field_name } = c.req.valid("param"); // check if entity exists const entity = this.media.em.entity(entity_name); diff --git a/app/src/media/media-entities.ts b/app/src/media/media-entities.ts index a074b18..20bbf8b 100644 --- a/app/src/media/media-entities.ts +++ b/app/src/media/media-entities.ts @@ -9,6 +9,6 @@ export const mediaFields = { etag: text(), modified_at: datetime(), reference: text(), - entity_id: number(), + entity_id: text(), metadata: json(), };