diff --git a/internal/aria2/aria2_test.go b/internal/aria2/aria2_test.go index a20827f4..1e1b296b 100644 --- a/internal/aria2/aria2_test.go +++ b/internal/aria2/aria2_test.go @@ -39,7 +39,7 @@ func TestConnect(t *testing.T) { func TestDown(t *testing.T) { TestConnect(t) - err := op.CreateStorage(context.Background(), model.Storage{ + _, err := op.CreateStorage(context.Background(), model.Storage{ ID: 0, MountPath: "/", Order: 0, diff --git a/internal/bootstrap/data/dev.go b/internal/bootstrap/data/dev.go index c934b7c3..f6296c9e 100644 --- a/internal/bootstrap/data/dev.go +++ b/internal/bootstrap/data/dev.go @@ -12,7 +12,7 @@ import ( ) func initDevData() { - err := op.CreateStorage(context.Background(), model.Storage{ + _, err := op.CreateStorage(context.Background(), model.Storage{ MountPath: "/", Order: 0, Driver: "Local", diff --git a/internal/op/storage.go b/internal/op/storage.go index f1a08194..c01be112 100644 --- a/internal/op/storage.go +++ b/internal/op/storage.go @@ -31,7 +31,7 @@ func GetStorageByVirtualPath(virtualPath string) (driver.Driver, error) { // CreateStorage Save the storage to database so storage can get an id // then instantiate corresponding driver and save it in memory -func CreateStorage(ctx context.Context, storage model.Storage) error { +func CreateStorage(ctx context.Context, storage model.Storage) (uint, error) { storage.Modified = time.Now() storage.MountPath = utils.StandardizePath(storage.MountPath) var err error @@ -39,13 +39,13 @@ func CreateStorage(ctx context.Context, storage model.Storage) error { driverName := storage.Driver driverNew, err := GetDriverNew(driverName) if err != nil { - return errors.WithMessage(err, "failed get driver new") + return 0, errors.WithMessage(err, "failed get driver new") } storageDriver := driverNew() // insert storage to database err = db.CreateStorage(&storage) if err != nil { - return errors.WithMessage(err, "failed create storage in database") + return storage.ID, errors.WithMessage(err, "failed create storage in database") } // already has an id err = storageDriver.Init(ctx, storage) @@ -53,13 +53,13 @@ func CreateStorage(ctx context.Context, storage model.Storage) error { if err != nil { storageDriver.GetStorage().SetStatus(fmt.Sprintf("%+v", err.Error())) MustSaveDriverStorage(storageDriver) - return errors.Wrapf(err, "failed init storage but storage is already created") + return storage.ID, errors.Wrapf(err, "failed init storage but storage is already created") } else { storageDriver.GetStorage().SetStatus(WORK) MustSaveDriverStorage(storageDriver) } log.Debugf("storage %+v is created", storageDriver) - return nil + return storage.ID, nil } // LoadStorage load exist storage in db to memory diff --git a/internal/op/storage_test.go b/internal/op/storage_test.go index a6502c5c..390fb0d0 100644 --- a/internal/op/storage_test.go +++ b/internal/op/storage_test.go @@ -30,7 +30,7 @@ func TestCreateStorage(t *testing.T) { {storage: model.Storage{Driver: "None", MountPath: "/none", Addition: `{"root_folder":"."}`}, isErr: true}, } for _, storage := range storages { - err := op.CreateStorage(context.Background(), storage.storage) + _, err := op.CreateStorage(context.Background(), storage.storage) if err != nil { if !storage.isErr { t.Errorf("failed to create storage: %+v", err) @@ -77,7 +77,7 @@ func setupStorages(t *testing.T) { {Driver: "Local", MountPath: "/a/d/e.balance", Order: 4, Addition: `{"root_folder":"."}`}, } for _, storage := range storages { - err := op.CreateStorage(context.Background(), storage) + _, err := op.CreateStorage(context.Background(), storage) if err != nil { t.Fatalf("failed to create storage: %+v", err) } diff --git a/server/common/common.go b/server/common/common.go index 56b0a701..28d2da44 100644 --- a/server/common/common.go +++ b/server/common/common.go @@ -21,6 +21,23 @@ func hidePrivacy(msg string) string { // ErrorResp is used to return error response // @param l: if true, log error func ErrorResp(c *gin.Context, err error, code int, l ...bool) { + ErrorWithDataResp(c, err, code, nil, l...) + //if len(l) > 0 && l[0] { + // if flags.Debug || flags.Dev { + // log.Errorf("%+v", err) + // } else { + // log.Errorf("%v", err) + // } + //} + //c.JSON(200, Resp[interface{}]{ + // Code: code, + // Message: hidePrivacy(err.Error()), + // Data: nil, + //}) + //c.Abort() +} + +func ErrorWithDataResp(c *gin.Context, err error, code int, data interface{}, l ...bool) { if len(l) > 0 && l[0] { if flags.Debug || flags.Dev { log.Errorf("%+v", err) @@ -31,7 +48,7 @@ func ErrorResp(c *gin.Context, err error, code int, l ...bool) { c.JSON(200, Resp[interface{}]{ Code: code, Message: hidePrivacy(err.Error()), - Data: nil, + Data: data, }) c.Abort() } diff --git a/server/handles/storage.go b/server/handles/storage.go index 4d7ee0e1..76a387de 100644 --- a/server/handles/storage.go +++ b/server/handles/storage.go @@ -36,10 +36,14 @@ func CreateStorage(c *gin.Context) { common.ErrorResp(c, err, 400) return } - if err := op.CreateStorage(c, req); err != nil { - common.ErrorResp(c, err, 500, true) + if id, err := op.CreateStorage(c, req); err != nil { + common.ErrorWithDataResp(c, err, 500, gin.H{ + "id": id, + }, true) } else { - common.SuccessResp(c) + common.SuccessResp(c, gin.H{ + "id": id, + }) } }