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) }