MCPcopy Index your code
hub / github.com/simstudioai/sim / validateRowData

Function validateRowData

apps/sim/lib/table/validation.ts:52–95  ·  view source on GitHub ↗
(
  options: ValidateRowOptions
)

Source from the content-addressed store, hash-verified

50 * Uses optimized database queries for unique constraint checks to avoid loading all rows into memory.
51 */
52export async function validateRowData(
53 options: ValidateRowOptions
54): Promise<ValidationSuccess | ValidationFailure> {
55 const { rowData, schema, tableId, excludeRowId, checkUnique = true } = options
56
57 const sizeValidation = validateRowSize(rowData)
58 if (!sizeValidation.valid) {
59 return {
60 valid: false,
61 response: NextResponse.json(
62 { error: 'Invalid row data', details: sizeValidation.errors },
63 { status: 400 }
64 ),
65 }
66 }
67
68 const schemaValidation = coerceRowToSchema(rowData, schema)
69 if (!schemaValidation.valid) {
70 return {
71 valid: false,
72 response: NextResponse.json(
73 { error: 'Row data does not match schema', details: schemaValidation.errors },
74 { status: 400 }
75 ),
76 }
77 }
78
79 if (checkUnique) {
80 // Use optimized database query instead of loading all rows
81 const uniqueValidation = await checkUniqueConstraintsDb(tableId, rowData, schema, excludeRowId)
82
83 if (!uniqueValidation.valid) {
84 return {
85 valid: false,
86 response: NextResponse.json(
87 { error: 'Unique constraint violation', details: uniqueValidation.errors },
88 { status: 400 }
89 ),
90 }
91 }
92 }
93
94 return { valid: true }
95}
96
97/**
98 * Validates multiple rows for batch insert (size, schema, unique constraints including within batch).

Callers 2

route.tsFile · 0.90
route.tsFile · 0.90

Calls 3

validateRowSizeFunction · 0.85
coerceRowToSchemaFunction · 0.85
checkUniqueConstraintsDbFunction · 0.85

Tested by

no test coverage detected