Files
cid/model/config/config.go
2025-12-19 10:52:14 +08:00

232 lines
8.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"` // 排除的关键词
}