package routes import ( "github.com/gofiber/fiber/v2" apphandler "github.com/break/junhong_cmp_fiber/internal/handler/app" "github.com/break/junhong_cmp_fiber/internal/model/dto" "github.com/break/junhong_cmp_fiber/pkg/openapi" ) // registerPersonalPopupRoutes 注册当前个人客户的 H5 弹窗候选与风险换卡地址路由。 // 候选查询是产品契约中的带副作用 GET:命中时会创建或复用未读通知,客户端随后走既有已读接口。 func registerPersonalPopupRoutes(router fiber.Router, handler *apphandler.ClientPopupHandler, doc *openapi.Generator, basePath string) { Register(router, doc, basePath, "GET", "/popup-candidates", handler.GetCandidates, RouteSpec{ Summary: "查询当前页面的弹窗候选", Description: "按当前页面与当前资产实时匹配弹窗:先判风险换卡资格,命中只返回风险候选;未命中再按时间、启停、页面、店铺、设备类型、卡类型范围与频率匹配运营配置,只返回优先级最高一条。" + "该查询会创建或复用个人站内通知并保持未读(不预生成通知),关闭或稍后处理请用返回的 notification_id 调用 PUT /api/c/v1/notifications/{id}/read。" + "资产不属于当前客户或资产不存在统一返回资源不可见。响应只返回受控动作,不含任何 URL 或前端路由。", Tags: []string{"个人客户 - 弹窗"}, Auth: true, Input: &dto.PopupCandidateRequest{}, Output: &dto.PopupCandidateResponse{}, }) Register(router, doc, basePath, "POST", "/risk-exchanges/:asset_id/address", handler.SubmitRiskAddress, RouteSpec{ Summary: "提交风险换卡收货地址", Description: "当前个人客户为本人风险停机资产提交收货人姓名、手机号与完整地址,幂等创建关联旧资产的物流换货单。" + "首次地址锁定,重复或并发提交返回首次创建的换货单与首次地址且不覆盖;换货单创建即待发货,不预设业务数据迁移。" + "资产不属于当前客户或资产不存在统一返回资源不可见。", Tags: []string{"个人客户 - 弹窗"}, Auth: true, Input: &dto.ClientRiskExchangeAddressParams{}, Output: &dto.ClientRiskExchangeResponse{}, }) }