Files
NianAIGC/backend/internal/orchestration/artifacts.go

47 lines
1.3 KiB
Go

package orchestration
import (
"context"
"errors"
"git.nianxx.cn/wangxuming/NianAIGC/backend/internal/assets"
"git.nianxx.cn/wangxuming/NianAIGC/backend/internal/jobs"
)
type ScopedAssetDeleter interface {
Delete(context.Context, assets.Scope, string) (assets.Asset, error)
}
type AssetArtifacts struct{ assets ScopedAssetDeleter }
func NewAssetArtifacts(service ScopedAssetDeleter) *AssetArtifacts {
return &AssetArtifacts{assets: service}
}
// DeleteOutputs is retry-safe: already absent objects are treated as deleted,
// while persistence/storage failures stop job deletion.
func (adapter *AssetArtifacts) DeleteOutputs(ctx context.Context, job jobs.Job) ([]string, error) {
if adapter == nil || adapter.assets == nil || job.OwnerID == "" {
return nil, errors.New("delete generation output assets")
}
seen := make(map[string]bool, len(job.OutputAssetIDs))
deleted := make([]string, 0, len(job.OutputAssetIDs))
for _, id := range job.OutputAssetIDs {
if id == "" || seen[id] {
continue
}
seen[id] = true
asset, err := adapter.assets.Delete(ctx, assets.PlatformScope(job.OwnerID), id)
if errors.Is(err, assets.ErrNotFound) {
continue
}
if err != nil {
return nil, errors.New("delete generation output assets")
}
deleted = append(deleted, asset.ID)
}
return deleted, nil
}
var _ jobs.ArtifactDeleter = (*AssetArtifacts)(nil)