feat(cloud-agent): 云端 Agent - 完善运行时与资源持久化
This commit is contained in:
1 parent
48e6a705ef
commit
993580a7bd
40 files changed
+1739
-440
No files matched your search
@@ -10,6 +10,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"infinite-canvas/backend/internal/database"
|
||||
"infinite-canvas/backend/internal/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@@ -73,32 +74,7 @@ func (r *Repository) ReleaseTaskLease(id string, owner string) error {
|
||||
// NextPrefixedID 在数据库事务中递增序列,避免 UUID/父子字符串拼接导致的不可读和不可排序 ID。
|
||||
// prefix 只决定展示前缀,关联关系仍由独立外键维护。
|
||||
func (r *Repository) NextPrefixedID(prefix string) (string, error) {
|
||||
return r.nextPrefixedID(r.db, prefix)
|
||||
}
|
||||
|
||||
func (r *Repository) nextPrefixedID(db *gorm.DB, prefix string) (string, error) {
|
||||
prefix = strings.ToUpper(strings.TrimSpace(prefix))
|
||||
if prefix == "" || len(prefix) > 16 {
|
||||
return "", errors.New("invalid id prefix")
|
||||
}
|
||||
sequence := "id:" + prefix
|
||||
var item model.IDSequence
|
||||
err := db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Clauses(clause.OnConflict{DoNothing: true}).Create(&model.IDSequence{Name: sequence, UpdatedAt: time.Now()}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Model(&model.IDSequence{}).Where("name = ?", sequence).Updates(map[string]any{
|
||||
"value": gorm.Expr("value + ?", 1),
|
||||
"updated_at": time.Now(),
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.First(&item, "name = ?", sequence).Error
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return fmt.Sprintf("%s_%06d", prefix, item.Value), nil
|
||||
return database.AllocatePrefixedID(r.db, prefix)
|
||||
}
|
||||
|
||||
func (r *Repository) UserStorageUsage(userID string) (UserStorageUsage, error) {
|
||||
|
||||
@@ -51,9 +51,9 @@ func (r *Repository) SkillFiles(versionID string) ([]model.SkillFile, error) {
|
||||
return files, err
|
||||
}
|
||||
|
||||
func (r *Repository) SkillsForPackageEnsure(userSource int) ([]model.Skill, error) {
|
||||
func (r *Repository) SkillsForPackageEnsure() ([]model.Skill, error) {
|
||||
var skills []model.Skill
|
||||
err := r.db.Where("status = ? AND (current_version_id = '' OR source <> ?)", 1, userSource).Find(&skills).Error
|
||||
err := r.db.Where("status = ?", 1).Find(&skills).Error
|
||||
return skills, err
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user