feat(core): Add data store row update endpoint (no-changelog) (#18601)

This commit is contained in:
Daria
2025-08-21 13:19:55 +03:00
committed by GitHub
parent 667656e8f3
commit 75e563f1c4
12 changed files with 993 additions and 194 deletions
@@ -7,6 +7,7 @@ import {
ListDataStoreQueryDto,
MoveDataStoreColumnDto,
UpdateDataStoreDto,
UpdateDataStoreRowDto,
UpsertDataStoreRowsDto,
} from '@n8n/api-types';
import { AuthenticatedRequest } from '@n8n/db';
@@ -22,6 +23,11 @@ import {
RestController,
} from '@n8n/decorators';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { ConflictError } from '@/errors/response-errors/conflict.error';
import { InternalServerError } from '@/errors/response-errors/internal-server.error';
import { NotFoundError } from '@/errors/response-errors/not-found.error';
import { DataStoreService } from './data-store.service';
import { DataStoreColumnNameConflictError } from './errors/data-store-column-name-conflict.error';
import { DataStoreColumnNotFoundError } from './errors/data-store-column-not-found.error';
@@ -29,11 +35,6 @@ import { DataStoreNameConflictError } from './errors/data-store-name-conflict.er
import { DataStoreNotFoundError } from './errors/data-store-not-found.error';
import { DataStoreValidationError } from './errors/data-store-validation.error';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { ConflictError } from '@/errors/response-errors/conflict.error';
import { InternalServerError } from '@/errors/response-errors/internal-server.error';
import { NotFoundError } from '@/errors/response-errors/not-found.error';
@RestController('/projects/:projectId/data-stores')
export class DataStoreController {
constructor(private readonly dataStoreService: DataStoreService) {}
@@ -279,6 +280,29 @@ export class DataStoreController {
}
}
@Patch('/:dataStoreId/rows')
@ProjectScope('dataStore:writeRow')
async updateDataStoreRow(
req: AuthenticatedRequest<{ projectId: string }>,
_res: Response,
@Param('dataStoreId') dataStoreId: string,
@Body dto: UpdateDataStoreRowDto,
) {
try {
return await this.dataStoreService.updateRow(dataStoreId, req.params.projectId, dto);
} catch (e: unknown) {
if (e instanceof DataStoreNotFoundError) {
throw new NotFoundError(e.message);
} else if (e instanceof DataStoreValidationError) {
throw new BadRequestError(e.message);
} else if (e instanceof Error) {
throw new InternalServerError(e.message, e);
} else {
throw e;
}
}
}
@Delete('/:dataStoreId/rows')
@ProjectScope('dataStore:writeRow')
async deleteDataStoreRows(