gomod引用

This commit is contained in:
2025-12-19 10:52:14 +08:00
parent dcfd6fec21
commit 190e01395b
4 changed files with 241 additions and 143 deletions

View File

@@ -1,5 +1,7 @@
package consts package consts
import "errors"
// 广告管理错误码 // 广告管理错误码
const ( const (
ErrAdNotFound = 1001 // 广告不存在 ErrAdNotFound = 1001 // 广告不存在
@@ -32,3 +34,23 @@ const (
ErrReportExpired = 4003 // 报表已过期 ErrReportExpired = 4003 // 报表已过期
ErrReportInvalidFormat = 4004 // 报表格式无效 ErrReportInvalidFormat = 4004 // 报表格式无效
) )
// 配置验证错误
var (
ErrInvalidPriority = errors.New("优先级必须为非负数")
ErrInvalidWeight = errors.New("权重必须在0到1之间")
ErrInvalidBidAmount = errors.New("出价金额必须为非负数")
ErrInvalidBidRange = errors.New("最小出价不能大于最大出价")
ErrInvalidROAS = errors.New("ROAS必须为非负数")
ErrInvalidBudget = errors.New("预算金额必须为非负数")
ErrInvalidTimeRange = errors.New("开始时间不能大于结束时间")
ErrInvalidTimeout = errors.New("超时时间必须为正数")
ErrInvalidRetryCount = errors.New("重试次数必须为非负数")
ErrInvalidFileSize = errors.New("文件大小必须为正数")
ErrInvalidDuration = errors.New("时长必须为正数")
ErrInvalidRateLimit = errors.New("速率限制必须为正数")
ErrInvalidCommission = errors.New("佣金比例必须在0到1之间")
ErrInvalidRevShare = errors.New("收入分成比例必须在0到1之间")
ErrInvalidAge = errors.New("年龄必须为正数且最小年龄不能大于最大年龄")
ErrInvalidFrequency = errors.New("频次限制必须为非负数")
)

View File

@@ -1,5 +1,10 @@
package config package config
import (
"cid/consts"
"errors"
)
// BaseConfig 基础配置结构 // BaseConfig 基础配置结构
type BaseConfig struct { type BaseConfig struct {
// 优先级和权重 // 优先级和权重
@@ -18,6 +23,17 @@ type BaseConfig struct {
Remark string `bson:"remark" json:"remark"` // 备注 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 竞价配置 // BiddingConfig 竞价配置
type BiddingConfig struct { type BiddingConfig struct {
// 竞价类型 // 竞价类型
@@ -34,17 +50,28 @@ type BiddingConfig struct {
AutoOptimization bool `bson:"autoOptimization" json:"autoOptimization"` // 是否自动优化 AutoOptimization bool `bson:"autoOptimization" json:"autoOptimization"` // 是否自动优化
TargetCPA int64 `bson:"targetCPA" json:"targetCPA"` // 目标CPA(分) TargetCPA int64 `bson:"targetCPA" json:"targetCPA"` // 目标CPA(分)
TargetROAS float64 `bson:"targetROAS" json:"targetROAS"` // 目标ROAS TargetROAS float64 `bson:"targetROAS" json:"targetROAS"` // 目标ROAS
ConversionValue int64 `bson:"conversionValue" json:"conversionValue"` // 转化价值
AttributionWindow string `bson:"attributionWindow" json:"attributionWindow"` // 归因窗口
OptimizationGoal string `bson:"optimizationGoal" json:"optimizationGoal"` // 优化目标impressions、clicks、conversions、revenue等 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 预算配置 // BudgetConfig 预算配置
type BudgetConfig struct { type BudgetConfig struct {
// 预算设置 // 预算设置
TotalBudget int64 `bson:"totalBudget" json:"totalBudget"` // 总预算(分) TotalBudget int64 `bson:"totalBudget" json:"totalBudget"` // 总预算(分)
DailyBudget int64 `bson:"dailyBudget" json:"dailyBudget"` // 日预算(分) DailyBudget int64 `bson:"dailyBudget" json:"dailyBudget"` // 日预算(分)
HourlyBudget int64 `bson:"hourlyBudget" json:"hourlyBudget"` // 小时预算(分)
// 投放节奏 // 投放节奏
PaceType string `bson:"paceType" json:"paceType"` // 投放节奏even、accelerated、standard PaceType string `bson:"paceType" json:"paceType"` // 投放节奏even、accelerated、standard
@@ -53,10 +80,18 @@ type BudgetConfig struct {
// 时间配置 // 时间配置
StartDate int64 `bson:"startDate" json:"startDate"` // 开始投放时间 StartDate int64 `bson:"startDate" json:"startDate"` // 开始投放时间
EndDate int64 `bson:"endDate" json:"endDate"` // 结束投放时间 EndDate int64 `bson:"endDate" json:"endDate"` // 结束投放时间
TimeSlots []string `bson:"timeSlots" json:"timeSlots"` // 投放时间段
DaysOfWeek []int `bson:"daysOfWeek" json:"daysOfWeek"` // 投放日期0-60表示周日
Timezone string `bson:"timezone" json:"timezone"` // 时区 Timezone string `bson:"timezone" json:"timezone"` // 时区
IsTimeLimited bool `bson:"isTimeLimited" json:"isTimeLimited"` // 是否限时投放 }
// 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配置 // APIConfig API配置
@@ -76,7 +111,20 @@ type APIConfig struct {
// 限流配置 // 限流配置
RateLimit int64 `bson:"rateLimit" json:"rateLimit"` // 速率限制 RateLimit int64 `bson:"rateLimit" json:"rateLimit"` // 速率限制
MaxRequestsPerHour int64 `bson:"maxRequestsPerHour" json:"maxRequestsPerHour"` // 每小时最大请求数 }
// 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 创意配置 // CreativeConfig 创意配置
@@ -89,13 +137,23 @@ type CreativeConfig struct {
// 技术要求 // 技术要求
MaxFileSize int64 `bson:"maxFileSize" json:"maxFileSize"` // 最大文件大小(bytes) MaxFileSize int64 `bson:"maxFileSize" json:"maxFileSize"` // 最大文件大小(bytes)
MaxDuration int64 `bson:"maxDuration" json:"maxDuration"` // 最大时长(秒) MaxDuration int64 `bson:"maxDuration" json:"maxDuration"` // 最大时长(秒)
SupportedMimeTypes []string `bson:"supportedMimeTypes" json:"supportedMimeTypes"` // 支持的MIME类型
// 支持的格式 // 支持的格式
SupportedFormats []string `bson:"supportedFormats" json:"supportedFormats"` // 支持的格式 SupportedFormats []string `bson:"supportedFormats" json:"supportedFormats"` // 支持的格式
SupportedSizes []string `bson:"supportedSizes" json:"supportedSizes"` // 支持的尺寸 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 支付配置 // PaymentConfig 支付配置
type PaymentConfig struct { type PaymentConfig struct {
// 计费模式 // 计费模式
@@ -112,7 +170,23 @@ type PaymentConfig struct {
RevShareRate float64 `bson:"revShareRate" json:"revShareRate"` // 收入分成比例(0-1) RevShareRate float64 `bson:"revShareRate" json:"revShareRate"` // 收入分成比例(0-1)
MinPayment int64 `bson:"minPayment" json:"minPayment"` // 最小支付金额(分) MinPayment int64 `bson:"minPayment" json:"minPayment"` // 最小支付金额(分)
TaxInclusive bool `bson:"taxInclusive" json:"taxInclusive"` // 是否含税 TaxInclusive bool `bson:"taxInclusive" json:"taxInclusive"` // 是否含税
EarlyPaymentDiscount float64 `bson:"earlyPaymentDiscount" json:"earlyPaymentDiscount"` // 提前付款折扣 }
// 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 频次控制配置 // FrequencyCapConfig 频次控制配置

View File

@@ -177,124 +177,9 @@ type TestAdSourceRes struct {
ResponseTime int64 `json:"responseTime"` // 响应时间(毫秒) ResponseTime int64 `json:"responseTime"` // 响应时间(毫秒)
ErrorMessage string `json:"errorMessage"` // 错误信息 ErrorMessage string `json:"errorMessage"` // 错误信息
SupportedFormats []string `json:"supportedFormats"` // 支持的广告格式 SupportedFormats []string `json:"supportedFormats"` // 支持的广告格式
QualityMetrics *AdSourceTestMetrics `json:"qualityMetrics"` // 质量指标
} }
// DeleteAdSourceRes 删除广告源响应 // DeleteAdSourceRes 删除广告源响应
type DeleteAdSourceRes struct { type DeleteAdSourceRes struct {
Success bool `json:"success"` // 删除是否成功 Success bool `json:"success"` // 删除是否成功
} }
// AdSourceTestMetrics 广告源测试质量指标
type AdSourceTestMetrics struct {
SuccessRate float64 `json:"successRate"` // 成功率
AverageResponseTime float64 `json:"averageResponseTime"` // 平均响应时间(毫秒)
FillRate float64 `json:"fillRate"` // 填充率
CTR float64 `json:"ctr"` // 点击率
}
// GetAdSourceStatisticsReq 获取广告源统计数据请求
type GetAdSourceStatisticsReq struct {
// g.Meta `path:"/adsource-statistics" method:"get" tags:"广告源管理" summary:"获取广告源统计数据" dc:"获取广告源的详细统计数据"` // 暂时注释缺少对应的controller方法
Id string `json:"id" v:"required"` // 广告源ID
StartDate int64 `json:"startDate" v:"required"` // 开始日期
EndDate int64 `json:"endDate" v:"required"` // 结束日期
Dimension string `json:"dimension"` // 统计维度day、week、month
}
type GetAdSourceStatisticsRes struct {
// 概览数据
Overview AdSourceOverviewStats `json:"overview"`
// 趋势数据
Trends []AdSourceTrendData `json:"trends"`
// 性能数据
Performance AdSourcePerformanceStats `json:"performance"`
// 错误统计
Errors []AdSourceErrorStats `json:"errors"`
}
// AdSourceOverviewStats 广告源概览统计
type AdSourceOverviewStats struct {
TotalRequests int64 `json:"totalRequests"` // 总请求数
SuccessfulRequests int64 `json:"successfulRequests"` // 成功请求数
FailedRequests int64 `json:"failedRequests"` // 失败请求数
TotalImpressions int64 `json:"totalImpressions"` // 总展示次数
TotalClicks int64 `json:"totalClicks"` // 总点击次数
TotalConversions int64 `json:"totalConversions"` // 总转化次数
TotalRevenue int64 `json:"totalRevenue"` // 总收入(分)
SuccessRate float64 `json:"successRate"` // 成功率
ErrorRate float64 `json:"errorRate"` // 错误率
CTR float64 `json:"ctr"` // 点击率
CVR float64 `json:"cvr"` // 转化率
FillRate float64 `json:"fillRate"` // 填充率
eCPM int64 `json:"ecpm"` // 有效千次展示成本(分)
eCPC int64 `json:"ecpc"` // 有效点击成本(分)
AverageResponseTime float64 `json:"averageResponseTime"` // 平均响应时间(毫秒)
Uptime float64 `json:"uptime"` // 可用性(百分比)
}
// AdSourceTrendData 广告源趋势数据
type AdSourceTrendData struct {
Date int64 `json:"date"` // 日期
Requests int64 `json:"requests"` // 请求数
Impressions int64 `json:"impressions"` // 展示次数
Clicks int64 `json:"clicks"` // 点击次数
Conversions int64 `json:"conversions"` // 转化次数
Revenue int64 `json:"revenue"` // 收入(分)
SuccessRate float64 `json:"successRate"` // 成功率
ErrorRate float64 `json:"errorRate"` // 错误率
CTR float64 `json:"ctr"` // 点击率
CVR float64 `json:"cvr"` // 转化率
FillRate float64 `json:"fillRate"` // 填充率
eCPM int64 `json:"ecpm"` // 有效千次展示成本(分)
ResponseTime float64 `json:"responseTime"` // 平均响应时间(毫秒)
}
// AdSourcePerformanceStats 广告源性能统计
type AdSourcePerformanceStats struct {
// 响应时间分布
ResponseTimeDistribution map[string]int64 `json:"responseTimeDistribution"` // 响应时间分布
// 错误类型统计
ErrorTypes map[string]int64 `json:"errorTypes"` // 错误类型统计
// 地区性能
RegionalPerformance map[string]AdSourceRegionalStats `json:"regionalPerformance"` // 地区性能
// 设备性能
DevicePerformance map[string]AdSourceDeviceStats `json:"devicePerformance"` // 设备性能
}
// AdSourceErrorStats 广告源错误统计
type AdSourceErrorStats struct {
ErrorType string `json:"errorType"` // 错误类型
Count int64 `json:"count"` // 错误次数
Percentage float64 `json:"percentage"` // 占比
LastOccurred int64 `json:"lastOccurred"` // 最后发生时间
}
// AdSourceRegionalStats 广告源地区统计
type AdSourceRegionalStats struct {
Region string `json:"region"` // 地区
Requests int64 `json:"requests"` // 请求数
Impressions int64 `json:"impressions"` // 展示次数
Clicks int64 `json:"clicks"` // 点击次数
Revenue int64 `json:"revenue"` // 收入(分)
CTR float64 `json:"ctr"` // 点击率
ResponseTime float64 `json:"responseTime"` // 平均响应时间(毫秒)
}
// AdSourceDeviceStats 广告源设备统计
type AdSourceDeviceStats struct {
Device string `json:"device"` // 设备类型
Requests int64 `json:"requests"` // 请求数
Impressions int64 `json:"impressions"` // 展示次数
Clicks int64 `json:"clicks"` // 点击次数
Revenue int64 `json:"revenue"` // 收入(分)
CTR float64 `json:"ctr"` // 点击率
ResponseTime float64 `json:"responseTime"` // 平均响应时间(毫秒)
}

View File

@@ -0,0 +1,117 @@
package dto
import "github.com/gogf/gf/v2/frame/g"
// GetAdSourceStatisticsReq 获取广告源统计数据请求
type GetAdSourceStatisticsReq struct {
g.Meta `path:"/adsource-statistics" method:"get" tags:"广告源管理" summary:"获取广告源统计数据" dc:"获取广告源的详细统计数据"`
Id string `json:"id" v:"required"` // 广告源ID
StartDate int64 `json:"startDate" v:"required"` // 开始日期
EndDate int64 `json:"endDate" v:"required"` // 结束日期
Dimension string `json:"dimension"` // 统计维度day、week、month
}
type GetAdSourceStatisticsRes struct {
// 概览数据
Overview AdSourceOverviewStats `json:"overview"`
// 趋势数据
Trends []AdSourceTrendData `json:"trends"`
// 性能数据
Performance AdSourcePerformanceStats `json:"performance"`
// 错误统计
Errors []AdSourceErrorStats `json:"errors"`
}
// AdSourceOverviewStats 广告源概览统计
type AdSourceOverviewStats struct {
TotalRequests int64 `json:"totalRequests"` // 总请求数
SuccessfulRequests int64 `json:"successfulRequests"` // 成功请求数
FailedRequests int64 `json:"failedRequests"` // 失败请求数
TotalImpressions int64 `json:"totalImpressions"` // 总展示次数
TotalClicks int64 `json:"totalClicks"` // 总点击次数
TotalConversions int64 `json:"totalConversions"` // 总转化次数
TotalRevenue int64 `json:"totalRevenue"` // 总收入(分)
SuccessRate float64 `json:"successRate"` // 成功率
ErrorRate float64 `json:"errorRate"` // 错误率
CTR float64 `json:"ctr"` // 点击率
CVR float64 `json:"cvr"` // 转化率
FillRate float64 `json:"fillRate"` // 填充率
ECPM int64 `json:"ecpm"` // 有效千次展示成本(分)
ECPC int64 `json:"ecpc"` // 有效点击成本(分)
AverageResponseTime float64 `json:"averageResponseTime"` // 平均响应时间(毫秒)
Uptime float64 `json:"uptime"` // 可用性(百分比)
}
// AdSourceTrendData 广告源趋势数据
type AdSourceTrendData struct {
Date int64 `json:"date"` // 日期
Requests int64 `json:"requests"` // 请求数
Impressions int64 `json:"impressions"` // 展示次数
Clicks int64 `json:"clicks"` // 点击次数
Conversions int64 `json:"conversions"` // 转化次数
Revenue int64 `json:"revenue"` // 收入(分)
SuccessRate float64 `json:"successRate"` // 成功率
ErrorRate float64 `json:"errorRate"` // 错误率
CTR float64 `json:"ctr"` // 点击率
CVR float64 `json:"cvr"` // 转化率
FillRate float64 `json:"fillRate"` // 填充率
ECPM int64 `json:"ecpm"` // 有效千次展示成本(分)
ResponseTime float64 `json:"responseTime"` // 平均响应时间(毫秒)
}
// AdSourcePerformanceStats 广告源性能统计
type AdSourcePerformanceStats struct {
// 响应时间分布
ResponseTimeDistribution map[string]int64 `json:"responseTimeDistribution"` // 响应时间分布
// 错误类型统计
ErrorTypes map[string]int64 `json:"errorTypes"` // 错误类型统计
// 地区性能
RegionalPerformance map[string]AdSourceRegionalStats `json:"regionalPerformance"` // 地区性能
// 设备性能
DevicePerformance map[string]AdSourceDeviceStats `json:"devicePerformance"` // 设备性能
}
// AdSourceErrorStats 广告源错误统计
type AdSourceErrorStats struct {
ErrorType string `json:"errorType"` // 错误类型
Count int64 `json:"count"` // 错误次数
Percentage float64 `json:"percentage"` // 占比
LastOccurred int64 `json:"lastOccurred"` // 最后发生时间
}
// AdSourceRegionalStats 广告源地区统计
type AdSourceRegionalStats struct {
Region string `json:"region"` // 地区
Requests int64 `json:"requests"` // 请求数
Impressions int64 `json:"impressions"` // 展示次数
Clicks int64 `json:"clicks"` // 点击次数
Revenue int64 `json:"revenue"` // 收入(分)
CTR float64 `json:"ctr"` // 点击率
ResponseTime float64 `json:"responseTime"` // 平均响应时间(毫秒)
}
// AdSourceDeviceStats 广告源设备统计
type AdSourceDeviceStats struct {
Device string `json:"device"` // 设备类型
Requests int64 `json:"requests"` // 请求数
Impressions int64 `json:"impressions"` // 展示次数
Clicks int64 `json:"clicks"` // 点击次数
Revenue int64 `json:"revenue"` // 收入(分)
CTR float64 `json:"ctr"` // 点击率
ResponseTime float64 `json:"responseTime"` // 平均响应时间(毫秒)
}
// AdSourceTestMetrics 广告源测试质量指标
type AdSourceTestMetrics struct {
SuccessRate float64 `json:"successRate"` // 成功率
AverageResponseTime float64 `json:"averageResponseTime"` // 平均响应时间(毫秒)
FillRate float64 `json:"fillRate"` // 填充率
CTR float64 `json:"ctr"` // 点击率
}