|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package mq
-
- import (
- "errors"
- "fmt"
-
- "gitlink.org.cn/cloudream/common/consts/errorcode"
- "gitlink.org.cn/cloudream/common/pkgs/logger"
- "gitlink.org.cn/cloudream/common/pkgs/mq"
- cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
- "gitlink.org.cn/cloudream/storage/common/pkgs/db2"
- coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
- "gorm.io/gorm"
- )
-
- func (svc *Service) CreateUser(msg *coormq.CreateUser) (*coormq.CreateUserResp, *mq.CodeMessage) {
- var user cdssdk.User
- err := svc.db2.DoTx(func(tx db2.SQLContext) error {
- var err error
-
- user, err = svc.db2.User().Create(tx, msg.Name)
- if err != nil {
- return fmt.Errorf("creating user: %w", err)
- }
-
- // TODO 目前新建用户的权限与ID 1的相同
- hubs, err := svc.db2.UserHub().GetByUserID(tx, 1)
- if err != nil {
- return fmt.Errorf("getting user hubs: %w", err)
- }
-
- stgs, err := svc.db2.UserStorage().GetByUserID(tx, 1)
- if err != nil {
- return fmt.Errorf("getting user storages: %w", err)
- }
-
- for _, hub := range hubs {
- err := svc.db2.UserHub().Create(tx, user.UserID, hub.HubID)
- if err != nil {
- return fmt.Errorf("creating user hub: %w", err)
- }
- }
-
- for _, stg := range stgs {
- err := svc.db2.UserStorage().Create(tx, user.UserID, stg.StorageID)
- if err != nil {
- return fmt.Errorf("creating user storage: %w", err)
- }
- }
-
- return nil
- })
- if err != nil {
- logger.WithField("Name", msg.Name).
- Warn(err.Error())
-
- if errors.Is(err, gorm.ErrDuplicatedKey) {
- return nil, mq.Failed(errorcode.DataExists, "user name already exists")
- }
-
- return nil, mq.Failed(errorcode.OperationFailed, err.Error())
- }
-
- return mq.ReplyOK(coormq.RespCreateUser(user))
- }
-
- func (svc *Service) DeleteUser(msg *coormq.DeleteUser) (*coormq.DeleteUserResp, *mq.CodeMessage) {
- // TODO 目前不能删除ID 1的用户
- if msg.UserID == 1 {
- return nil, mq.Failed(errorcode.OperationFailed, "cannot delete the default user")
- }
-
- err := svc.db2.DoTx(func(tx db2.SQLContext) error {
- err := svc.db2.User().Delete(tx, msg.UserID)
- if err != nil {
- return fmt.Errorf("deleting user: %w", err)
- }
-
- err = svc.db2.UserHub().DeleteByUserID(tx, msg.UserID)
- if err != nil {
- return fmt.Errorf("deleting user hubs: %w", err)
- }
-
- err = svc.db2.UserStorage().DeleteByUserID(tx, msg.UserID)
- if err != nil {
- return fmt.Errorf("deleting user storages: %w", err)
- }
-
- bkts, err := svc.db2.UserBucket().GetByUserID(tx, msg.UserID)
- if err != nil {
- return fmt.Errorf("getting user buckets: %w", err)
- }
-
- for _, bkt := range bkts {
- pkgs, err := svc.db2.Package().GetBucketPackages(tx, bkt.BucketID)
- if err != nil {
- return fmt.Errorf("getting bucket packages: %w", err)
- }
-
- for _, pkg := range pkgs {
- err := svc.db2.Package().DeleteComplete(tx, pkg.PackageID)
- if err != nil {
- return fmt.Errorf("deleting package %v: %w", pkg.PackageID, err)
- }
- }
-
- err = svc.db2.Bucket().Delete(tx, bkt.BucketID)
- if err != nil {
- return fmt.Errorf("deleting bucket: %w", err)
- }
- }
-
- err = svc.db2.UserBucket().DeleteByUserID(tx, msg.UserID)
- if err != nil {
- return fmt.Errorf("deleting user buckets: %w", err)
- }
-
- return nil
- })
- if err != nil {
- logger.WithField("UserID", msg.UserID).
- Warn(err.Error())
- return nil, mq.Failed(errorcode.OperationFailed, err.Error())
- }
-
- return mq.ReplyOK(coormq.RespDeleteUser())
- }
|