Files
sim/apps/sim/app/api/tools/rds/insert/route.ts
Waleed d707d18ee6 fix(build): update dockerfile to contain testing package deps (#2591)
* fix(build): update dockerfile to contain testing package deps

* added logger package
2025-12-26 12:20:38 -08:00

75 lines
2.4 KiB
TypeScript

import { randomUUID } from 'crypto'
import { createLogger } from '@sim/logger'
import { type NextRequest, NextResponse } from 'next/server'
import { z } from 'zod'
import { createRdsClient, executeInsert } from '@/app/api/tools/rds/utils'
const logger = createLogger('RDSInsertAPI')
const InsertSchema = z.object({
region: z.string().min(1, 'AWS region is required'),
accessKeyId: z.string().min(1, 'AWS access key ID is required'),
secretAccessKey: z.string().min(1, 'AWS secret access key is required'),
resourceArn: z.string().min(1, 'Resource ARN is required'),
secretArn: z.string().min(1, 'Secret ARN is required'),
database: z.string().optional(),
table: z.string().min(1, 'Table name is required'),
data: z.record(z.unknown()).refine((obj) => Object.keys(obj).length > 0, {
message: 'Data object must have at least one field',
}),
})
export async function POST(request: NextRequest) {
const requestId = randomUUID().slice(0, 8)
try {
const body = await request.json()
const params = InsertSchema.parse(body)
logger.info(`[${requestId}] Inserting into RDS table ${params.table} in ${params.database}`)
const client = createRdsClient({
region: params.region,
accessKeyId: params.accessKeyId,
secretAccessKey: params.secretAccessKey,
resourceArn: params.resourceArn,
secretArn: params.secretArn,
database: params.database,
})
try {
const result = await executeInsert(
client,
params.resourceArn,
params.secretArn,
params.database,
params.table,
params.data
)
logger.info(`[${requestId}] Insert executed successfully, affected ${result.rowCount} rows`)
return NextResponse.json({
message: `Insert executed successfully. ${result.rowCount} row(s) inserted.`,
rows: result.rows,
rowCount: result.rowCount,
})
} finally {
client.destroy()
}
} catch (error) {
if (error instanceof z.ZodError) {
logger.warn(`[${requestId}] Invalid request data`, { errors: error.errors })
return NextResponse.json(
{ error: 'Invalid request data', details: error.errors },
{ status: 400 }
)
}
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'
logger.error(`[${requestId}] RDS insert failed:`, error)
return NextResponse.json({ error: `RDS insert failed: ${errorMessage}` }, { status: 500 })
}
}