haixunMaster/haixun-backend/internal/logic/threads_account/ai_settings_logic.go

86 lines
2.5 KiB
Go

package threads_account
import (
"context"
domusecase "haixun-backend/internal/model/threads_account/domain/usecase"
"haixun-backend/internal/svc"
"haixun-backend/internal/types"
)
type GetThreadsAccountAiSettingsLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetThreadsAccountAiSettingsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetThreadsAccountAiSettingsLogic {
return &GetThreadsAccountAiSettingsLogic{ctx: ctx, svcCtx: svcCtx}
}
func (l *GetThreadsAccountAiSettingsLogic) GetThreadsAccountAiSettings(req *types.ThreadsAccountPath) (*types.ThreadsAccountAiSettingsData, error) {
tenantID, uid, err := actorFrom(l.ctx)
if err != nil {
return nil, err
}
data, err := l.svcCtx.ThreadsAccount.GetAiSettings(l.ctx, tenantID, uid, req.ID)
if err != nil {
return nil, err
}
return toAiSettingsData(data), nil
}
type UpdateThreadsAccountAiSettingsLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewUpdateThreadsAccountAiSettingsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateThreadsAccountAiSettingsLogic {
return &UpdateThreadsAccountAiSettingsLogic{ctx: ctx, svcCtx: svcCtx}
}
func (l *UpdateThreadsAccountAiSettingsLogic) UpdateThreadsAccountAiSettings(
req *types.ThreadsAccountPath,
body *types.UpdateThreadsAccountAiSettingsReq,
) (*types.ThreadsAccountAiSettingsData, error) {
tenantID, uid, err := actorFrom(l.ctx)
if err != nil {
return nil, err
}
data, err := l.svcCtx.ThreadsAccount.UpdateAiSettings(l.ctx, tenantID, uid, req.ID, toAiSettingsPatch(body))
if err != nil {
return nil, err
}
return toAiSettingsData(data), nil
}
func toAiSettingsData(data *domusecase.AiSettings) *types.ThreadsAccountAiSettingsData {
if data == nil {
return nil
}
configured := map[string]interface{}{}
for provider, ok := range data.ApiKeysConfigured {
configured[provider] = ok
}
return &types.ThreadsAccountAiSettingsData{
AccountID: data.AccountID,
Provider: data.Provider,
Model: data.Model,
ResearchProvider: data.ResearchProvider,
ResearchModel: data.ResearchModel,
ApiKeys: data.ApiKeys,
ApiKeysConfigured: configured,
}
}
func toAiSettingsPatch(req *types.UpdateThreadsAccountAiSettingsReq) domusecase.AiSettingsPatch {
if req == nil {
return domusecase.AiSettingsPatch{}
}
return domusecase.AiSettingsPatch{
Provider: req.Provider,
Model: req.Model,
ResearchProvider: req.ResearchProvider,
ResearchModel: req.ResearchModel,
ApiKeys: req.ApiKeys,
}
}