Files
portabase/src/db/services/agent.ts
T

42 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-06-27 17:08:38 +02:00
"use server";
import { and, desc, eq, sql } from "drizzle-orm";
import { db } from "@/db";
import { Agent, agent, organizationAgent } from "@/db/schema/08_agent";
import { Database, database } from "@/db/schema/07_database";
2026-04-10 18:37:35 +02:00
export async function getOrganizationAgents(organizationId: string) {
2026-06-27 17:08:38 +02:00
return (await db
.select({
id: agent.id,
name: agent.name,
organizationId: agent.organizationId,
slug: agent.slug,
healthErrorCount: agent.healthErrorCount,
description: agent.description,
isArchived: agent.isArchived,
lastContact: agent.lastContact,
version: agent.version,
updatedAt: agent.updatedAt,
createdAt: agent.createdAt,
deletedAt: agent.deletedAt,
databases: sql<Database[]>`
2026-04-10 18:37:35 +02:00
COALESCE(
json_agg(${database}.*) FILTER (WHERE ${database}.id IS NOT NULL),
'[]'
)
`,
2026-06-27 17:08:38 +02:00
})
.from(organizationAgent)
.innerJoin(agent, eq(organizationAgent.agentId, agent.id))
.leftJoin(database, eq(database.agentId, agent.id))
.groupBy(agent.id)
.orderBy(desc(agent.createdAt))
.where(
and(
eq(organizationAgent.organizationId, organizationId),
eq(agent.isArchived, false),
),
)) as unknown as Agent[];
2026-04-10 18:37:35 +02:00
}