feat(canvas): 画布资源 - 缩略图字段与缓存加载支持

This commit is contained in:
ddcat666 committed 2026-09-27 22:26:32 +08:00
1 parent a0ba303b02
commit e10f32ecaf
9 files changed
+312 -101

No files matched your search

+5 -1
View File
@@ -11,7 +11,7 @@ import (
"gorm.io/gorm"
)
const CurrentSchemaVersion int64 = 40
const CurrentSchemaVersion int64 = 41
const baselineSchemaChecksum = "sha256:open-ai-canvas-schema-v1-20260830"
const schemaMigrationAppliedAtIndexChecksum = "sha256:schema-migrations-applied-at-index-v2-20260830"
@@ -28,6 +28,7 @@ const cloudAgentGeminiCacheIdentityChecksum = "sha256:cloud-agent-gemini-cache-i
const prefixedIDSequenceReconcileChecksum = "sha256:prefixed-id-sequence-reconcile-v38-20260926"
const skillLibraryCategoriesChecksum = "sha256:skill-library-categories-v39-20260926"
const builtinSkillTombstonesChecksum = "sha256:builtin-skill-tombstones-v40-20260927"
const resourceThumbnailChecksum = "sha256:resource-thumbnail-v41-20260927"
const postgresSchemaMigrationLockID int64 = 73123910420260830
@@ -135,6 +136,9 @@ var schemaMigrations = []migration{
{version: 40, name: "builtin_skill_tombstones", checksum: builtinSkillTombstonesChecksum, apply: func(tx *gorm.DB) error {
return tx.AutoMigrate(&model.BuiltinSkillTombstone{})
}},
{version: 41, name: "resource_thumbnail", checksum: resourceThumbnailChecksum, apply: func(tx *gorm.DB) error {
return tx.AutoMigrate(&model.Resource{})
}},
}
func migratePrefixedIDSequenceReconcile(tx *gorm.DB) error {
+6
View File
@@ -51,6 +51,12 @@ type Resource struct {
PlaybackStatus string `json:"playbackStatus" gorm:"index;size:24"`
PlaybackObjectKey string `json:"playbackObjectKey"`
PlaybackError string `json:"playbackError" gorm:"type:text"`
// 单档画布展示缩略图;对象键固定由 ObjectKey 派生,不单独持久化。
ThumbnailStatus string `json:"thumbnailStatus" gorm:"size:24"`
ThumbnailMimeType string `json:"thumbnailMimeType" gorm:"size:120"`
ThumbnailSize int64 `json:"thumbnailSize"`
ThumbnailWidth int `json:"thumbnailWidth"`
ThumbnailHeight int `json:"thumbnailHeight"`
// UploadKey 是客户端逻辑上传身份的摘要;NULL 表示不参与幂等约束。
UploadKey *string `json:"-" gorm:"size:64;uniqueIndex:idx_resources_user_upload_key,priority:2"`
Error string `json:"error"`
@@ -1008,6 +1008,14 @@ func (r *Repository) SaveResource(resource *model.Resource) error {
return r.db.Save(resource).Error
}
// UpdateResourceThumbnail only updates a still-ready row and cannot resurrect a deleted resource.
func (r *Repository) UpdateResourceThumbnail(userID string, id string, values map[string]any) (bool, error) {
result := r.db.Model(&model.Resource{}).
Where("id = ? AND user_id = ? AND status = ?", id, userID, model.ResourceStatusReady).
Updates(values)
return result.RowsAffected == 1, result.Error
}
func (r *Repository) ResourceByUploadKey(userID string, uploadKey string) (*model.Resource, error) {
var resource model.Resource
if err := r.db.First(&resource, "user_id = ? AND upload_key = ?", userID, uploadKey).Error; err != nil {