feat(cloud-agent): 云端 Agent - 完善运行时与资源持久化

This commit is contained in:
ddcat666 committed 2026-09-26 17:05:36 +08:00
1 parent 48e6a705ef
commit 993580a7bd
40 files changed
+1739 -440

No files matched your search

+2 -26
View File
@@ -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
}