import { generations } from '~~/drizzle/schema'; import { db } from '~~/server/lib/db'; import { cancelPendingGeneration } from '~~/server/utils/generations'; export default defineEventHandler(async (event) => { await protectRoute(event); const { generationId } = event.context.params!; const topicId = getRouterParam(event, 'topicId')!; const topic = await db.query.topics.findFirst({ where: { id: topicId, userId: event.context.user!.id as string, }, with: { messages: true, }, }); if (!topic) throw createError({ statusCode: 404, message: 'Topic not found' }); const success = cancelPendingGeneration(generationId!); const generation = await db.query.generations.findFirst({ where: { id: generationId, }, }); if (!generation) { throw createError({ statusCode: 404, message: 'Generation not found', }); } if (generation.status === 'completed') { throw createError({ statusCode: 400, message: 'Generation already completed', }); } const message = await db.query.messages.findFirst({ where: { generationId: generation.id, }, }); if (!message) { throw createError({ statusCode: 404, message: 'Message not found', }); } await db.update(generations).set({ status: 'cancelled' }); await topicEvents.emit(topicId, { type: 'generation-complete', payload: { messageId: message.id, generationId, } }) if (!success) { throw createError({ statusCode: 400, message: 'Generation not found or already completed', }); } return 'ok'; });