86 lines
2.5 KiB
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,
|
|
}
|
|
} |