databases.service.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import {
  2. CreateDatabaseRequest,
  3. ListDatabasesRequest,
  4. DropDatabasesRequest,
  5. ListDatabasesResponse,
  6. } from '@zilliz/milvus2-sdk-node';
  7. import { throwErrorFromSDK } from '../utils/Error';
  8. import { clientCache } from '../app';
  9. export class DatabasesService {
  10. async createDatabase(clientId: string, data: CreateDatabaseRequest) {
  11. const { milvusClient } = clientCache.get(clientId);
  12. const res = await milvusClient.createDatabase(data);
  13. throwErrorFromSDK(res);
  14. return res;
  15. }
  16. async listDatabase(
  17. clientId: string,
  18. data?: ListDatabasesRequest
  19. ): Promise<ListDatabasesResponse> {
  20. const { milvusClient, database } = clientCache.get(clientId);
  21. const res = await milvusClient.listDatabases(data);
  22. // test if the user has permission to access the database, loop through all databases
  23. // and check if the user has permission to access the database
  24. const availableDatabases: string[] = [];
  25. for (const db of res.db_names) {
  26. try {
  27. await milvusClient.use({ db_name: db });
  28. await milvusClient.listDatabases(data);
  29. availableDatabases.push(db);
  30. } catch (e) {
  31. // ignore
  32. }
  33. }
  34. // recover current database
  35. await milvusClient.use({ db_name: database });
  36. throwErrorFromSDK(res.status);
  37. return { ...res, db_names: availableDatabases };
  38. }
  39. async dropDatabase(clientId: string, data: DropDatabasesRequest) {
  40. const { milvusClient } = clientCache.get(clientId);
  41. const res = await milvusClient.dropDatabase(data);
  42. throwErrorFromSDK(res);
  43. return res;
  44. }
  45. async use(clientId: string, db_name: string) {
  46. const { milvusClient } = clientCache.get(clientId);
  47. return await await milvusClient.use({ db_name });
  48. }
  49. async hasDatabase(clientId: string, data: string) {
  50. const { db_names } = await this.listDatabase(clientId);
  51. return db_names.indexOf(data) !== -1;
  52. }
  53. }