Files
cid/controller/application_controller.go
2025-12-18 17:51:33 +08:00

160 lines
4.5 KiB
Go
Raw Permalink 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 controller
import (
"context"
"strconv"
"cid/model/dto"
"cid/service"
)
var Application = new(application)
type application struct{}
// CreateApplication 创建应用
func (c *application) CreateApplication(ctx context.Context, req *dto.CreateApplicationReq) (res *dto.CreateApplicationRes, err error) {
idStr, err := service.Application.CreateApplication(ctx, req)
if err != nil {
return nil, err
}
// 将字符串ID转换为int64
id, _ := strconv.ParseInt(idStr, 10, 64)
return &dto.CreateApplicationRes{
ID: id,
}, nil
}
// UpdateApplication 更新应用
func (c *application) UpdateApplication(ctx context.Context, req *dto.UpdateApplicationReq) (res *dto.UpdateApplicationRes, err error) {
affected, err := service.Application.UpdateApplication(ctx, strconv.FormatInt(req.ID, 10), req)
if err != nil {
return nil, err
}
return &dto.UpdateApplicationRes{
Success: affected > 0,
}, nil
}
// GetApplication 获取应用信息
func (c *application) GetApplication(ctx context.Context, req *dto.GetApplicationReq) (res *dto.GetApplicationRes, err error) {
app, err := service.Application.GetApplicationByID(ctx, strconv.FormatInt(req.ID, 10))
if err != nil {
return nil, err
}
// 将ObjectId的十六进制字符串转换为int64如果失败则使用0
id, _ := strconv.ParseInt(app.Id.Hex(), 16, 64)
// Application实体中没有TenantId字段暂时设为0
tenantID := int64(0)
return &dto.GetApplicationRes{
ID: id,
TenantID: tenantID,
Name: app.Name,
Code: app.Code,
Description: app.Description,
Platform: app.Platform,
PackageName: app.PackageName,
AppStoreURL: app.AppStoreURL,
Categories: app.Categories,
Tags: app.Tags,
AdTypes: app.AdTypes,
Status: app.Status,
AppKey: app.AppKey,
CallbackURL: app.CallbackURL,
CreatedAt: app.CreatedAt.Unix(),
UpdatedAt: app.UpdatedAt.Unix(),
}, nil
}
// ListApplications 获取应用列表
func (c *application) ListApplications(ctx context.Context, req *dto.ListApplicationsReq) (res *dto.ListApplicationsRes, err error) {
list, total, err := service.Application.GetApplicationsByTenant(ctx, strconv.FormatInt(req.TenantID, 10), req.Platform, req.Status, req.Page, req.Size)
if err != nil {
return nil, err
}
// 转换为响应格式
appItems := make([]dto.ApplicationItem, len(list))
for i, app := range list {
id, _ := strconv.ParseInt(app.Id.Hex(), 16, 64)
appItems[i] = dto.ApplicationItem{
ID: id,
Name: app.Name,
Code: app.Code,
Description: app.Description,
Platform: app.Platform,
PackageName: app.PackageName,
Categories: app.Categories,
Tags: app.Tags,
AdTypes: app.AdTypes,
Status: app.Status,
DailyRequests: app.DailyRequests,
MonthlyRequests: app.MonthlyRequests,
CreatedAt: app.CreatedAt.Unix(),
}
}
return &dto.ListApplicationsRes{
List: appItems,
Total: total,
Page: req.Page,
Size: req.Size,
}, nil
}
// ResetAPIKeys 重置API密钥
func (c *application) ResetAPIKeys(ctx context.Context, req *dto.ResetAPIKeysReq) (res *dto.ResetAPIKeysRes, err error) {
appKey, appSecret, err := service.Application.ResetAPIKeys(ctx, strconv.FormatInt(req.ID, 10))
if err != nil {
return nil, err
}
return &dto.ResetAPIKeysRes{
AppKey: appKey,
AppSecret: appSecret,
}, nil
}
// ValidateApplication 验证应用权限
func (c *application) ValidateApplication(ctx context.Context, req *dto.ValidateApplicationReq) (res *dto.ValidateApplicationRes, err error) {
app, err := service.Application.ValidateApplication(ctx, req.AppKey, req.AppSecret)
if err != nil {
return &dto.ValidateApplicationRes{
Valid: false,
}, nil
}
// 将ObjectId的十六进制字符串转换为int64如果失败则使用0
appID, _ := strconv.ParseInt(app.Id.Hex(), 16, 64)
// Application实体中没有TenantId字段暂时设为0
tenantID := int64(0)
tentantName := ""
return &dto.ValidateApplicationRes{
Valid: true,
AppID: appID,
AppName: app.Name,
TenantID: tenantID,
TenantName: tentantName,
Platform: app.Platform,
AdTypes: app.AdTypes,
}, nil
}
// DeleteApplication 删除应用
func (c *application) DeleteApplication(ctx context.Context, req *dto.DeleteApplicationReq) (res *dto.DeleteApplicationRes, err error) {
affected, err := service.Application.DeleteApplication(ctx, strconv.FormatInt(req.ID, 10))
if err != nil {
return nil, err
}
return &dto.DeleteApplicationRes{
Success: affected > 0,
}, nil
}