forked from BRETT/BRETT
24 lines
1.0 KiB
TypeScript
24 lines
1.0 KiB
TypeScript
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 }
|
|
})
|