From 453ad18303d812c1e9096d178c9042366486c200 Mon Sep 17 00:00:00 2001 From: Chang lue Tsen Date: Mon, 29 Sep 2025 13:12:37 +0900 Subject: [PATCH] feat(node): add PreViewNodeMultiplier endpoint and response structure --- apis/admin/system.api | 8 +++++ initialize/node.go | 1 - .../system/preViewNodeMultiplierHandler.go | 18 ++++++++++ internal/handler/routes.go | 3 ++ .../system/preViewNodeMultiplierLogic.go | 33 +++++++++++++++++++ internal/types/types.go | 5 +++ 6 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 internal/handler/admin/system/preViewNodeMultiplierHandler.go create mode 100644 internal/logic/admin/system/preViewNodeMultiplierLogic.go diff --git a/apis/admin/system.api b/apis/admin/system.api index 21d2c73..a300cda 100644 --- a/apis/admin/system.api +++ b/apis/admin/system.api @@ -18,6 +18,10 @@ type ( SetNodeMultiplierRequest { Periods []TimePeriod `json:"periods"` } + PreViewNodeMultiplierResponse { + CurrentTime string `json:"current_time"` + Ratio float32 `json:"ratio"` + } ) @server ( @@ -117,5 +121,9 @@ service ppanel { @doc "Update Verify Code Config" @handler UpdateVerifyCodeConfig put /verify_code_config (VerifyCodeConfig) + + @doc "PreView Node Multiplier" + @handler PreViewNodeMultiplier + get /node_multiplier/preview returns (PreViewNodeMultiplierResponse) } diff --git a/initialize/node.go b/initialize/node.go index 8fde566..51dce08 100644 --- a/initialize/node.go +++ b/initialize/node.go @@ -69,7 +69,6 @@ func Node(ctx *svc.ServiceContext) { nodeMultiplierData, err := ctx.SystemModel.FindNodeMultiplierConfig(context.Background()) if err != nil { - logger.Error("Get Node Multiplier Config Error: ", logger.Field("error", err.Error())) return } diff --git a/internal/handler/admin/system/preViewNodeMultiplierHandler.go b/internal/handler/admin/system/preViewNodeMultiplierHandler.go new file mode 100644 index 0000000..8ef2089 --- /dev/null +++ b/internal/handler/admin/system/preViewNodeMultiplierHandler.go @@ -0,0 +1,18 @@ +package system + +import ( + "github.com/gin-gonic/gin" + "github.com/perfect-panel/server/internal/logic/admin/system" + "github.com/perfect-panel/server/internal/svc" + "github.com/perfect-panel/server/pkg/result" +) + +// PreView Node Multiplier +func PreViewNodeMultiplierHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) { + return func(c *gin.Context) { + + l := system.NewPreViewNodeMultiplierLogic(c.Request.Context(), svcCtx) + resp, err := l.PreViewNodeMultiplier() + result.HttpResult(c, resp, err) + } +} diff --git a/internal/handler/routes.go b/internal/handler/routes.go index 860b885..e97fddd 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -414,6 +414,9 @@ func RegisterHandlers(router *gin.Engine, serverCtx *svc.ServiceContext) { // Update node config adminSystemGroupRouter.PUT("/node_config", adminSystem.UpdateNodeConfigHandler(serverCtx)) + // PreView Node Multiplier + adminSystemGroupRouter.GET("/node_multiplier/preview", adminSystem.PreViewNodeMultiplierHandler(serverCtx)) + // get Privacy Policy Config adminSystemGroupRouter.GET("/privacy", adminSystem.GetPrivacyPolicyConfigHandler(serverCtx)) diff --git a/internal/logic/admin/system/preViewNodeMultiplierLogic.go b/internal/logic/admin/system/preViewNodeMultiplierLogic.go new file mode 100644 index 0000000..58d1dd5 --- /dev/null +++ b/internal/logic/admin/system/preViewNodeMultiplierLogic.go @@ -0,0 +1,33 @@ +package system + +import ( + "context" + "github.com/perfect-panel/server/internal/svc" + "github.com/perfect-panel/server/internal/types" + "github.com/perfect-panel/server/pkg/logger" + "time" +) + +type PreViewNodeMultiplierLogic struct { + logger.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +// PreView Node Multiplier +func NewPreViewNodeMultiplierLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PreViewNodeMultiplierLogic { + return &PreViewNodeMultiplierLogic{ + Logger: logger.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *PreViewNodeMultiplierLogic) PreViewNodeMultiplier() (resp *types.PreViewNodeMultiplierResponse, err error) { + now := time.Now() + ratio := l.svcCtx.NodeMultiplierManager.GetMultiplier(now) + return &types.PreViewNodeMultiplierResponse{ + Ratio: ratio, + CurrentTime: now.Format("2006-01-02 15:04:05"), + }, nil +} diff --git a/internal/types/types.go b/internal/types/types.go index ed515d8..87a4887 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -1429,6 +1429,11 @@ type PreUnsubscribeResponse struct { DeductionAmount int64 `json:"deduction_amount"` } +type PreViewNodeMultiplierResponse struct { + CurrentTime string `json:"current_time"` + Ratio float32 `json:"ratio"` +} + type PreviewSubscribeTemplateRequest struct { Id int64 `form:"id"` }