From 3e02120c14029ebde978337d05ab4f9efc5bf988 Mon Sep 17 00:00:00 2001 From: Yunus Date: Wed, 1 May 2024 14:36:04 +0700 Subject: [PATCH] Use subquery to groups artifacts --- components/Releases.vue | 12 +++---- server/api/artifacts/detail-artifact.get.ts | 1 + server/api/artifacts/list-artifacts.get.ts | 37 +++++++++++---------- utils/utils.ts | 4 --- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/components/Releases.vue b/components/Releases.vue index 8b06198..0ef7657 100644 --- a/components/Releases.vue +++ b/components/Releases.vue @@ -2,13 +2,13 @@
- - - - + + + + @@ -69,6 +69,6 @@ const upload = () => { const selectRow = async (row: DataTableRowClickEvent) => { console.log(row.data) - await navigateTo(`/orgs/${props.orgName}/apps/${props.appName}/${row.data.releaseId}`) + await navigateTo(`/orgs/${props.orgName}/apps/${props.appName}/${row.data.artifacts.releaseId}`) } \ No newline at end of file diff --git a/server/api/artifacts/detail-artifact.get.ts b/server/api/artifacts/detail-artifact.get.ts index 35bdcd9..5c534c3 100644 --- a/server/api/artifacts/detail-artifact.get.ts +++ b/server/api/artifacts/detail-artifact.get.ts @@ -22,6 +22,7 @@ export default defineEventHandler(async (event) => { return operators.and(operators.eq(fields.organizationsId, userOrg.organizationsId!), operators.eq(fields.name, appName!.toString())) }, }).then(takeUniqueOrThrow) + console.log('ffffff', releaseId) const releaseIdInt = parseInt(releaseId!.toString()) const detailArtifact = await db.query.artifacts.findMany({ where(fields, operators) { diff --git a/server/api/artifacts/list-artifacts.get.ts b/server/api/artifacts/list-artifacts.get.ts index 9a9e662..da552b1 100644 --- a/server/api/artifacts/list-artifacts.get.ts +++ b/server/api/artifacts/list-artifacts.get.ts @@ -1,7 +1,8 @@ -import { and, eq } from "drizzle-orm" +import { and, desc, eq, sql } from "drizzle-orm" import { artifacts, artifactsGroups, artifactsGroupsManager, organizations, organizationsPeople } from "~/server/db/schema" import { getStorageKeys } from "~/server/utils/utils" import { takeUniqueOrThrow } from "../detail-app.get" +import { concat } from "drizzle-orm/sqlite-core/expressions" export default defineEventHandler(async (event) => { const db = event.context.drizzle @@ -19,23 +20,25 @@ export default defineEventHandler(async (event) => { return operators.and(operators.eq(fields.organizationsId, userOrg.organizationsId!), operators.eq(fields.name, appName!.toString())) }, }).then(takeUniqueOrThrow) - const artficats = await db.query.artifacts.findMany({ - where(fields, operators) { - return operators.eq(fields.appsId, app.id) - }, - orderBy(fields, operators) { - return operators.desc(fields.releaseId) - }, + const groupsQuery = db.select({ + artifactId: artifacts.id, + names: sql`group_concat(${artifactsGroups.name}, ', ')`.as('names'), }) - const artifactGroups = await Promise.all(artficats.map(async e => { - const groups = await db.select() - .from(artifactsGroups) - .leftJoin(artifactsGroupsManager, eq(artifactsGroupsManager.artifactsGroupsId, artifactsGroups.id)) - .where(eq(artifactsGroupsManager.artifactsId, e.id)) - return { - ...e, - groups, + .from(artifacts) + .leftJoin(artifactsGroupsManager, and(eq(artifactsGroupsManager.artifactsId, artifacts.id))) + .leftJoin(artifactsGroups, and(eq(artifactsGroups.id, artifactsGroupsManager.artifactsGroupsId))) + .groupBy(artifacts.id) + .as('groups') + const artifactGroups = await db.select() + .from(artifacts) + .leftJoin(groupsQuery, eq(groupsQuery.artifactId, artifacts.id)) + .where(eq(artifacts.appsId, app.id)) + .orderBy(desc(artifacts.releaseId)) + artifactGroups.forEach(v => { + v.artifacts.fileObjectKey = '' + if (v.groups) { + v.groups.artifactId = '' } - })) + }) return artifactGroups }) diff --git a/utils/utils.ts b/utils/utils.ts index 0d965d2..e983aba 100644 --- a/utils/utils.ts +++ b/utils/utils.ts @@ -47,7 +47,3 @@ export function formatBytes(bytes: number, decimals = 2, isBinary = false) { export const formatDate = (value?: string | null) => { return moment(value).format('LLL') } - -export const formatGroups = (groups: any[] | undefined) => { - return groups && groups.length ? _.join(groups.map(e => e.artifactsGroups.name), ', ') : '-' -} \ No newline at end of file