From bf857e32bc4e8f3542fb6a22a181fea345b9ae0b Mon Sep 17 00:00:00 2001 From: Francisco Madeira Date: Mon, 19 Feb 2024 11:16:52 +0000 Subject: [PATCH] feat: add latest version to /projects/:id/components (#19) --- .../src/data/projects/actions.ts | 16 ++++++++++++++-- .../src/data/projects/dto.ts | 4 +++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ethereal-nexus-dashboard/src/data/projects/actions.ts b/ethereal-nexus-dashboard/src/data/projects/actions.ts index 81eef335..bc441ab0 100644 --- a/ethereal-nexus-dashboard/src/data/projects/actions.ts +++ b/ethereal-nexus-dashboard/src/data/projects/actions.ts @@ -177,13 +177,24 @@ export async function getActiveProjectComponents( return actionError('No user provided.'); } + const latest_version = db.select() + .from(componentVersions) + .orderBy(desc(componentVersions.created_at)) + .groupBy( + componentVersions.id, + componentVersions.version, + componentVersions.created_at, + ) + .limit(1) + .as('latest_version'); + try { const select = await db .select({ ...getTableColumns(components), is_active: projectComponentConfig.is_active, - version: componentVersions.version, - dialog: componentVersions.dialog, + version: sql`coalesce(${componentVersions.version}, ${latest_version.version})`, + dialog: sql`coalesce(${componentVersions.dialog}, ${latest_version.dialog})`, }) .from(components) .leftJoin( @@ -194,6 +205,7 @@ export async function getActiveProjectComponents( componentVersions, eq(componentVersions.id, projectComponentConfig.component_version), ) + .leftJoin(latest_version, eq(latest_version.component_id, projectComponentConfig.component_id)) .where(eq(projectComponentConfig.is_active, true)); const safe = projectComponentsWithDialogSchema.array().safeParse(select); diff --git a/ethereal-nexus-dashboard/src/data/projects/dto.ts b/ethereal-nexus-dashboard/src/data/projects/dto.ts index 7581758a..fd595910 100644 --- a/ethereal-nexus-dashboard/src/data/projects/dto.ts +++ b/ethereal-nexus-dashboard/src/data/projects/dto.ts @@ -95,7 +95,9 @@ export const projectComponentsSchema = componentsSchema.extend({ }); export type ProjectComponent = z.infer; -export const projectComponentsWithDialogSchema = projectComponentsSchema.extend( +export const projectComponentsWithDialogSchema = projectComponentsSchema + .omit({versions: true}) + .extend( { dialog: componentVersionsSchema.shape.dialog.nullable(), },