JCC-CSScheduler/schedulerMiddleware/internal/services/user.go

91 lines
2.1 KiB
Go

package services
import (
"fmt"
sch "gitlink.org.cn/cloudream/common/sdks/pcmscheduler"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
"gitlink.org.cn/cloudream/common/sdks/storage/cdsapi"
schglb "gitlink.org.cn/cloudream/scheduler/common/globals"
"strconv"
"time"
)
type UserService struct {
*Service
}
func (svc *Service) UserSvc() *UserService {
return &UserService{Service: svc}
}
func (svc *UserService) QueryUser(id string) (cdssdk.UserID, error) {
userID, err := svc.db.Access().GetUserBySsoID(svc.db.DefCtx(), id)
if err != nil {
return userID, err
}
return userID, err
}
func (svc *UserService) AddUser(id string, userName string) error {
cdsCli, err := schglb.CloudreamStoragePool.Acquire()
if err != nil {
return fmt.Errorf("new scheduler client: %w", err)
}
defer schglb.CloudreamStoragePool.Release(cdsCli)
// 注册用户
createReq := &cdsapi.UserCreate{
Name: userName,
}
createResp, err := cdsCli.UserCreate(createReq)
if err != nil {
return fmt.Errorf("failed to create user: %w", err)
}
user := sch.User{
ID: int64(createResp.User.UserID),
SsoID: id,
UserName: userName,
Created: time.Now(),
}
// 根据不同的数据类型,创建不同的桶
var buckets []sch.Bucket
dataTypes := []string{sch.CODE, sch.DATASET, sch.MODEL, sch.IMAGE}
for _, dataType := range dataTypes {
bucketName := strconv.FormatInt(int64(createResp.User.UserID), 10) + "_" + dataType
bucketCreateReq := cdsapi.BucketCreate{
Name: bucketName,
UserID: createResp.User.UserID,
}
bucketCreateResp, err := cdsCli.Bucket().Create(bucketCreateReq)
if err != nil {
return err
}
buckets = append(buckets, sch.Bucket{
ID: bucketCreateResp.Bucket.BucketID,
UserID: createResp.User.UserID,
DataType: dataType,
})
}
err = svc.db.Access().AddUser(svc.db.DefCtx(), user, buckets)
if err != nil {
return err
}
return err
}
func (svc *UserService) UpdateUser(id string, userName string) error {
err := svc.db.Access().UpdateUser(svc.db.DefCtx(), id, userName)
if err != nil {
return err
}
return err
}