fix version 1

This commit is contained in:
2026-09-22 21:15:34 +08:00
parent 9f86366638
commit d63d7e8b3a
277 changed files with 9959 additions and 1514 deletions

View File

@@ -53,6 +53,12 @@ func CopyFile(ctx context.Context, in *pb.CopyFileRequest) (reply *pb.StatusRepl
return nil, errcode.ErrAlreadyExists
}
// 校验容量配额,复制会新增一份文件占用
if err := checkQuota(auth.ID, file.Size); err != nil {
printer.Error("Check quota error: %v", err)
return nil, err
}
// 创建文件副本
newFile := models.CloudDiskFile{
Std_IICUDS: types.Std_IICUDS{

View File

@@ -85,10 +85,16 @@ func GetDir(ctx context.Context, in *pb.IdentRequest) (reply *pb.CloudDiskDirIte
}
}
// 根目录的 ParentID 为空,需先判空再解引用
parentID := uint64(0)
if dir.ParentID != nil {
parentID = uint64(*dir.ParentID)
}
reply = &pb.CloudDiskDirItem{
Id: uint64(dir.ID),
Identity: dir.Identity,
ParentId: uint64(*dir.ParentID),
ParentId: parentID,
Name: dir.Name,
Path: dir.Path,
CreatedAt: dir.CreatedAt.Format(time.RFC3339),

View File

@@ -91,10 +91,16 @@ func GetDirTree(ctx context.Context, in *pb.IdentRequest) (reply *pb.CloudDiskDi
}
}
// 根目录的 ParentID 为空,需先判空再解引用
parentID := uint64(0)
if dir.ParentID != nil {
parentID = uint64(*dir.ParentID)
}
reply = &pb.CloudDiskDirItem{
Id: uint64(dir.ID),
Identity: dir.Identity,
ParentId: uint64(*dir.ParentID),
ParentId: parentID,
Name: dir.Name,
Path: dir.Path,
CreatedAt: dir.CreatedAt.Format(time.RFC3339),

View File

@@ -0,0 +1,43 @@
package disk
import (
"bsm/full/module/base/cloud/internal/impl"
"bsm/full/module/base/cloud/internal/models"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/printer"
)
// defaultMaxStorage 默认容量配额100GB与 Space.Get 创建默认空间时的取值保持一致
const defaultMaxStorage int64 = 100 * 1024 * 1024 * 1024
// checkQuota 校验「已用空间 + 本次新增」是否超出配额,超出返回明确错误
func checkQuota(passportID uint, addSize int64) error {
if addSize <= 0 {
return nil
}
// 配额取用户空间记录的 max_storage无空间记录时使用默认配额
maxStorage := defaultMaxStorage
var space models.CloudSpace
if err := impl.DBService.Where("passport_id = ?", passportID).First(&space).Error; err == nil && space.MaxStorage > 0 {
maxStorage = space.MaxStorage
}
// 已用空间按云盘文件实际占用统计
var usedStorage int64
row := impl.DBService.Model(&models.CloudDiskFile{}).
Joins("JOIN cloud_disk_dirs ON cloud_disk_files.directory_id = cloud_disk_dirs.id").
Where("cloud_disk_dirs.passport_id = ?", passportID).
Select("COALESCE(SUM(cloud_disk_files.size), 0)").
Row()
if err := row.Scan(&usedStorage); err != nil {
printer.Error("Query used storage error: %v", err)
return errcode.ErrDB
}
if usedStorage+addSize > maxStorage {
return errcode.ErrResourceExhausted
}
return nil
}

View File

@@ -52,6 +52,12 @@ func UploadFile(ctx context.Context, in *pb.CloudDiskFileRequest) (reply *pb.Sta
return nil, errcode.ErrAlreadyExists
}
// 校验容量配额,「已用 + 本次」不得超过上限
if err := checkQuota(auth.ID, in.Size); err != nil {
printer.Error("Check quota error: %v", err)
return nil, err
}
// 生成文件哈希(如果未提供)
fileHash := in.Hash
if fileHash == "" {