all repos — stealth-developers @ fcf415d87df5c195a36df6bb1201baee5cb662bc

db: batch add participants
vi did:web:vt3e.cat
Sat, 27 Jun 2026 19:11:12 +0100
commit

fcf415d87df5c195a36df6bb1201baee5cb662bc

parent

553bd532d77c550a7da393646e17464f413c2986

3 files changed, 37 insertions(+), 12 deletions(-)

jump to
M pkgs/db/package.jsonpkgs/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.tspkgs/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.tspkgs/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; +}