Files
cid/service/ad_source_service.go

108 lines
2.7 KiB
Go
Raw Normal View History

2025-12-06 10:38:48 +08:00
package service
import (
2025-12-09 16:10:45 +08:00
"cid/dao"
2025-12-19 10:20:30 +08:00
"cid/model/config"
2025-12-09 16:10:45 +08:00
"cid/model/dto"
"cid/model/entity"
2025-12-06 10:38:48 +08:00
"context"
2025-12-19 10:20:30 +08:00
2025-12-06 10:38:48 +08:00
"github.com/gogf/gf/v2/errors/gerror"
)
type adSource struct{}
2025-12-06 10:38:48 +08:00
// AdSource 广告源服务
var AdSource = new(adSource)
2025-12-06 10:38:48 +08:00
// GetAvailableSources 获取可用的广告源列表
func (s *adSource) GetAvailableSources(ctx context.Context) (list []*entity.AdSource, err error) {
2025-12-06 10:38:48 +08:00
return dao.AdSource.GetAvailableSources(ctx)
}
// GetSourcesByProvider 根据提供商获取广告源
func (s *adSource) GetSourcesByProvider(ctx context.Context, provider string) (list []*entity.AdSource, err error) {
2025-12-06 10:38:48 +08:00
return dao.AdSource.GetSourcesByProvider(ctx, provider)
}
// CreateAdSource 创建广告源
func (s *adSource) CreateAdSource(ctx context.Context, req *dto.CreateAdSourceReq) (id string, err error) {
2025-12-06 10:38:48 +08:00
// 检查广告源名称是否已存在
existingSource, err := dao.AdSource.GetByName(ctx, req.Name)
if err != nil {
2025-12-10 15:41:52 +08:00
return "", err
2025-12-06 10:38:48 +08:00
}
if existingSource != nil {
2025-12-10 15:41:52 +08:00
return "", gerror.New("广告源名称已存在")
2025-12-06 10:38:48 +08:00
}
adSource := &entity.AdSource{
2025-12-19 09:42:39 +08:00
Name: req.Name,
Code: req.Code,
Provider: req.Provider,
Type: req.Type,
2025-12-19 10:20:30 +08:00
APIConfig: config.APIConfig{
2025-12-19 09:42:39 +08:00
Endpoint: req.APIEndpoint,
},
2025-12-06 10:38:48 +08:00
}
2025-12-19 09:42:39 +08:00
// 设置状态
adSource.Status = "active" // 默认状态
2025-12-06 10:38:48 +08:00
return dao.AdSource.Create(ctx, adSource)
}
// UpdateAdSource 更新广告源
func (s *adSource) UpdateAdSource(ctx context.Context, id string, req *dto.UpdateAdSourceReq) (affected int64, err error) {
2025-12-06 10:38:48 +08:00
// 检查广告源是否存在
existingSource, err := dao.AdSource.GetByID(ctx, id)
if err != nil {
return 0, err
}
if existingSource == nil {
return 0, gerror.New("广告源不存在")
}
// 如果更新名称,检查是否与其他广告源冲突
if req.Name != "" && req.Name != existingSource.Name {
conflictSource, err := dao.AdSource.GetByName(ctx, req.Name)
if err != nil {
return 0, err
}
if conflictSource != nil {
return 0, gerror.New("广告源名称已存在")
}
}
// 构建更新数据
updateData := &entity.AdSource{}
if req.Name != "" {
updateData.Name = req.Name
}
if req.APIEndpoint != "" {
2025-12-19 09:42:39 +08:00
updateData.APIConfig.Endpoint = req.APIEndpoint
2025-12-06 10:38:48 +08:00
}
return dao.AdSource.UpdateFields(ctx, id, updateData)
}
// DeleteAdSource 删除广告源
func (s *adSource) DeleteAdSource(ctx context.Context, id string) (affected int64, err error) {
2025-12-06 10:38:48 +08:00
// 检查广告源是否存在
existingSource, err := dao.AdSource.GetByID(ctx, id)
if err != nil {
return 0, err
}
if existingSource == nil {
return 0, gerror.New("广告源不存在")
}
return dao.AdSource.Delete(ctx, id)
}
// GetAdSourceByID 根据ID获取广告源
func (s *adSource) GetAdSourceByID(ctx context.Context, id string) (adSource *entity.AdSource, err error) {
2025-12-06 10:38:48 +08:00
return dao.AdSource.GetByID(ctx, id)
}