Browse Source

fix: create db always shows successful (#830)

Signed-off-by: ryjiang <jiangruiyi@gmail.com>
ryjiang 3 weeks ago
parent
commit
dac09a967d

+ 14 - 8
client/src/context/Data.tsx

@@ -39,8 +39,8 @@ export const dataContext = createContext<DataContextType>({
   setDatabase: () => {},
   databases: [],
   setDatabaseList: () => {},
-  createDatabase: async () => {},
-  dropDatabase: async () => {},
+  createDatabase: async () => ({}) as ResStatus,
+  dropDatabase: async () => ({}) as ResStatus,
   fetchDatabases: async () => {
     return [];
   },
@@ -51,8 +51,8 @@ export const dataContext = createContext<DataContextType>({
   createCollection: async () => {
     return {} as CollectionFullObject;
   },
-  loadCollection: async () => {},
-  releaseCollection: async () => {},
+  loadCollection: async () => ({}) as ResStatus,
+  releaseCollection: async () => ({}) as ResStatus,
   renameCollection: async () => {
     return {} as CollectionFullObject;
   },
@@ -194,16 +194,20 @@ export const DataProvider = (props: { children: React.ReactNode }) => {
 
   // API: create database
   const createDatabase = async (params: { db_name: string }) => {
-    await DatabaseService.createDatabase(params);
+    const res = await DatabaseService.createDatabase(params);
     await fetchDatabases();
+
+    return res;
   };
 
   // API: delete database
   const dropDatabase = async (params: { db_name: string }) => {
-    await DatabaseService.dropDatabase(params);
+    const res = await DatabaseService.dropDatabase(params);
     const newDatabases = await fetchDatabases();
 
     setDatabase(newDatabases[0].name);
+
+    return res;
   };
 
   // API:fetch collections
@@ -271,7 +275,7 @@ export const DataProvider = (props: { children: React.ReactNode }) => {
   // API: load collection
   const loadCollection = async (name: string, param?: any) => {
     // load collection
-    await CollectionService.loadCollection(name, param);
+    const res = await CollectionService.loadCollection(name, param);
 
     // find the collection in the collections
     const collection = collections.find(
@@ -286,12 +290,14 @@ export const DataProvider = (props: { children: React.ReactNode }) => {
 
     // update collection, and trigger cron job
     updateCollections({ collections: [collection] });
+
+    return res;
   };
 
   // API: release collection
   const releaseCollection = async (name: string) => {
     // release collection
-    await CollectionService.releaseCollection(name);
+    return await CollectionService.releaseCollection(name);
   };
 
   // API: rename collection

+ 4 - 4
client/src/context/Types.ts

@@ -115,15 +115,15 @@ export type DataContextType = {
   // APIs
   // databases
   fetchDatabases: () => Promise<DatabaseObject[]>;
-  createDatabase: (params: { db_name: string }) => Promise<void>;
-  dropDatabase: (params: { db_name: string }) => Promise<void>;
+  createDatabase: (params: { db_name: string }) => Promise<ResStatus>;
+  dropDatabase: (params: { db_name: string }) => Promise<ResStatus>;
 
   // collections
   fetchCollections: () => Promise<void>;
   fetchCollection: (name: string) => Promise<CollectionFullObject>;
   createCollection: (data: any) => Promise<CollectionFullObject>;
-  loadCollection: (name: string, param?: any) => Promise<void>;
-  releaseCollection: (name: string) => Promise<void>;
+  loadCollection: (name: string, param?: any) => Promise<ResStatus>;
+  releaseCollection: (name: string) => Promise<ResStatus>;
   renameCollection: (
     name: string,
     newName: string

+ 2 - 2
client/src/http/Collection.service.ts

@@ -53,14 +53,14 @@ export class CollectionService extends BaseModel {
   }
 
   static loadCollection(collectionName: string, param?: LoadReplicaReq) {
-    return super.update<string>({
+    return super.update<ResStatus>({
       path: `/collections/${collectionName}/load`,
       data: param,
     });
   }
 
   static releaseCollection(collectionName: string) {
-    return super.update<string>({
+    return super.update<ResStatus>({
       path: `/collections/${collectionName}/release`,
     });
   }

+ 3 - 3
client/src/http/Database.service.ts

@@ -1,5 +1,5 @@
 import BaseModel from './BaseModel';
-import type { DatabaseObject } from '@server/types';
+import type { DatabaseObject, ResStatus } from '@server/types';
 
 // request types
 export interface CreateDatabaseParams {
@@ -24,11 +24,11 @@ export class DatabaseService extends BaseModel {
   }
 
   static createDatabase(data: CreateDatabaseParams) {
-    return super.create({ path: `/databases`, data });
+    return super.create<ResStatus>({ path: `/databases`, data });
   }
 
   static dropDatabase(data: DropDatabaseParams) {
-    return super.delete({ path: `/databases/${data.db_name}` });
+    return super.delete<ResStatus>({ path: `/databases/${data.db_name}` });
   }
 
   static describeDatabase(db_name: string) {

+ 10 - 6
client/src/pages/dialogs/CreateDatabaseDialog.tsx

@@ -73,17 +73,21 @@ const CreateDatabaseDialog: FC<CreateDatabaseProps> = ({ onCreate }) => {
 
   const handleCreate = async () => {
     setLoading(true);
-    await createDatabase(form).finally(() => {
+    const res = await createDatabase(form).finally(() => {
       setLoading(false);
     });
-    openSnackBar(successTrans('create', { name: dbTrans('database') }));
-    setLoading(false);
+    if (res.error_code === 'SUCCESS') {
+      openSnackBar(successTrans('create', { name: dbTrans('database') }));
 
-    handleCloseDialog();
+      handleCloseDialog();
 
-    if (onCreate) {
-      onCreate();
+      if (onCreate) {
+        onCreate();
+      }
+    } else {
+      openSnackBar(res.reason, 'error');
     }
+    setLoading(false);
   };
 
   const handleClose = () => {