package config import ( "cid/consts" "errors" ) // BaseConfig 基础配置结构 type BaseConfig struct { // 优先级和权重 Priority int `bson:"priority" json:"priority"` // 优先级 Weight float64 `bson:"weight" json:"weight"` // 权重 Order int `bson:"order" json:"order"` // 排序顺序 // 标签和分类 Tags []string `bson:"tags" json:"tags"` // 标签 Category string `bson:"category" json:"category"` // 分类 Industry string `bson:"industry" json:"industry"` // 行业 // 配置信息 Config string `bson:"config" json:"config"` // 配置信息(JSON格式) Extra map[string]interface{} `bson:"extra" json:"extra"` // 扩展字段 Remark string `bson:"remark" json:"remark"` // 备注 } // Validate 基础配置验证 func (c *BaseConfig) Validate() error { if c.Priority < 0 { return errors.New(consts.ErrInvalidConfiguration) } if c.Weight < 0 || c.Weight > 1 { return errors.New(consts.ErrInvalidConfiguration) } return nil } // BiddingConfig 竞价配置 type BiddingConfig struct { // 竞价类型 BiddingType string `bson:"biddingType" json:"biddingType"` // 竞价类型:cpm、cpc、cpa、rtb BiddingStrategy string `bson:"biddingStrategy" json:"biddingStrategy"` // 出价策略:manual、auto、target_cpa、target_roas等 // 出价范围 MinBidAmount int64 `bson:"minBidAmount" json:"minBidAmount"` // 最小出价(分) MaxBidAmount int64 `bson:"maxBidAmount" json:"maxBidAmount"` // 最大出价(分) DefaultBidAmount int64 `bson:"defaultBidAmount" json:"defaultBidAmount"` // 默认出价(分) BidIncrement int64 `bson:"bidIncrement" json:"bidIncrement"` // 出价增量(分) // 自动优化 AutoOptimization bool `bson:"autoOptimization" json:"autoOptimization"` // 是否自动优化 TargetCPA int64 `bson:"targetCPA" json:"targetCPA"` // 目标CPA(分) TargetROAS float64 `bson:"targetROAS" json:"targetROAS"` // 目标ROAS OptimizationGoal string `bson:"optimizationGoal" json:"optimizationGoal"` // 优化目标:impressions、clicks、conversions、revenue等 } // Validate 竞价配置验证 func (c *BiddingConfig) Validate() error { if c.MinBidAmount < 0 || c.MaxBidAmount < 0 || c.DefaultBidAmount < 0 { return errors.New(consts.ErrInvalidConfiguration) } if c.MinBidAmount > c.MaxBidAmount { return errors.New(consts.ErrInvalidConfiguration) } if c.TargetROAS < 0 { return errors.New(consts.ErrInvalidConfiguration) } return nil } // BudgetConfig 预算配置 type BudgetConfig struct { // 预算设置 TotalBudget int64 `bson:"totalBudget" json:"totalBudget"` // 总预算(分) DailyBudget int64 `bson:"dailyBudget" json:"dailyBudget"` // 日预算(分) // 投放节奏 PaceType string `bson:"paceType" json:"paceType"` // 投放节奏:even、accelerated、standard IsBudgetPacing bool `bson:"isBudgetPacing" json:"isBudgetPacing"` // 是否预算匀速投放 // 时间配置 StartDate int64 `bson:"startDate" json:"startDate"` // 开始投放时间 EndDate int64 `bson:"endDate" json:"endDate"` // 结束投放时间 Timezone string `bson:"timezone" json:"timezone"` // 时区 } // Validate 预算配置验证 func (c *BudgetConfig) Validate() error { if c.TotalBudget < 0 || c.DailyBudget < 0 { return errors.New(consts.ErrInvalidConfiguration) } if c.StartDate > c.EndDate { return errors.New(consts.ErrInvalidConfiguration) } return nil } // APIConfig API配置 type APIConfig struct { // 基础配置 Endpoint string `bson:"endpoint" json:"endpoint"` // API端点 Version string `bson:"version" json:"version"` // API版本 Timeout int `bson:"timeout" json:"timeout"` // 超时时间(毫秒) RetryCount int `bson:"retryCount" json:"retryCount"` // 重试次数 // 认证配置 AuthType string `bson:"authType" json:"authType"` // 认证类型:api_key、oauth、basic AuthConfig string `bson:"authConfig" json:"authConfig"` // 认证配置(JSON字符串) // 请求配置 Headers string `bson:"headers" json:"headers"` // 请求头配置(JSON字符串) // 限流配置 RateLimit int64 `bson:"rateLimit" json:"rateLimit"` // 速率限制 } // Validate API配置验证 func (c *APIConfig) Validate() error { if c.Timeout <= 0 { return errors.New(consts.ErrInvalidConfiguration) } if c.RetryCount < 0 { return errors.New(consts.ErrInvalidConfiguration) } if c.RateLimit <= 0 { return errors.New(consts.ErrInvalidConfiguration) } return nil } // CreativeConfig 创意配置 type CreativeConfig struct { // 轮播设置 CreativeRotation string `bson:"creativeRotation" json:"creativeRotation"` // 创意轮播方式:optimize、even、random SelectedCreatives []string `bson:"selectedCreatives" json:"selectedCreatives"` // 选中的创意列表 ExcludedCreatives []string `bson:"excludedCreatives" json:"excludedCreatives"` // 排除的创意列表 // 技术要求 MaxFileSize int64 `bson:"maxFileSize" json:"maxFileSize"` // 最大文件大小(bytes) MaxDuration int64 `bson:"maxDuration" json:"maxDuration"` // 最大时长(秒) // 支持的格式 SupportedFormats []string `bson:"supportedFormats" json:"supportedFormats"` // 支持的格式 SupportedSizes []string `bson:"supportedSizes" json:"supportedSizes"` // 支持的尺寸 } // Validate 创意配置验证 func (c *CreativeConfig) Validate() error { if c.MaxFileSize <= 0 { return errors.New(consts.ErrInvalidConfiguration) } if c.MaxDuration <= 0 { return errors.New(consts.ErrInvalidConfiguration) } return nil } // PaymentConfig 支付配置 type PaymentConfig struct { // 计费模式 BillingModel string `bson:"billingModel" json:"billingModel"` // 计费模式:CPC、CPM、CPA等 CommissionRate float64 `bson:"commissionRate" json:"commissionRate"` // 佣金比例 MinimumBudget int64 `bson:"minimumBudget" json:"minimumBudget"` // 最低预算(分) // 结算配置 SettlementCycle string `bson:"settlementCycle" json:"settlementCycle"` // 结算周期:daily、weekly、monthly PaymentTerms string `bson:"paymentTerms" json:"paymentTerms"` // 支付条款 Currency string `bson:"currency" json:"currency"` // 货币单位 // 收入分成 RevShareRate float64 `bson:"revShareRate" json:"revShareRate"` // 收入分成比例(0-1) MinPayment int64 `bson:"minPayment" json:"minPayment"` // 最小支付金额(分) TaxInclusive bool `bson:"taxInclusive" json:"taxInclusive"` // 是否含税 } // Validate 支付配置验证 func (c *PaymentConfig) Validate() error { if c.CommissionRate < 0 || c.CommissionRate > 1 { return errors.New(consts.ErrInvalidConfiguration) } if c.RevShareRate < 0 || c.RevShareRate > 1 { return errors.New(consts.ErrInvalidConfiguration) } if c.MinimumBudget < 0 { return errors.New(consts.ErrInvalidConfiguration) } if c.MinPayment < 0 { return errors.New(consts.ErrInvalidConfiguration) } return nil } // FrequencyCapConfig 频次控制配置 type FrequencyCapConfig struct { // 频次限制 Impressions int `bson:"impressions" json:"impressions"` // 展示次数 TimeWindow int `bson:"timeWindow" json:"timeWindow"` // 时间窗口(小时) PerUser int `bson:"perUser" json:"perUser"` // 每用户频次 PerHour int `bson:"perHour" json:"perHour"` // 每小时频次 PerDay int `bson:"perDay" json:"perDay"` // 每日频次 // 频次控制规则 CapType string `bson:"capType" json:"capType"` // 频次类型:lifetime、daily、hourly CapScope string `bson:"capScope" json:"capScope"` // 频次范围:user、device、ip ResetRule string `bson:"resetRule" json:"resetRule"` // 重置规则:daily、weekly、monthly } // RestrictionConfig 限制配置 type RestrictionConfig struct { // 年龄限制 AgeRestriction bool `bson:"ageRestriction" json:"ageRestriction"` // 年龄限制 MinAge int `bson:"minAge" json:"minAge"` // 最小年龄 MaxAge int `bson:"maxAge" json:"maxAge"` // 最大年龄 // 地域限制 GeoRestrictions []string `bson:"geoRestrictions" json:"geoRestrictions"` // 地域限制 // 设备限制 DeviceRestrictions []string `bson:"deviceRestrictions" json:"deviceRestrictions"` // 设备限制 // 分类限制 CategoryRestrictions []string `bson:"categoryRestrictions" json:"categoryRestrictions"` // 分类限制 // 内容限制 ContentRestrictions []string `bson:"contentRestrictions" json:"contentRestrictions"` // 内容限制 // 品牌安全 BrandSafety bool `bson:"brandSafety" json:"brandSafety"` // 品牌安全 BlockedCategories []string `bson:"blockedCategories" json:"blockedCategories"` // 阻止的分类 AllowedCategories []string `bson:"allowedCategories" json:"allowedCategories"` // 允许的分类 ExcludedKeywords []string `bson:"excludedKeywords" json:"excludedKeywords"` // 排除的关键词 }