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