39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
|
|
import { NextResponse } from 'next/server';
|
||
|
|
import { and, eq } from 'drizzle-orm';
|
||
|
|
|
||
|
|
import { withAuth } from '@/lib/api/helpers';
|
||
|
|
import { db } from '@/lib/db';
|
||
|
|
import { systemSettings } from '@/lib/db/schema/system';
|
||
|
|
import { requestEmailDraft } from '@/lib/services/email-draft.service';
|
||
|
|
import { parseBody } from '@/lib/api/route-helpers';
|
||
|
|
import { requestDraftSchema } from '@/lib/validators/ai';
|
||
|
|
import { errorResponse } from '@/lib/errors';
|
||
|
|
|
||
|
|
export const POST = withAuth(async (req, ctx) => {
|
||
|
|
try {
|
||
|
|
// Feature flag check
|
||
|
|
const flag = await db.query.systemSettings.findFirst({
|
||
|
|
where: and(
|
||
|
|
eq(systemSettings.key, 'ai_email_drafts'),
|
||
|
|
eq(systemSettings.portId, ctx.portId),
|
||
|
|
),
|
||
|
|
});
|
||
|
|
if (flag?.value !== true) {
|
||
|
|
return NextResponse.json({ error: 'Feature not available' }, { status: 404 });
|
||
|
|
}
|
||
|
|
|
||
|
|
const body = await parseBody(req, requestDraftSchema);
|
||
|
|
const { jobId } = await requestEmailDraft(ctx.userId, {
|
||
|
|
interestId: body.interestId,
|
||
|
|
clientId: body.clientId,
|
||
|
|
portId: ctx.portId,
|
||
|
|
context: body.context,
|
||
|
|
additionalInstructions: body.additionalInstructions,
|
||
|
|
});
|
||
|
|
|
||
|
|
return NextResponse.json({ jobId }, { status: 202 });
|
||
|
|
} catch (error) {
|
||
|
|
return errorResponse(error);
|
||
|
|
}
|
||
|
|
});
|