package initdb import ( "errors" "fmt" "gorm.io/gorm" "senlinai-agent/backend/internal/models" ) var defaultDatasetSources = []struct { Name string URL string IconURL string }{ {Name: "彭博社最新报道", URL: "https://bbg.buzzing.cc/feed.json", IconURL: "https://bbg.buzzing.cc/apple-touch-icon.png"}, {Name: "国外科技头条", URL: "https://tech.buzzing.cc/feed.json", IconURL: "https://tech.buzzing.cc/apple-touch-icon.png"}, {Name: "国外财经新闻", URL: "https://finance.buzzing.cc/feed.json", IconURL: "https://finance.buzzing.cc/apple-touch-icon.png"}, {Name: "华尔街日报热门", URL: "https://wsj.buzzing.cc/feed.json", IconURL: "https://wsj.buzzing.cc/apple-touch-icon.png"}, {Name: "Product Hunt", URL: "https://ph.buzzing.cc/feed.json", IconURL: "https://ph.buzzing.cc/apple-touch-icon.png"}, {Name: "Dev.to", URL: "https://dev.buzzing.cc/feed.json", IconURL: "https://dev.buzzing.cc/apple-touch-icon.png"}, {Name: "财联社-热门", URL: "https://rsshub.app/cls/hot"}, {Name: "金十数据-快讯", URL: "https://rsshub.app/jin10"}, } // InitDataset creates the default Buzzing RSS sources for the default account when the source table is empty. func InitDataset(database *gorm.DB) error { var count int64 if err := database.Model(&models.SaDatasetSource{}).Count(&count).Error; err != nil { return err } if count > 0 { return nil } var owner models.SaUser err := database.Where("email = ?", rootUsername).First(&owner).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return fmt.Errorf("find root user for default dataset sources: %w", err) } if errors.Is(err, gorm.ErrRecordNotFound) { if err := database.Order("id asc").First(&owner).Error; err != nil { return fmt.Errorf("find owner for default dataset sources: %w", err) } } sources := make([]models.SaDatasetSource, 0, len(defaultDatasetSources)) for _, source := range defaultDatasetSources { sources = append(sources, models.SaDatasetSource{ CreatedBy: owner.ID, Name: source.Name, Kind: "rss", URL: source.URL, IconURL: source.IconURL, Description: "Buzzing 中文聚合订阅", Enabled: true, }) } return database.Create(&sources).Error }