107 lines
4.2 KiB
Go
107 lines
4.2 KiB
Go
package response
|
||
|
||
import (
|
||
"encoding/json"
|
||
"git.echol.cn/loser/st/server/model/app"
|
||
"time"
|
||
)
|
||
|
||
// CharacterResponse 角色卡响应
|
||
type CharacterResponse struct {
|
||
ID uint `json:"id"`
|
||
Name string `json:"name"`
|
||
Description string `json:"description"`
|
||
Personality string `json:"personality"`
|
||
Scenario string `json:"scenario"`
|
||
Avatar string `json:"avatar"`
|
||
CreatorID *uint `json:"creatorId"`
|
||
CreatorName string `json:"creatorName"`
|
||
CreatorNotes string `json:"creatorNotes"`
|
||
Tags []string `json:"tags"`
|
||
IsPublic bool `json:"isPublic"`
|
||
Version int `json:"version"`
|
||
FirstMessage string `json:"firstMessage"`
|
||
ExampleMessages []string `json:"exampleMessages"`
|
||
SystemPrompt string `json:"systemPrompt"`
|
||
PostHistoryInstructions string `json:"postHistoryInstructions"`
|
||
AlternateGreetings []string `json:"alternateGreetings"`
|
||
CharacterBook json.RawMessage `json:"characterBook"`
|
||
Extensions json.RawMessage `json:"extensions"`
|
||
TotalChats int `json:"totalChats"`
|
||
TotalLikes int `json:"totalLikes"`
|
||
UsageCount int `json:"usageCount"`
|
||
FavoriteCount int `json:"favoriteCount"`
|
||
TokenCount int `json:"tokenCount"`
|
||
IsFavorited bool `json:"isFavorited"` // 当前用户是否收藏
|
||
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, isFavorited bool) CharacterResponse {
|
||
// pq.StringArray 可以直接赋值给 []string
|
||
tags := []string{}
|
||
if character.Tags != nil {
|
||
tags = character.Tags
|
||
}
|
||
|
||
exampleMessages := []string{}
|
||
if character.ExampleMessages != nil {
|
||
exampleMessages = character.ExampleMessages
|
||
}
|
||
|
||
alternateGreetings := []string{}
|
||
if character.AlternateGreetings != nil {
|
||
alternateGreetings = character.AlternateGreetings
|
||
}
|
||
|
||
// 处理 JSON 字段,确保返回有效 JSON(nil 时返回 null)
|
||
characterBook := json.RawMessage(character.CharacterBook)
|
||
if len(characterBook) == 0 {
|
||
characterBook = json.RawMessage("null")
|
||
}
|
||
|
||
extensions := json.RawMessage(character.Extensions)
|
||
if len(extensions) == 0 {
|
||
extensions = json.RawMessage("null")
|
||
}
|
||
|
||
return CharacterResponse{
|
||
ID: character.ID,
|
||
Name: character.Name,
|
||
Description: character.Description,
|
||
Personality: character.Personality,
|
||
Scenario: character.Scenario,
|
||
Avatar: character.Avatar,
|
||
CreatorID: character.CreatorID,
|
||
CreatorName: character.CreatorName,
|
||
CreatorNotes: character.CreatorNotes,
|
||
Tags: tags,
|
||
IsPublic: character.IsPublic,
|
||
Version: character.Version,
|
||
FirstMessage: character.FirstMessage,
|
||
ExampleMessages: exampleMessages,
|
||
SystemPrompt: character.SystemPrompt,
|
||
PostHistoryInstructions: character.PostHistoryInstructions,
|
||
AlternateGreetings: alternateGreetings,
|
||
CharacterBook: characterBook,
|
||
Extensions: extensions,
|
||
TotalChats: character.TotalChats,
|
||
TotalLikes: character.TotalLikes,
|
||
UsageCount: character.UsageCount,
|
||
FavoriteCount: character.FavoriteCount,
|
||
TokenCount: character.TokenCount,
|
||
IsFavorited: isFavorited,
|
||
CreatedAt: character.CreatedAt,
|
||
UpdatedAt: character.UpdatedAt,
|
||
}
|
||
}
|