import { eq } from 'drizzle-orm' import { z } from 'zod' import { threadSubscriptions, uploads, users } from '../../../db/schema' const bodySchema = z.object({ enabled: z.boolean() }) export default defineEventHandler(async (event) => { const user = await requireUser(event) const uploadId = getRouterParam(event, 'id') ?? '' if (!/^[A-Za-z0-9]{1,8}$/.test(uploadId)) { throw createError({ statusCode: 400, statusMessage: 'Ungültige ID' }) } const { enabled } = await readValidatedBody(event, bodySchema.parse) const db = useDb() const [upload] = await db.select({ id: uploads.id }).from(uploads).where(eq(uploads.id, uploadId)).limit(1) if (!upload) throw createError({ statusCode: 404, statusMessage: 'Upload nicht gefunden' }) await db.transaction(async (tx) => { await tx.select({ id: users.id }).from(users).where(eq(users.id, user.id)).for('update') await tx.insert(threadSubscriptions).values({ uploadId, userId: user.id, enabled }) .onDuplicateKeyUpdate({ set: { enabled } }) }) return { enabled } })