geoGo/internal/collect/manager.go

70 lines
1.7 KiB
Go

package collect
import (
"context"
"fmt"
"geo/internal/config"
"github.com/gofiber/fiber/v2/log"
)
// CollectManager 收集管理器
type CollectManager struct {
ctx context.Context
config *config.Config
logger log.AllLogger
}
// NewCollectManager 创建收集管理器
func NewCollectManager(ctx context.Context, cfg *config.Config, logger log.AllLogger) *CollectManager {
return &CollectManager{
ctx: ctx,
config: cfg,
logger: logger,
}
}
// GetCollector 获取指定平台的收集器
func (m *CollectManager) GetCollector(platform string, params *CollectParams) (CollectorInterface, error) {
collectorValue, ok := CollectorMap[platform]
if !ok {
return nil, fmt.Errorf("不支持的平台: %s", platform)
}
collector := collectorValue.InitMethod(m.ctx, params, m.config, m.logger)
if collector == nil {
return nil, fmt.Errorf("创建收集器失败: %s", platform)
}
return collector, nil
}
// AskQuestion 向指定AI平台提问
func (m *CollectManager) AskQuestion(platform string, params *CollectParams, question string) (*CollectResult, error) {
collector, err := m.GetCollector(platform, params)
if err != nil {
return nil, err
}
return collector.AskQuestion(question)
}
// WaitLogin 等待指定平台登录
func (m *CollectManager) WaitLogin(platform string, params *CollectParams) (bool, string) {
collector, err := m.GetCollector(platform, params)
if err != nil {
return false, err.Error()
}
return collector.WaitLogin()
}
// ListPlatforms 列出所有支持的平台
func (m *CollectManager) ListPlatforms() []string {
platforms := make([]string, 0, len(CollectorMap))
for platform := range CollectorMap {
platforms = append(platforms, platform)
}
return platforms
}