topfans/backend/services/aiChatService/service/persona_service.go
2026-05-28 12:00:19 +08:00

68 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"context"
"github.com/google/uuid"
"github.com/topfans/backend/services/aiChatService/model"
"github.com/topfans/backend/services/aiChatService/repository"
)
// PersonaService 人设服务
type PersonaService struct {
personaRepo repository.PersonaRepository
}
// NewPersonaService 创建人设服务
func NewPersonaService(personaRepo repository.PersonaRepository) *PersonaService {
return &PersonaService{
personaRepo: personaRepo,
}
}
// GetPersonas 获取用户的所有人设
func (s *PersonaService) GetPersonas(ctx context.Context, userID int64) ([]model.PersonaInfo, error) {
personas, err := s.personaRepo.GetByUserID(ctx, userID)
if err != nil {
return nil, err
}
infos := make([]model.PersonaInfo, len(personas))
for i, p := range personas {
infos[i] = p.ToPersonaInfo()
}
return infos, nil
}
// GetPersona 获取指定人设
func (s *PersonaService) GetPersona(ctx context.Context, personaID string) (*model.Persona, error) {
id, err := uuid.Parse(personaID)
if err != nil {
return nil, model.ErrInvalidRequest
}
return s.personaRepo.GetByID(ctx, id)
}
// GetDefaultPersona 获取用户默认人设
func (s *PersonaService) GetDefaultPersona(ctx context.Context, userID int64) (*model.Persona, error) {
return s.personaRepo.GetDefaultByUserID(ctx, userID)
}
// GetPersonaOrDefault 获取人设,如果 personaID 为空则获取默认人设
func (s *PersonaService) GetPersonaOrDefault(ctx context.Context, userID int64, personaID string) (*model.Persona, error) {
// 如果指定了 personaID优先使用指定人设
if personaID != "" {
id, err := uuid.Parse(personaID)
if err != nil {
return nil, model.ErrInvalidRequest
}
persona, err := s.personaRepo.GetByID(ctx, id)
if err == nil {
return persona, nil
}
// 如果人设不存在fallback 到默认人设
}
// 获取或创建默认人设
return s.personaRepo.EnsureDefaultPersona(ctx, userID)
}