db: batch add participants
vi did:web:vt3e.cat
Sat, 27 Jun 2026 19:11:12 +0100
3 files changed,
37 insertions(+),
12 deletions(-)
M
pkgs/db/package.json
→
pkgs/db/package.json
@@ -7,7 +7,7 @@ "scripts": {
"db": "bun ./scripts/db.ts" }, "dependencies": { - "@libsql/client": "^0.17.3", + "@libsql/client": "^0.17.4", "drizzle-orm": "v1.0.0-rc.3" }, "devDependencies": {
M
pkgs/db/src/utils/ticket.ts
→
pkgs/db/src/utils/ticket.ts
@@ -1,5 +1,6 @@
+import { and, desc, eq } from "drizzle-orm"; import { randomUUID } from "node:crypto"; -import { and, desc, eq } from "drizzle-orm"; + import db, { tickets, ticketMessages,@@ -342,18 +343,34 @@ actorId: number;
role: "participant" | "moderator" | "subject"; reason?: string | null; }) { - const [participant] = await db - .insert(ticketParticipants) - .values({ - ticketId: data.ticketId, - actorId: data.actorId, - role: data.role, - reason: data.reason, - createdAt: new Date(), - }) - .returning(); + const participant = await db.insert(ticketParticipants).values({ + ticketId: data.ticketId, + actorId: data.actorId, + role: data.role, + reason: data.reason, + createdAt: new Date(), + }); return participant; +} + +export async function addTicketParticipants( + data: { + ticketId: string; + actorId: number; + role: "participant" | "moderator" | "subject"; + reason?: string | null; + }[], +) { + const participants = data.map((item) => ({ + ticketId: item.ticketId, + actorId: item.actorId, + role: item.role, + reason: item.reason, + createdAt: new Date(), + })); + const result = await db.insert(ticketParticipants).values(participants).returning(); + return result; } export async function removeTicketParticipant(ticketId: string, actorId: number) {
M
pkgs/db/src/utils/user.ts
→
pkgs/db/src/utils/user.ts
@@ -132,3 +132,11 @@ const [guild] = await db.select().from(guilds).where(eq(guilds.discordId, guildDiscordId));
if (!guild) return null; return getActorByDiscordId(discordId, guild.id); } + +export async function getModerators(guildId: number) { + const result = await db + .select() + .from(actors) + .where(and(eq(actors.guildId, guildId), eq(actors.moderator, true))); + return result; +}