refactor(ECR-004): Synastry 再拆、Scale 测、Membership 守卫、OpenAPI 与 CI
ci / h5 (push) Canceled after 0s
ci / api (push) Canceled after 0s
ci / ess-docs (push) Canceled after 0s

压合盘贴线文件;补选答单测与 nil 守卫;对齐关键 OpenAPI schemas;加 GitHub Actions 门禁。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-05 21:06:14 +08:00
co-authored by Cursor
parent 67701d1f7b
commit 7034c92de7
22 changed files with 1317 additions and 543 deletions
+23 -3
View File
@@ -19,6 +19,14 @@ type ReportHandler struct {
Membership *membership.Service
}
func (h *ReportHandler) requireMembership(c *gin.Context) (*membership.Service, bool) {
if h.Membership == nil {
response.Fail(c, http.StatusInternalServerError, 50000, "membership service unavailable")
return nil, false
}
return h.Membership, true
}
// Register mounts report/commerce routes.
func (h *ReportHandler) Register(rg *gin.RouterGroup) {
rg.POST("/reports/portrait", h.CreatePortrait)
@@ -202,7 +210,11 @@ func (h *ReportHandler) GetMembership(c *gin.Context) {
response.Fail(c, http.StatusUnauthorized, 40100, "unauthorized")
return
}
me, err := h.Membership.Get(c.Request.Context(), userID)
msvc, ok := h.requireMembership(c)
if !ok {
return
}
me, err := msvc.Get(c.Request.Context(), userID)
if err != nil {
response.Fail(c, http.StatusInternalServerError, 50000, err.Error())
return
@@ -217,6 +229,10 @@ func (h *ReportHandler) CreateOrder(c *gin.Context) {
response.Fail(c, http.StatusUnauthorized, 40100, "unauthorized")
return
}
msvc, ok := h.requireMembership(c)
if !ok {
return
}
var req struct {
Kind string `json:"kind" binding:"required"`
Plan string `json:"plan"`
@@ -235,7 +251,7 @@ func (h *ReportHandler) CreateOrder(c *gin.Context) {
}
rid = &id
}
oid, err := h.Membership.CreateOrder(c.Request.Context(), userID, membership.CreateOrderInput{
oid, err := msvc.CreateOrder(c.Request.Context(), userID, membership.CreateOrderInput{
Kind: req.Kind, Plan: req.Plan, ReportID: rid,
})
if err != nil {
@@ -252,12 +268,16 @@ func (h *ReportHandler) PayMock(c *gin.Context) {
response.Fail(c, http.StatusUnauthorized, 40100, "unauthorized")
return
}
msvc, ok := h.requireMembership(c)
if !ok {
return
}
oid, err := uuid.Parse(c.Param("id"))
if err != nil {
response.Fail(c, http.StatusBadRequest, 10000, "invalid id")
return
}
if err := h.Membership.PayMock(c.Request.Context(), userID, oid); err != nil {
if err := msvc.PayMock(c.Request.Context(), userID, oid); err != nil {
response.Fail(c, http.StatusBadRequest, 30004, err.Error())
return
}