@@ -18,9 +18,15 @@ import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
1818import type { Filter , RowData , TableSchema } from '@/lib/table'
1919import {
2020 batchInsertRows ,
21+ buildIdByName ,
22+ buildNameById ,
2123 deleteRowsByFilter ,
2224 deleteRowsByIds ,
25+ filterNamesToIds ,
2326 insertRow ,
27+ rowDataIdToName ,
28+ rowDataNameToId ,
29+ sortNamesToIds ,
2430 updateRowsByFilter ,
2531 validateBatchRows ,
2632 validateRowData ,
@@ -59,8 +65,13 @@ async function handleBatchInsert(
5965 return NextResponse . json ( { error : 'Invalid workspace ID' } , { status : 400 } )
6066 }
6167
68+ // External callers key row data by column name; storage keys by id.
69+ const idByName = buildIdByName ( table . schema as TableSchema )
70+ const nameById = buildNameById ( table . schema as TableSchema )
71+ const rows = ( validated . rows as RowData [ ] ) . map ( ( r ) => rowDataNameToId ( r , idByName ) )
72+
6273 const validation = await validateBatchRows ( {
63- rows : validated . rows as RowData [ ] ,
74+ rows,
6475 schema : table . schema as TableSchema ,
6576 tableId,
6677 } )
@@ -70,7 +81,7 @@ async function handleBatchInsert(
7081 const insertedRows = await batchInsertRows (
7182 {
7283 tableId,
73- rows : validated . rows as RowData [ ] ,
84+ rows,
7485 workspaceId : validated . workspaceId ,
7586 userId,
7687 } ,
@@ -83,7 +94,7 @@ async function handleBatchInsert(
8394 data : {
8495 rows : insertedRows . map ( ( r ) => ( {
8596 id : r . id ,
86- data : r . data ,
97+ data : rowDataIdToName ( r . data , nameById ) ,
8798 position : r . position ,
8899 createdAt : r . createdAt instanceof Date ? r . createdAt . toISOString ( ) : r . createdAt ,
89100 updatedAt : r . updatedAt instanceof Date ? r . updatedAt . toISOString ( ) : r . updatedAt ,
@@ -150,11 +161,19 @@ export const GET = withRouteHandler(async (request: NextRequest, context: TableR
150161 return NextResponse . json ( { error : 'Invalid workspace ID' } , { status : 400 } )
151162 }
152163
164+ // Translate name-keyed filter/sort fields → column ids; translate rows back.
165+ const idByName = buildIdByName ( table . schema as TableSchema )
166+ const nameById = buildNameById ( table . schema as TableSchema )
167+ const filter = validated . filter
168+ ? filterNamesToIds ( validated . filter as Filter , idByName )
169+ : undefined
170+ const sort = validated . sort ? sortNamesToIds ( validated . sort , idByName ) : undefined
171+
153172 const result = await queryRows (
154173 table ,
155174 {
156- filter : validated . filter as Filter | undefined ,
157- sort : validated . sort ,
175+ filter,
176+ sort,
158177 limit : validated . limit ,
159178 offset : validated . offset ,
160179 includeTotal : validated . includeTotal ,
@@ -168,7 +187,7 @@ export const GET = withRouteHandler(async (request: NextRequest, context: TableR
168187 data : {
169188 rows : result . rows . map ( ( r ) => ( {
170189 id : r . id ,
171- data : r . data ,
190+ data : rowDataIdToName ( r . data , nameById ) ,
172191 position : r . position ,
173192 createdAt : r . createdAt instanceof Date ? r . createdAt . toISOString ( ) : String ( r . createdAt ) ,
174193 updatedAt : r . updatedAt instanceof Date ? r . updatedAt . toISOString ( ) : String ( r . updatedAt ) ,
@@ -229,7 +248,9 @@ export const POST = withRouteHandler(
229248 return NextResponse . json ( { error : 'Invalid workspace ID' } , { status : 400 } )
230249 }
231250
232- const rowData = validated . data as RowData
251+ const idByName = buildIdByName ( table . schema as TableSchema )
252+ const nameById = buildNameById ( table . schema as TableSchema )
253+ const rowData = rowDataNameToId ( validated . data as RowData , idByName )
233254
234255 const validation = await validateRowData ( {
235256 rowData,
@@ -254,7 +275,7 @@ export const POST = withRouteHandler(
254275 data : {
255276 row : {
256277 id : row . id ,
257- data : row . data ,
278+ data : rowDataIdToName ( row . data , nameById ) ,
258279 position : row . position ,
259280 createdAt : row . createdAt instanceof Date ? row . createdAt . toISOString ( ) : row . createdAt ,
260281 updatedAt : row . updatedAt instanceof Date ? row . updatedAt . toISOString ( ) : row . updatedAt ,
@@ -312,7 +333,10 @@ export const PUT = withRouteHandler(async (request: NextRequest, context: TableR
312333 return NextResponse . json ( { error : 'Invalid workspace ID' } , { status : 400 } )
313334 }
314335
315- const sizeValidation = validateRowSize ( validated . data as RowData )
336+ const idByName = buildIdByName ( table . schema as TableSchema )
337+ const patchData = rowDataNameToId ( validated . data as RowData , idByName )
338+
339+ const sizeValidation = validateRowSize ( patchData )
316340 if ( ! sizeValidation . valid ) {
317341 return NextResponse . json (
318342 { error : 'Validation error' , details : sizeValidation . errors } ,
@@ -323,8 +347,8 @@ export const PUT = withRouteHandler(async (request: NextRequest, context: TableR
323347 const result = await updateRowsByFilter (
324348 table ,
325349 {
326- filter : validated . filter as Filter ,
327- data : validated . data as RowData ,
350+ filter : filterNamesToIds ( validated . filter as Filter , idByName ) ,
351+ data : patchData ,
328352 limit : validated . limit ,
329353 } ,
330354 requestId
@@ -424,10 +448,11 @@ export const DELETE = withRouteHandler(
424448 } )
425449 }
426450
451+ const idByName = buildIdByName ( table . schema as TableSchema )
427452 const result = await deleteRowsByFilter (
428453 table ,
429454 {
430- filter : validated . filter as Filter ,
455+ filter : filterNamesToIds ( validated . filter as Filter , idByName ) ,
431456 limit : validated . limit ,
432457 } ,
433458 requestId
0 commit comments