export async function POST(request: NextRequest) {
const corsResponse = handleCors(request)
if (corsResponse) return corsResponse
const blocked = await protectRoute(request)
if (blocked) return blocked
const auth = await requireAuth(request)
if ('error' in auth) return auth.error
try {
const body = await request.json()
const validated = connectSchema.parse(body)
logger.ups('Service connect request:', auth.userId, validated.service)
const existingEntitlement = await prisma.userServiceEntitlement.findUnique({
where: {
userId_service: {
userId: auth.userId,
service: validated.service,
},
},
})
if (!existingEntitlement) {
return errorResponse(
'Service entitlement not found. Please ensure you have access to this service.',
404,
request.headers.get('origin')
)
}
if ((existingEntitlement as any).connected) {
return jsonResponse(
{
connected: true,
service: validated.service,
message: 'Already connected to this service',
},
200,
request.headers.get('origin')
)
}
const entitlement = await prisma.userServiceEntitlement.update({
where: {
userId_service: {
userId: auth.userId,
service: validated.service,
},
},
data: {
connected: true,
updatedAt: new Date(),
} as any,
})
await createAuditLog(auth.userId, 'SERVICE_ENTITLEMENT_CONNECT', {
service: validated.service,
})
logger.info('Service connected:', auth.userId, validated.service)
return jsonResponse(
{
connected: true,
service: entitlement.service,
tier: entitlement.tier,
isPremium: entitlement.isPremium,
message: 'Successfully connected to service',
},
200,
request.headers.get('origin')
)
} catch (error: any) {
if (error.name === 'ZodError') {
logger.warn('Connect service validation error:', error.errors)
return errorResponse(error.errors[0].message, 400, request.headers.get('origin'))
}
logger.error('Connect service error:', error)
return errorResponse('Internal server error', 500, request.headers.get('origin'))
}
}