diff --git a/internal/services/bucket.go b/internal/services/bucket.go index 25cd09e..2459370 100644 --- a/internal/services/bucket.go +++ b/internal/services/bucket.go @@ -1,6 +1,9 @@ package services import ( + "database/sql" + + "github.com/jmoiron/sqlx" "gitlink.org.cn/cloudream/common/consts/errorcode" log "gitlink.org.cn/cloudream/common/pkg/logger" "gitlink.org.cn/cloudream/db/model" @@ -39,8 +42,13 @@ func (svc *Service) GetBucketObjects(msg *coormsg.GetBucketObjects) *coormsg.Get } func (svc *Service) CreateBucket(msg *coormsg.CreateBucket) *coormsg.CreateBucketResp { - bucketID, err := svc.db.Bucket().Create(svc.db.SQLCtx(), msg.Body.UserID, msg.Body.BucketName) - + var bucketID int + var err error + svc.db.DoTx(sql.LevelDefault, func(tx *sqlx.Tx) error { + // 这里用的是外部的err + bucketID, err = svc.db.Bucket().Create(tx, msg.Body.UserID, msg.Body.BucketName) + return err + }) if err != nil { log.WithField("UserID", msg.Body.UserID). WithField("BucketName", msg.Body.BucketName). @@ -52,8 +60,9 @@ func (svc *Service) CreateBucket(msg *coormsg.CreateBucket) *coormsg.CreateBucke } func (svc *Service) DeleteBucket(msg *coormsg.DeleteBucket) *coormsg.DeleteBucketResp { - err := svc.db.Bucket().Delete(svc.db.SQLCtx(), msg.Body.BucketID) - + err := svc.db.DoTx(sql.LevelDefault, func(tx *sqlx.Tx) error { + return svc.db.Bucket().Delete(tx, msg.Body.BucketID) + }) if err != nil { log.WithField("UserID", msg.Body.UserID). WithField("BucketID", msg.Body.BucketID). diff --git a/internal/services/object.go b/internal/services/object.go index 092fb3d..c98a60a 100644 --- a/internal/services/object.go +++ b/internal/services/object.go @@ -4,6 +4,7 @@ import ( "database/sql" "errors" + "github.com/jmoiron/sqlx" "github.com/samber/lo" "gitlink.org.cn/cloudream/common/consts" "gitlink.org.cn/cloudream/common/consts/errorcode" @@ -173,7 +174,10 @@ func (svc *Service) PreUploadRepObject(msg *coormsg.PreUploadRepObject) *coormsg } func (svc *Service) CreateRepObject(msg *coormsg.CreateRepObject) *coormsg.CreateObjectResp { - _, err := svc.db.Object().CreateRepObject(svc.db.SQLCtx(), msg.Body.BucketID, msg.Body.ObjectName, msg.Body.FileSize, msg.Body.RepCount, msg.Body.NodeIDs, msg.Body.FileHash) + err := svc.db.DoTx(sql.LevelDefault, func(tx *sqlx.Tx) error { + _, err := svc.db.Object().CreateRepObject(tx, msg.Body.BucketID, msg.Body.ObjectName, msg.Body.FileSize, msg.Body.RepCount, msg.Body.NodeIDs, msg.Body.FileHash) + return err + }) if err != nil { logger.WithField("BucketName", msg.Body.BucketID). WithField("ObjectName", msg.Body.ObjectName). @@ -253,7 +257,9 @@ func (svc *Service) PreUpdateRepObject(msg *coormsg.PreUpdateRepObject) *coormsg } func (svc *Service) UpdateRepObject(msg *coormsg.UpdateRepObject) *coormsg.UpdateRepObjectResp { - err := svc.db.Object().UpdateRepObject(svc.db.SQLCtx(), msg.Body.ObjectID, msg.Body.FileSize, msg.Body.NodeIDs, msg.Body.FileHash) + err := svc.db.DoTx(sql.LevelDefault, func(tx *sqlx.Tx) error { + return svc.db.Object().UpdateRepObject(tx, msg.Body.ObjectID, msg.Body.FileSize, msg.Body.NodeIDs, msg.Body.FileHash) + }) if err != nil { logger.WithField("ObjectID", msg.Body.ObjectID). Warnf("update rep object failed, err: %s", err.Error()) @@ -284,7 +290,9 @@ func (svc *Service) DeleteObject(msg *coormsg.DeleteObject) *coormsg.DeleteObjec return ramsg.ReplyFailed[coormsg.DeleteObjectResp](errorcode.OPERATION_FAILED, "object is not available to the user") } - err = svc.db.Object().SoftDelete(svc.db.SQLCtx(), msg.Body.ObjectID) + err = svc.db.DoTx(sql.LevelDefault, func(tx *sqlx.Tx) error { + return svc.db.Object().SoftDelete(tx, msg.Body.ObjectID) + }) if err != nil { logger.WithField("UserID", msg.Body.UserID). WithField("ObjectID", msg.Body.ObjectID). diff --git a/internal/services/storage.go b/internal/services/storage.go index 6ecb457..96b0491 100644 --- a/internal/services/storage.go +++ b/internal/services/storage.go @@ -1,6 +1,9 @@ package services import ( + "database/sql" + + "github.com/jmoiron/sqlx" "gitlink.org.cn/cloudream/common/consts" "gitlink.org.cn/cloudream/common/consts/errorcode" log "gitlink.org.cn/cloudream/common/pkg/logger" @@ -98,7 +101,9 @@ func (svc *Service) PreMoveObjectToStorage(msg *coormsg.PreMoveObjectToStorage) } func (svc *Service) MoveObjectToStorage(msg *coormsg.MoveObjectToStorage) *coormsg.MoveObjectToStorageResp { - err := svc.db.StorageObject().MoveObjectTo(svc.db.SQLCtx(), msg.Body.UserID, msg.Body.ObjectID, msg.Body.StorageID) + err := svc.db.DoTx(sql.LevelDefault, func(tx *sqlx.Tx) error { + return svc.db.StorageObject().MoveObjectTo(tx, msg.Body.UserID, msg.Body.ObjectID, msg.Body.StorageID) + }) if err != nil { log.WithField("UserID", msg.Body.UserID). WithField("ObjectID", msg.Body.ObjectID).