fix(*): 资源与技能 - 精简列表载荷并禁止对象存储静默降级

This commit is contained in:
ddcat666 committed 2026-09-24 23:57:13 +08:00
1 parent 5528dbc3e4
commit d1acc8f6f3
16 files changed
+271 -99

No files matched your search

+30 -2
View File
@@ -83,6 +83,22 @@ type SkillItem struct {
IsOwner bool `json:"isOwner"`
}
// AddedSkillReference is the small contract used by the runtime catalog.
// The full SkillItem contains editor, sync, author and showcase fields that
// are only needed by the skill detail/market pages, not when selecting an
// installed skill for a generation request.
type AddedSkillReference struct {
SkillID string `json:"skillId"`
SkillName string `json:"skillName"`
Description string `json:"description"`
VersionID string `json:"versionId"`
Version string `json:"version"`
Tag string `json:"tag"`
IsLike bool `json:"isLike"`
IsAdded bool `json:"isAdded"`
IsOwner bool `json:"isOwner"`
}
type SkillCategory struct {
Value string `json:"value"`
Label string `json:"label"`
@@ -151,12 +167,24 @@ func (s *Service) Skills(userID string, req SkillListRequest) (*SkillList, error
}, nil
}
func (s *Service) AddedSkills(userID string) ([]SkillItem, error) {
func (s *Service) AddedSkills(userID string) ([]AddedSkillReference, error) {
rows, _, err := s.repo.Skills(repository.SkillListFilter{UserID: userID, Scope: "mine", Sort: "updated", Limit: -1})
if err != nil {
return nil, err
}
return s.skillItems(userID, rows, false)
items, err := s.skillItems(userID, rows, false)
if err != nil {
return nil, err
}
references := make([]AddedSkillReference, 0, len(items))
for _, item := range items {
references = append(references, AddedSkillReference{
SkillID: item.SkillID, SkillName: item.SkillName, Description: item.Description,
VersionID: item.VersionID, Version: item.Version, Tag: item.Tag,
IsLike: item.IsLike, IsAdded: item.IsAdded, IsOwner: item.IsOwner,
})
}
return references, nil
}
func (s *Service) SkillDetail(userID string, id string) (*SkillItem, error) {
@@ -58,3 +58,24 @@ func TestParseShowcaseMediaAcceptsStoredSnakeCase(t *testing.T) {
t.Fatalf("unexpected camelCase parse: %+v", items)
}
}
func TestAddedSkillReferenceJSONExcludesEditorAndSyncPayload(t *testing.T) {
body, err := json.Marshal(AddedSkillReference{
SkillID: "skill-1", SkillName: "镜头拆解", Description: "用于镜头规划", VersionID: "v1",
Version: "1.0.0", Tag: "creative", IsAdded: true,
})
if err != nil {
t.Fatal(err)
}
text := string(body)
for _, key := range []string{"instruction", "extraInfo", "showcaseMedia", "sourceUrl", "syncStatus", "effectiveUser"} {
if strings.Contains(text, `"`+key+`"`) {
t.Fatalf("added skill reference contains %s: %s", key, text)
}
}
for _, key := range []string{"skillId", "skillName", "versionId", "tag", "isAdded"} {
if !strings.Contains(text, `"`+key+`"`) {
t.Fatalf("added skill reference misses %s: %s", key, text)
}
}
}