实现套餐生效条件覆盖与购买快照

This commit is contained in:
2026-07-22 20:51:12 +09:00
parent c7f8b4c702
commit 9818537239
30 changed files with 1092 additions and 149 deletions

View File

@@ -1,6 +1,9 @@
package admin
import (
"strconv"
"github.com/bytedance/sonic"
"github.com/gofiber/fiber/v2"
"github.com/break/junhong_cmp_fiber/internal/model/dto"
@@ -23,10 +26,40 @@ func (h *ShopPackageBatchAllocationHandler) BatchAllocate(c *fiber.Ctx) error {
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
req.ExpiryBaseOverrideSet = hasJSONField(c.Body(), "expiry_base_override")
if err := h.service.BatchAllocate(c.UserContext(), &req); err != nil {
result, err := h.service.BatchAllocate(c.UserContext(), &req)
if err != nil {
return err
}
return response.Success(c, nil)
return response.Success(c, result)
}
// UpdateExpiryBase 修改套餐分配生效条件覆盖。
// PATCH /api/admin/shop-package-allocations/:id/expiry-base
func (h *ShopPackageBatchAllocationHandler) UpdateExpiryBase(c *fiber.Ctx) error {
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
if err != nil {
return errors.New(errors.CodeInvalidParam)
}
var req dto.UpdateAllocationExpiryBaseRequest
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam)
}
req.ExpiryBaseOverrideSet = hasJSONField(c.Body(), "expiry_base_override")
result, err := h.service.UpdateExpiryBase(c.UserContext(), uint(id), &req)
if err != nil {
return err
}
return response.Success(c, result)
}
func hasJSONField(body []byte, field string) bool {
var object map[string]any
if err := sonic.Unmarshal(body, &object); err != nil {
return false
}
_, ok := object[field]
return ok
}

View File

@@ -28,6 +28,7 @@ func (h *ShopSeriesGrantHandler) Create(c *fiber.Ctx) error {
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
req.ExpiryBaseOverrideSet = hasJSONField(c.Body(), "expiry_base_override")
result, err := h.service.Create(c.UserContext(), &req)
if err != nil {
@@ -83,7 +84,6 @@ func (h *ShopSeriesGrantHandler) Update(c *fiber.Ctx) error {
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
result, err := h.service.Update(c.UserContext(), uint(id), &req)
if err != nil {
return err
@@ -105,6 +105,7 @@ func (h *ShopSeriesGrantHandler) ManagePackages(c *fiber.Ctx) error {
if err := c.BodyParser(&req); err != nil {
return errors.New(errors.CodeInvalidParam, "请求参数解析失败")
}
req.ExpiryBaseOverrideSet = hasJSONField(c.Body(), "expiry_base_override")
result, err := h.service.ManagePackages(c.UserContext(), uint(id), &req)
if err != nil {