Bläddra i källkod

add database api

Signed-off-by: shanghaikid <jiangruiyi@gmail.com>
shanghaikid 2 år sedan
förälder
incheckning
7c1316a332

+ 2 - 0
server/src/app.ts

@@ -8,6 +8,7 @@ import * as path from 'path';
 import chalk from 'chalk';
 import { router as connectRouter } from './milvus';
 import { router as collectionsRouter } from './collections';
+import { router as databasesRouter } from './database';
 import { router as partitionsRouter } from './partitions';
 import { router as schemaRouter } from './schema';
 import { router as cronsRouter } from './crons';
@@ -35,6 +36,7 @@ const insightCache = new LruCache({
 const router = express.Router();
 // define routers
 router.use('/milvus', connectRouter);
+router.use('/databases', databasesRouter);
 router.use('/collections', collectionsRouter);
 router.use('/partitions', partitionsRouter);
 router.use('/schema', schemaRouter);

+ 66 - 0
server/src/database/databases.controller.ts

@@ -0,0 +1,66 @@
+import { NextFunction, Request, Response, Router } from 'express';
+import { dtoValidationMiddleware } from '../middlewares/validation';
+import { milvusService } from '../milvus';
+import { DatabasesService } from './databases.service';
+import { CreateDatabaseDto, DropDatabaseDto } from './dto';
+
+export class DatabasesController {
+  private databasesService: DatabasesService;
+  private router: Router;
+
+  constructor() {
+    this.databasesService = new DatabasesService(milvusService);
+
+    this.router = Router();
+  }
+
+  get databasesServiceGetter() {
+    return this.databasesService;
+  }
+
+  generateRoutes() {
+    this.router.get('/', this.listDatabases.bind(this));
+    this.router.post(
+      '/',
+      dtoValidationMiddleware(CreateDatabaseDto),
+      this.createDatabase.bind(this)
+    );
+    this.router.delete(
+      '/',
+      dtoValidationMiddleware(DropDatabaseDto),
+      this.createDatabase.bind(this)
+    );
+    return this.router;
+  }
+
+  async createDatabase(req: Request, res: Response, next: NextFunction) {
+    const createDatabaseData = req.body;
+    try {
+      const result = await this.databasesService.createDatabase(
+        createDatabaseData
+      );
+      res.send(result);
+    } catch (error) {
+      next(error);
+    }
+  }
+
+  async listDatabases(req: Request, res: Response, next: NextFunction) {
+    try {
+      const result = await this.databasesService.listDatabase();
+      res.send(result);
+    } catch (error) {
+      next(error);
+    }
+  }
+
+  async dropDatabase(req: Request, res: Response, next: NextFunction) {
+    const dropDatabaseData = req.body;
+    try {
+      const result = await this.databasesService.dropDatabase(dropDatabaseData);
+      res.send(result);
+    } catch (error) {
+      next(error);
+    }
+  }
+}

+ 33 - 0
server/src/database/databases.service.ts

@@ -0,0 +1,33 @@
+import { MilvusService } from '../milvus/milvus.service';
+import {
+  CreateDatabaseRequest,
+  ListDatabasesRequest,
+  DropDatabasesRequest,
+} from '@zilliz/milvus2-sdk-node';
+import { throwErrorFromSDK } from '../utils/Error';
+
+export class DatabasesService {
+  constructor(private milvusService: MilvusService) {}
+
+  async createDatabase(data?: CreateDatabaseRequest) {
+    const res = await this.milvusService.client.createDatabase(data);
+    throwErrorFromSDK(res);
+    return res;
+  }
+
+  async listDatabase(data?: ListDatabasesRequest) {
+    const res = await this.milvusService.client.listDatabases(data);
+    throwErrorFromSDK(res.status);
+    return res;
+  }
+
+  async dropDatabase(data?: DropDatabasesRequest) {
+    const res = await this.milvusService.client.listDatabases(data);
+    throwErrorFromSDK(res.status);
+    return res;
+  }
+
+  async use(db_name: string) {
+    return await await MilvusService.activeMilvusClient.use({ db_name });
+  }
+}

+ 11 - 0
server/src/database/dto.ts

@@ -0,0 +1,11 @@
+import { IsString } from 'class-validator';
+
+export class CreateDatabaseDto {
+  @IsString()
+  readonly db_name: string;
+}
+
+export class DropDatabaseDto {
+  @IsString()
+  readonly db_name: string;
+}

+ 8 - 0
server/src/database/index.ts

@@ -0,0 +1,8 @@
+import { DatabasesController } from './databases.controller';
+
+const databasesManager = new DatabasesController();
+
+const router = databasesManager.generateRoutes();
+const DatabasesService = databasesManager.databasesServiceGetter;
+
+export { router, DatabasesService };