Browse Source

feat: throw exception if user passed a non-existing rowId

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/5901/head
Pranav C 1 year ago
parent
commit
49f868e45d
  1. 32
      packages/nocodb/src/db/BaseModelSqlv2.ts
  2. 4
      packages/nocodb/src/services/data-table.service.ts

32
packages/nocodb/src/db/BaseModelSqlv2.ts

@ -14,7 +14,7 @@ import Validator from 'validator';
import { customAlphabet } from 'nanoid'; import { customAlphabet } from 'nanoid';
import DOMPurify from 'isomorphic-dompurify'; import DOMPurify from 'isomorphic-dompurify';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { extractLimitAndOffset } from '../helpers' import { extractLimitAndOffset } from '../helpers';
import { NcError } from '../helpers/catchError'; import { NcError } from '../helpers/catchError';
import getAst from '../helpers/getAst'; import getAst from '../helpers/getAst';
@ -2173,7 +2173,11 @@ class BaseModelSqlv2 {
async bulkUpdate( async bulkUpdate(
datas: any[], datas: any[],
{ cookie, raw = false }: { cookie?: any; raw?: boolean } = {}, {
cookie,
raw = false,
throwExceptionIfNotExist = false,
}: { cookie?: any; raw?: boolean; throwExceptionIfNotExist?: boolean } = {},
) { ) {
let transaction; let transaction;
try { try {
@ -2212,7 +2216,12 @@ class BaseModelSqlv2 {
if (!raw) { if (!raw) {
for (const pkValues of updatePkValues) { for (const pkValues of updatePkValues) {
newData.push(await this.readByPk(pkValues)); const oldRecord = await this.readByPk(pkValues);
if (!oldRecord && throwExceptionIfNotExist)
NcError.unprocessableEntity(
`Record with pk ${JSON.stringify(pkValues)} not found`,
);
newData.push(oldRecord);
} }
} }
@ -2275,7 +2284,13 @@ class BaseModelSqlv2 {
} }
} }
async bulkDelete(ids: any[], { cookie }: { cookie?: any } = {}) { async bulkDelete(
ids: any[],
{
cookie,
throwExceptionIfNotExist = false,
}: { cookie?: any; throwExceptionIfNotExist?: boolean } = {},
) {
let transaction; let transaction;
try { try {
const deleteIds = await Promise.all( const deleteIds = await Promise.all(
@ -2290,7 +2305,14 @@ class BaseModelSqlv2 {
// pk not specified - bypass // pk not specified - bypass
continue; continue;
} }
deleted.push(await this.readByPk(pkValues));
const oldRecord = await this.readByPk(pkValues);
if (!oldRecord && throwExceptionIfNotExist)
NcError.unprocessableEntity(
`Record with pk ${JSON.stringify(pkValues)} not found`,
);
deleted.push(oldRecord);
res.push(d); res.push(d);
} }

4
packages/nocodb/src/services/data-table.service.ts

@ -94,7 +94,7 @@ export class DataTableService {
const res = await baseModel.bulkUpdate( const res = await baseModel.bulkUpdate(
Array.isArray(param.body) ? param.body : [param.body], Array.isArray(param.body) ? param.body : [param.body],
{ cookie: param.cookie }, { cookie: param.cookie, throwExceptionIfNotExist: true },
); );
return this.extractIdObj({ body: param.body, model }); return this.extractIdObj({ body: param.body, model });
@ -118,7 +118,7 @@ export class DataTableService {
await baseModel.bulkUpdate( await baseModel.bulkUpdate(
Array.isArray(param.body) ? param.body : [param.body], Array.isArray(param.body) ? param.body : [param.body],
{ cookie: param.cookie }, { cookie: param.cookie, throwExceptionIfNotExist: true },
); );
return this.extractIdObj({ body: param.body, model }); return this.extractIdObj({ body: param.body, model });

Loading…
Cancel
Save