Files
st-react/server/model/app/response/character.go
Echo f4e166c5ee 🎉 初始化项目
Signed-off-by: Echo <1711788888@qq.com>
2026-02-27 21:52:00 +08:00

109 lines
4.3 KiB
Go

package response
import (
"encoding/json"
"time"
"git.echol.cn/loser/st/server/model/app"
)
// CharacterResponse 角色卡响应
type CharacterResponse struct {
ID uint `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Creator string `json:"creator"`
Version string `json:"version"`
Description string `json:"description"`
Personality string `json:"personality"`
Scenario string `json:"scenario"`
FirstMes string `json:"firstMes"`
MesExample string `json:"mesExample"`
CreatorNotes string `json:"creatorNotes"`
SystemPrompt string `json:"systemPrompt"`
PostHistoryInstructions string `json:"postHistoryInstructions"`
Tags []string `json:"tags"`
AlternateGreetings []string `json:"alternateGreetings"`
CharacterBook map[string]interface{} `json:"characterBook"`
Extensions map[string]interface{} `json:"extensions"`
Spec string `json:"spec"`
SpecVersion string `json:"specVersion"`
IsPublic bool `json:"isPublic"`
UseCount int `json:"useCount"`
FavoriteCount int `json:"favoriteCount"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
// CharacterSimpleResponse 角色卡简化响应(用于列表)
type CharacterSimpleResponse struct {
ID uint `json:"id"`
Name string `json:"name"`
Avatar string `json:"avatar"`
Description string `json:"description"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
// CharacterListResponse 角色卡列表响应
type CharacterListResponse struct {
List []CharacterResponse `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
// ToCharacterResponse 转换为角色卡响应结构
func ToCharacterResponse(character *app.AICharacter) CharacterResponse {
resp := CharacterResponse{
ID: character.ID,
Name: character.Name,
Avatar: character.Avatar,
Creator: character.Creator,
Version: character.Version,
Description: character.Description,
Personality: character.Personality,
Scenario: character.Scenario,
FirstMes: character.FirstMes,
MesExample: character.MesExample,
CreatorNotes: character.CreatorNotes,
SystemPrompt: character.SystemPrompt,
PostHistoryInstructions: character.PostHistoryInstructions,
Spec: character.Spec,
SpecVersion: character.SpecVersion,
IsPublic: character.IsPublic,
UseCount: character.UseCount,
FavoriteCount: character.FavoriteCount,
CreatedAt: character.CreatedAt,
UpdatedAt: character.UpdatedAt,
}
// 解析 JSON 字段
if len(character.Tags) > 0 {
json.Unmarshal(character.Tags, &resp.Tags)
}
if len(character.AlternateGreetings) > 0 {
json.Unmarshal(character.AlternateGreetings, &resp.AlternateGreetings)
}
if len(character.CharacterBook) > 0 {
json.Unmarshal(character.CharacterBook, &resp.CharacterBook)
}
if len(character.Extensions) > 0 {
json.Unmarshal(character.Extensions, &resp.Extensions)
}
return resp
}
// ToCharacterSimpleResponse 转换为角色卡简化响应结构(用于列表)
func ToCharacterSimpleResponse(character *app.AICharacter) CharacterSimpleResponse {
return CharacterSimpleResponse{
ID: character.ID,
Name: character.Name,
Avatar: character.Avatar,
Description: character.Description,
CreatedAt: character.CreatedAt,
UpdatedAt: character.UpdatedAt,
}
}