mirror of https://github.com/nocodb/nocodb
mertmit
2 years ago
7 changed files with 1612 additions and 0 deletions
@ -0,0 +1,21 @@
|
||||
import { Test } from '@nestjs/testing'; |
||||
import { ExportImportService } from './../services/export-import.service'; |
||||
import { ExportImportController } from './export-import.controller'; |
||||
import type { TestingModule } from '@nestjs/testing'; |
||||
|
||||
describe('ExportImportController', () => { |
||||
let controller: ExportImportController; |
||||
|
||||
beforeEach(async () => { |
||||
const module: TestingModule = await Test.createTestingModule({ |
||||
controllers: [ExportImportController], |
||||
providers: [ExportImportService], |
||||
}).compile(); |
||||
|
||||
controller = module.get<ExportImportController>(ExportImportController); |
||||
}); |
||||
|
||||
it('should be defined', () => { |
||||
expect(controller).toBeDefined(); |
||||
}); |
||||
}); |
@ -0,0 +1,51 @@
|
||||
import { |
||||
Body, |
||||
Controller, |
||||
HttpCode, |
||||
Param, |
||||
Patch, |
||||
Post, |
||||
Request, |
||||
UseGuards, |
||||
} from '@nestjs/common'; |
||||
import { AuthGuard } from '@nestjs/passport'; |
||||
import { GlobalGuard } from '../guards/global/global.guard'; |
||||
import { |
||||
Acl, |
||||
ExtractProjectIdMiddleware, |
||||
} from '../middlewares/extract-project-id/extract-project-id.middleware'; |
||||
import { ExportImportService } from './../services/export-import.service'; |
||||
|
||||
@Controller() |
||||
@UseGuards(ExtractProjectIdMiddleware, GlobalGuard) |
||||
export class ExportImportController { |
||||
constructor(private readonly exportImportService: ExportImportService) {} |
||||
|
||||
@Post('/api/v1/db/meta/export/:projectId/:baseId') |
||||
@HttpCode(200) |
||||
@Acl('exportBase') |
||||
async exportBase(@Param('baseId') baseId: string, @Body() body: any) { |
||||
return await this.exportImportService.exportBase({ |
||||
baseId, |
||||
path: body.path, |
||||
}); |
||||
} |
||||
|
||||
@Post('/api/v1/db/meta/import/:projectId/:baseId') |
||||
@HttpCode(200) |
||||
@Acl('importBase') |
||||
async importBase( |
||||
@Request() req, |
||||
@Param('projectId') projectId: string, |
||||
@Param('baseId') baseId: string, |
||||
@Body() body: any, |
||||
) { |
||||
return await this.exportImportService.importBase({ |
||||
user: (req as any).user, |
||||
projectId: projectId, |
||||
baseId: baseId, |
||||
src: body.src, |
||||
req, |
||||
}); |
||||
} |
||||
} |
@ -0,0 +1,72 @@
|
||||
import type { Base } from '../models'; |
||||
|
||||
export async function generateBaseIdMap( |
||||
base: Base, |
||||
idMap: Map<string, string>, |
||||
) { |
||||
idMap.set(base.project_id, base.project_id); |
||||
idMap.set(base.id, `${base.project_id}::${base.id}`); |
||||
const models = await base.getModels(); |
||||
|
||||
for (const md of models) { |
||||
idMap.set(md.id, `${base.project_id}::${base.id}::${md.id}`); |
||||
await md.getColumns(); |
||||
for (const column of md.columns) { |
||||
idMap.set(column.id, `${idMap.get(md.id)}::${column.id}`); |
||||
} |
||||
} |
||||
|
||||
return models; |
||||
} |
||||
|
||||
export function clearPrefix(text: string, prefix?: string) { |
||||
if (!prefix || prefix.length === 0) return text; |
||||
return text.replace(new RegExp(`^${prefix}_?`), ''); |
||||
} |
||||
|
||||
export function withoutNull(obj: any) { |
||||
const newObj = {}; |
||||
let found = false; |
||||
for (const [key, value] of Object.entries(obj)) { |
||||
if (value !== null) { |
||||
newObj[key] = value; |
||||
found = true; |
||||
} |
||||
} |
||||
if (!found) return null; |
||||
return newObj; |
||||
} |
||||
|
||||
export function reverseGet(map: Map<string, string>, vl: string) { |
||||
for (const [key, value] of map.entries()) { |
||||
if (vl === value) { |
||||
return key; |
||||
} |
||||
} |
||||
return undefined; |
||||
} |
||||
|
||||
export function withoutId(obj: any) { |
||||
const { id, ...rest } = obj; |
||||
return rest; |
||||
} |
||||
|
||||
export function getParentIdentifier(id: string) { |
||||
const arr = id.split('::'); |
||||
arr.pop(); |
||||
return arr.join('::'); |
||||
} |
||||
|
||||
export function getEntityIdentifier(id: string) { |
||||
const arr = id.split('::'); |
||||
return arr.pop(); |
||||
} |
||||
|
||||
export function findWithIdentifier(map: Map<string, any>, id: string) { |
||||
for (const key of map.keys()) { |
||||
if (getEntityIdentifier(key) === id) { |
||||
return map.get(key); |
||||
} |
||||
} |
||||
return undefined; |
||||
} |
@ -0,0 +1,19 @@
|
||||
import { Test } from '@nestjs/testing'; |
||||
import { ExportImportService } from './export-import.service'; |
||||
import type { TestingModule } from '@nestjs/testing'; |
||||
|
||||
describe('ExportImportService', () => { |
||||
let service: ExportImportService; |
||||
|
||||
beforeEach(async () => { |
||||
const module: TestingModule = await Test.createTestingModule({ |
||||
providers: [ExportImportService], |
||||
}).compile(); |
||||
|
||||
service = module.get<ExportImportService>(ExportImportService); |
||||
}); |
||||
|
||||
it('should be defined', () => { |
||||
expect(service).toBeDefined(); |
||||
}); |
||||
}); |
Loading…
Reference in new issue