feat(canvas): 画布资源 - 缩略图字段与缓存加载支持
This commit is contained in:
1 parent
a0ba303b02
commit
e10f32ecaf
9 files changed
+312
-101
No files matched your search
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user