feat: 添加代理获取应用详情和卡类列表API

- 添加 GET /agent/apps/:id 接口
- 返回代理有权使用的卡类列表及其价格

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 23:58:34 +08:00
parent 121d8f77db
commit e63753a853
+61
View File
@@ -14,6 +14,7 @@ import (
func SetupAgentRoutes(r *gin.RouterGroup) {
r.GET("/stats", handleGetStats)
r.GET("/apps", handleGetApps)
r.GET("/apps/:id", handleGetAppDetail)
r.GET("/cards", handleGetCards)
r.POST("/cards/generate", handleGenerateCards)
r.GET("/users", handleGetUsers)
@@ -89,6 +90,66 @@ func handleGetApps(c *gin.Context) {
})
}
func handleGetAppDetail(c *gin.Context) {
userID := c.GetUint("user_id")
appID := c.Param("id")
// 检查代理是否有该应用的授权
var agentApp model.AgentApplication
if err := database.DB.Where("agent_id = ? AND application_id = ?", userID, appID).Preload("Application").First(&agentApp).Error; err != nil {
response.Error(c, 404, "应用不存在或无权访问")
return
}
// 获取该应用可用的卡类
var cardTypes []model.CardType
if err := database.DB.Where("application_id = ?", appID).Find(&cardTypes).Error; err != nil {
response.Error(c, 500, "获取卡类列表失败")
return
}
// 获取代理对该应用的卡类权限和价格
var agentCardTypes []model.AgentApplicationCardType
database.DB.Where("agent_application_id = ?", agentApp.ID).Find(&agentCardTypes)
// 构建卡类列表,包含代理权限信息
cardTypesList := make([]gin.H, 0)
for _, ct := range cardTypes {
// 查找代理是否有该卡类的权限
var agentPrice float64
var canGenerate bool
for _, act := range agentCardTypes {
if act.CardTypeID == ct.ID {
agentPrice = act.Price
canGenerate = act.CanGenerate
break
}
}
// 只返回代理有权限的卡类
if canGenerate {
cardTypesList = append(cardTypesList, gin.H{
"id": ct.ID,
"name": ct.Name,
"billing_type": ct.RechargeType,
"price": agentPrice,
"value": ct.Value,
"duration_days": ct.Value,
})
}
}
response.Success(c, gin.H{
"app": gin.H{
"id": agentApp.Application.ID,
"name": agentApp.Application.Name,
"description": agentApp.Application.Description,
"status": agentApp.Application.Status,
},
"cardTypes": cardTypesList,
})
}
func handleGetCards(c *gin.Context) {
userID := c.GetUint("user_id")