45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { createInsertSchema } from 'drizzle-orm/zod';
|
|
import { db } from '~~/server/lib/db';
|
|
import { agents } from '~~/drizzle/schema';
|
|
import { userEvents } from '~~/server/utils/events';
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
await protectRoute(event);
|
|
|
|
const userId = event.context.user!.id;
|
|
|
|
const result = await readValidatedBody(event,
|
|
createInsertSchema(agents).safeParse
|
|
);
|
|
|
|
if (!result.success) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
message: result.error.issues[0]!.message,
|
|
});
|
|
}
|
|
|
|
if (!result.data.userId) {
|
|
result.data.userId = userId;
|
|
}
|
|
|
|
if (result.data.userId !== userId) {
|
|
throw createError({
|
|
statusCode: 403,
|
|
statusMessage: 'Forbidden',
|
|
data: {
|
|
code: 'FORBIDDEN',
|
|
ok: false,
|
|
}
|
|
});
|
|
}
|
|
|
|
await db.insert(agents).values(result.data).onConflictDoNothing();
|
|
userEvents.emit(userId, 'agents', {
|
|
op: 'create',
|
|
payload: result.data,
|
|
});
|
|
|
|
return { ok: true };
|
|
})
|