diff --git a/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.controller.spec.ts b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.controller.spec.ts new file mode 100644 index 0000000000..fe0a2aa14f --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { BulkDataAliasController } from './bulk-data-alias.controller'; + +describe('BulkDataAliasController', () => { + let controller: BulkDataAliasController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [BulkDataAliasController], + }).compile(); + + controller = module.get(BulkDataAliasController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.controller.ts b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.controller.ts new file mode 100644 index 0000000000..51840984de --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.controller.ts @@ -0,0 +1,99 @@ +import { + Controller, + Param, + Post, + Request, + Body, + Patch, + Delete, +} from '@nestjs/common'; +import { Acl } from '../../../middlewares/extract-project-id/extract-project-id.middleware'; +import { BulkDataAliasService } from './bulk-data-alias.service'; + +@Controller('bulk-data-alias') +export class BulkDataAliasController { + constructor(private bulkDataAliasService: BulkDataAliasService) {} + + @Post('/api/v1/db/data/bulk/:orgs/:projectName/:tableName') + @Acl('bulkDataInsert') + async bulkDataInsert( + @Request() req, + @Param('projectName') projectName: string, + @Param('tableName') tableName: string, + @Body() body: any, + ) { + return await this.bulkDataAliasService.bulkDataInsert({ + body: body, + cookie: req, + projectName: projectName, + tableName: tableName, + }); + } + + @Patch('/api/v1/db/data/bulk/:orgs/:projectName/:tableName') + @Acl('bulkDataUpdate') + async bulkDataUpdate( + @Request() req, + @Param('projectName') projectName: string, + @Param('tableName') tableName: string, + @Body() body: any, + ) { + return await this.bulkDataAliasService.bulkDataUpdate({ + body: body, + cookie: req, + projectName: projectName, + tableName: tableName, + }); + } + + // todo: Integrate with filterArrJson bulkDataUpdateAll + @Patch('/api/v1/db/data/bulk/:orgs/:projectName/:tableName/all') + @Acl('bulkDataUpdateAll') + async bulkDataUpdateAll( + @Request() req, + @Param('projectName') projectName: string, + @Param('tableName') tableName: string, + @Body() body: any, + ) { + return await this.bulkDataAliasService.bulkDataUpdateAll({ + body: body, + cookie: req, + projectName: projectName, + tableName: tableName, + query: req.query, + }); + } + + @Delete('/api/v1/db/data/bulk/:orgs/:projectName/:tableName') + @Acl('bulkDataDelete') + async bulkDataDelete( + @Request() req, + @Param('projectName') projectName: string, + @Param('tableName') tableName: string, + @Body() body: any, + ) { + return await this.bulkDataAliasService.bulkDataDelete({ + body: body, + cookie: req, + projectName: projectName, + tableName: tableName, + }); + } + + // todo: Integrate with filterArrJson bulkDataDeleteAll + + @Delete('/api/v1/db/data/bulk/:orgs/:projectName/:tableName/all') + @Acl('bulkDataDeleteAll') + async bulkDataDeleteAll( + @Request() req, + @Param('projectName') projectName: string, + @Param('tableName') tableName: string, + ) { + return await this.bulkDataAliasService.bulkDataDeleteAll({ + // cookie: req, + projectName: projectName, + tableName: tableName, + query: req.query, + }); + } +} diff --git a/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.service.spec.ts b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.service.spec.ts new file mode 100644 index 0000000000..a0657010f1 --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { BulkDataAliasService } from './bulk-data-alias.service'; + +describe('BulkDataAliasService', () => { + let service: BulkDataAliasService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [BulkDataAliasService], + }).compile(); + + service = module.get(BulkDataAliasService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.service.ts b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.service.ts new file mode 100644 index 0000000000..b9ec7f747d --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/bulk-data-alias/bulk-data-alias.service.ts @@ -0,0 +1,106 @@ +import { Injectable } from '@nestjs/common'; +import { BaseModelSqlv2 } from '../../../db/BaseModelSqlv2'; +import { Base, Model } from '../../../models' +import NcConnectionMgrv2 from '../../../utils/common/NcConnectionMgrv2'; +import { getViewAndModelByAliasOrId, PathParams } from '../helpers'; + +type BulkOperation = + | 'bulkInsert' + | 'bulkUpdate' + | 'bulkUpdateAll' + | 'bulkDelete' + | 'bulkDeleteAll'; + +@Injectable() +export class BulkDataAliasService { + async getModelViewBase(param: PathParams) { + const { model, view } = await getViewAndModelByAliasOrId(param); + + const base = await Base.get(model.base_id); + return { model, view, base }; + } + + async executeBulkOperation( + param: PathParams & { + operation: T; + options: Parameters<(typeof BaseModelSqlv2.prototype)[T]>; + }, + ) { + const { model, view, base } = await this.getModelViewBase(param); + const baseModel = await Model.getBaseModelSQL({ + id: model.id, + viewId: view?.id, + dbDriver: await NcConnectionMgrv2.get(base), + }); + return await baseModel[param.operation].apply(null, param.options); + } + + // todo: Integrate with filterArrJson bulkDataUpdateAll + async bulkDataInsert( + param: PathParams & { + body: any; + cookie: any; + }, + ) { + return await this.executeBulkOperation({ + ...param, + operation: 'bulkInsert', + options: [param.body, { cookie: param.cookie }], + }); + } + + // todo: Integrate with filterArrJson bulkDataUpdateAll + async bulkDataUpdate( + param: PathParams & { + body: any; + cookie: any; + }, + ) { + return await this.executeBulkOperation({ + ...param, + operation: 'bulkUpdate', + options: [param.body, { cookie: param.cookie }], + }); + } + + // todo: Integrate with filterArrJson bulkDataUpdateAll + async bulkDataUpdateAll( + param: PathParams & { + body: any; + cookie: any; + query: any; + }, + ) { + return await this.executeBulkOperation({ + ...param, + operation: 'bulkUpdateAll', + options: [param.query, param.body, { cookie: param.cookie }], + }); + } + + async bulkDataDelete( + param: PathParams & { + body: any; + cookie: any; + }, + ) { + return await this.executeBulkOperation({ + ...param, + operation: 'bulkDelete', + options: [param.body, { cookie: param.cookie }], + }); + } + + // todo: Integrate with filterArrJson bulkDataDeleteAll + async bulkDataDeleteAll( + param: PathParams & { + query: any; + }, + ) { + return await this.executeBulkOperation({ + ...param, + operation: 'bulkDeleteAll', + options: [param.query], + }); + } +} diff --git a/packages/nocodb-nest/src/modules/datas/data-alias-export/data-alias-export.controller.spec.ts b/packages/nocodb-nest/src/modules/datas/data-alias-export/data-alias-export.controller.spec.ts new file mode 100644 index 0000000000..b207f030b2 --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/data-alias-export/data-alias-export.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { DataAliasExportController } from './data-alias-export.controller'; + +describe('DataAliasExportController', () => { + let controller: DataAliasExportController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [DataAliasExportController], + }).compile(); + + controller = module.get(DataAliasExportController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/packages/nocodb-nest/src/modules/datas/data-alias-export/data-alias-export.controller.ts b/packages/nocodb-nest/src/modules/datas/data-alias-export/data-alias-export.controller.ts new file mode 100644 index 0000000000..3595a3774d --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/data-alias-export/data-alias-export.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('data-alias-export') +export class DataAliasExportController {} diff --git a/packages/nocodb-nest/src/modules/datas/data-alias-nested/data-alias-nested.controller.spec.ts b/packages/nocodb-nest/src/modules/datas/data-alias-nested/data-alias-nested.controller.spec.ts new file mode 100644 index 0000000000..07fa63ea4b --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/data-alias-nested/data-alias-nested.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { DataAliasNestedController } from './data-alias-nested.controller'; + +describe('DataAliasNestedController', () => { + let controller: DataAliasNestedController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [DataAliasNestedController], + }).compile(); + + controller = module.get(DataAliasNestedController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/packages/nocodb-nest/src/modules/datas/data-alias-nested/data-alias-nested.controller.ts b/packages/nocodb-nest/src/modules/datas/data-alias-nested/data-alias-nested.controller.ts new file mode 100644 index 0000000000..ee69608615 --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/data-alias-nested/data-alias-nested.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('data-alias-nested') +export class DataAliasNestedController {} diff --git a/packages/nocodb-nest/src/modules/datas/datas.module.ts b/packages/nocodb-nest/src/modules/datas/datas.module.ts index ba9c24700d..52a29f1441 100644 --- a/packages/nocodb-nest/src/modules/datas/datas.module.ts +++ b/packages/nocodb-nest/src/modules/datas/datas.module.ts @@ -1,9 +1,14 @@ import { Module } from '@nestjs/common'; import { DatasService } from './datas.service'; import { DatasController } from './datas.controller'; +import { BulkDataAliasController } from './bulk-data-alias/bulk-data-alias.controller'; +import { DataAliasExportController } from './data-alias-export/data-alias-export.controller'; +import { DataAliasNestedController } from './data-alias-nested/data-alias-nested.controller'; +import { OldDatasController } from './old-datas/old-datas.controller'; +import { BulkDataAliasService } from './bulk-data-alias/bulk-data-alias.service'; @Module({ - controllers: [DatasController], - providers: [DatasService] + controllers: [DatasController, BulkDataAliasController, DataAliasExportController, DataAliasNestedController, OldDatasController], + providers: [DatasService, BulkDataAliasService] }) export class DatasModule {} diff --git a/packages/nocodb-nest/src/modules/datas/old-datas/old-datas.controller.spec.ts b/packages/nocodb-nest/src/modules/datas/old-datas/old-datas.controller.spec.ts new file mode 100644 index 0000000000..e54862246a --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/old-datas/old-datas.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { OldDatasController } from './old-datas.controller'; + +describe('OldDatasController', () => { + let controller: OldDatasController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [OldDatasController], + }).compile(); + + controller = module.get(OldDatasController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/packages/nocodb-nest/src/modules/datas/old-datas/old-datas.controller.ts b/packages/nocodb-nest/src/modules/datas/old-datas/old-datas.controller.ts new file mode 100644 index 0000000000..cd5c19af21 --- /dev/null +++ b/packages/nocodb-nest/src/modules/datas/old-datas/old-datas.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('old-datas') +export class OldDatasController {}