feat(log): add endpoints for retrieving and resetting subscribe traffic logs

This commit is contained in:
Chang lue Tsen 2025-08-21 11:02:11 -04:00
parent ec4e95451b
commit 062533412a
9 changed files with 246 additions and 0 deletions

View File

@ -164,6 +164,15 @@ type (
List []UserLoginLog `json:"list"` List []UserLoginLog `json:"list"`
Total int64 `json:"total"` Total int64 `json:"total"`
} }
GetUserSubscribeResetTrafficLogsRequest {
Page int `form:"page"`
Size int `form:"size"`
UserSubscribeId int64 `form:"user_subscribe_id"`
}
GetUserSubscribeResetTrafficLogsResponse {
List []ResetSubscribeTrafficLog `json:"list"`
Total int64 `json:"total"`
}
DeleteUserSubscribeRequest { DeleteUserSubscribeRequest {
UserSubscribeId int64 `json:"user_subscribe_id"` UserSubscribeId int64 `json:"user_subscribe_id"`
} }
@ -251,6 +260,10 @@ service ppanel {
@handler GetUserSubscribeLogs @handler GetUserSubscribeLogs
get /subscribe/logs (GetUserSubscribeLogsRequest) returns (GetUserSubscribeLogsResponse) get /subscribe/logs (GetUserSubscribeLogsRequest) returns (GetUserSubscribeLogsResponse)
@doc "Get user subcribe reset traffic logs"
@handler GetUserSubscribeResetTrafficLogs
get /subscribe/reset/logs (GetUserSubscribeResetTrafficLogsRequest) returns (GetUserSubscribeResetTrafficLogsResponse)
@doc "Get user subcribe traffic logs" @doc "Get user subcribe traffic logs"
@handler GetUserSubscribeTrafficLogs @handler GetUserSubscribeTrafficLogs
get /subscribe/traffic_logs (GetUserSubscribeTrafficLogsRequest) returns (GetUserSubscribeTrafficLogsResponse) get /subscribe/traffic_logs (GetUserSubscribeTrafficLogsRequest) returns (GetUserSubscribeTrafficLogsResponse)

View File

@ -35,6 +35,15 @@ type (
Amount int64 `json:"amount"` Amount int64 `json:"amount"`
CreatedAt int64 `json:"created_at"` CreatedAt int64 `json:"created_at"`
} }
ResetSubscribeTrafficLogRequest {
Page int `form:"page"`
Size int `form:"size"`
UserSubscribeId int64 `form:"user_subscribe_id"`
}
ResetSubscribeTrafficLogResponse {
List []ResetSubscribeTrafficLog `json:"list"`
Total int64 `json:"total"`
}
QueryUserCommissionLogListRequest { QueryUserCommissionLogListRequest {
Page int `form:"page"` Page int `form:"page"`
Size int `form:"size"` Size int `form:"size"`
@ -136,6 +145,10 @@ service ppanel {
@handler Unsubscribe @handler Unsubscribe
post /unsubscribe (UnsubscribeRequest) post /unsubscribe (UnsubscribeRequest)
@doc "Reset Subscribe Traffic Log"
@handler ResetSubscribeTrafficLog
get /subscribe/reset/log (ResetSubscribeTrafficLogRequest) returns (ResetSubscribeTrafficLogResponse)
@doc "Query User Balance Log" @doc "Query User Balance Log"
@handler QueryUserBalanceLog @handler QueryUserBalanceLog
get /balance_log returns (QueryUserBalanceLogListResponse) get /balance_log returns (QueryUserBalanceLogListResponse)

View File

@ -754,5 +754,12 @@ type (
Linux string `json:"linux,omitempty"` Linux string `json:"linux,omitempty"`
Harmony string `json:"harmony,omitempty"` Harmony string `json:"harmony,omitempty"`
} }
ResetSubscribeTrafficLog {
Id int64 `json:"id"`
Type uint8 `json:"type"`
UserSubscribeId int64 `json:"user_subscribe_id"`
OrderNo string `json:"order_no,omitempty"`
ResetAt int64 `json:"reset_at"`
}
) )

View File

@ -0,0 +1,26 @@
package user
import (
"github.com/gin-gonic/gin"
"github.com/perfect-panel/server/internal/logic/admin/user"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/result"
)
// Get user subcribe reset traffic logs
func GetUserSubscribeResetTrafficLogsHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) {
return func(c *gin.Context) {
var req types.GetUserSubscribeResetTrafficLogsRequest
_ = c.ShouldBind(&req)
validateErr := svcCtx.Validate(&req)
if validateErr != nil {
result.ParamErrorResult(c, validateErr)
return
}
l := user.NewGetUserSubscribeResetTrafficLogsLogic(c.Request.Context(), svcCtx)
resp, err := l.GetUserSubscribeResetTrafficLogs(&req)
result.HttpResult(c, resp, err)
}
}

View File

@ -0,0 +1,26 @@
package user
import (
"github.com/gin-gonic/gin"
"github.com/perfect-panel/server/internal/logic/public/user"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/result"
)
// Reset Subscribe Traffic Log
func ResetSubscribeTrafficLogHandler(svcCtx *svc.ServiceContext) func(c *gin.Context) {
return func(c *gin.Context) {
var req types.ResetSubscribeTrafficLogRequest
_ = c.ShouldBind(&req)
validateErr := svcCtx.Validate(&req)
if validateErr != nil {
result.ParamErrorResult(c, validateErr)
return
}
l := user.NewResetSubscribeTrafficLogLogic(c.Request.Context(), svcCtx)
resp, err := l.ResetSubscribeTrafficLog(&req)
result.HttpResult(c, resp, err)
}
}

View File

@ -525,6 +525,9 @@ func RegisterHandlers(router *gin.Engine, serverCtx *svc.ServiceContext) {
// Get user subcribe logs // Get user subcribe logs
adminUserGroupRouter.GET("/subscribe/logs", adminUser.GetUserSubscribeLogsHandler(serverCtx)) adminUserGroupRouter.GET("/subscribe/logs", adminUser.GetUserSubscribeLogsHandler(serverCtx))
// Get user subcribe reset traffic logs
adminUserGroupRouter.GET("/subscribe/reset/logs", adminUser.GetUserSubscribeResetTrafficLogsHandler(serverCtx))
// Get user subcribe traffic logs // Get user subcribe traffic logs
adminUserGroupRouter.GET("/subscribe/traffic_logs", adminUser.GetUserSubscribeTrafficLogsHandler(serverCtx)) adminUserGroupRouter.GET("/subscribe/traffic_logs", adminUser.GetUserSubscribeTrafficLogsHandler(serverCtx))
} }
@ -759,6 +762,9 @@ func RegisterHandlers(router *gin.Engine, serverCtx *svc.ServiceContext) {
// Query User Subscribe // Query User Subscribe
publicUserGroupRouter.GET("/subscribe", publicUser.QueryUserSubscribeHandler(serverCtx)) publicUserGroupRouter.GET("/subscribe", publicUser.QueryUserSubscribeHandler(serverCtx))
// Reset Subscribe Traffic Log
publicUserGroupRouter.GET("/subscribe/reset/log", publicUser.ResetSubscribeTrafficLogHandler(serverCtx))
// Get Subscribe Log // Get Subscribe Log
publicUserGroupRouter.GET("/subscribe_log", publicUser.GetSubscribeLogHandler(serverCtx)) publicUserGroupRouter.GET("/subscribe_log", publicUser.GetSubscribeLogHandler(serverCtx))

View File

@ -0,0 +1,62 @@
package user
import (
"context"
"github.com/perfect-panel/server/internal/model/log"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
"github.com/perfect-panel/server/pkg/xerr"
"github.com/pkg/errors"
)
type GetUserSubscribeResetTrafficLogsLogic struct {
logger.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// Get user subcribe reset traffic logs
func NewGetUserSubscribeResetTrafficLogsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserSubscribeResetTrafficLogsLogic {
return &GetUserSubscribeResetTrafficLogsLogic{
Logger: logger.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetUserSubscribeResetTrafficLogsLogic) GetUserSubscribeResetTrafficLogs(req *types.GetUserSubscribeResetTrafficLogsRequest) (resp *types.GetUserSubscribeResetTrafficLogsResponse, err error) {
data, total, err := l.svcCtx.LogModel.FilterSystemLog(l.ctx, &log.FilterParams{
Page: req.Page,
Size: req.Size,
Type: log.TypeResetSubscribe.Uint8(),
ObjectID: req.UserSubscribeId,
})
if err != nil {
l.Errorf("[ResetSubscribeTrafficLog] failed to filter system log: %v", err)
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "FilterSystemLog failed, err: %v", err)
}
var list []types.ResetSubscribeTrafficLog
for _, item := range data {
var content log.ResetSubscribe
if err = content.Unmarshal([]byte(item.Content)); err != nil {
l.Errorf("[ResetSubscribeTrafficLog] failed to unmarshal log: %v", err)
continue
}
list = append(list, types.ResetSubscribeTrafficLog{
Id: item.Id,
Type: content.Type,
OrderNo: content.OrderNo,
ResetAt: content.ResetAt,
UserSubscribeId: item.ObjectID,
})
}
return &types.GetUserSubscribeResetTrafficLogsResponse{
Total: total,
List: list,
}, nil
}

View File

@ -0,0 +1,63 @@
package user
import (
"context"
"github.com/perfect-panel/server/internal/model/log"
"github.com/perfect-panel/server/pkg/xerr"
"github.com/pkg/errors"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
)
type ResetSubscribeTrafficLogLogic struct {
logger.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// NewResetSubscribeTrafficLogLogic Reset Subscribe Traffic Log
func NewResetSubscribeTrafficLogLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ResetSubscribeTrafficLogLogic {
return &ResetSubscribeTrafficLogLogic{
Logger: logger.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *ResetSubscribeTrafficLogLogic) ResetSubscribeTrafficLog(req *types.ResetSubscribeTrafficLogRequest) (resp *types.ResetSubscribeTrafficLogResponse, err error) {
data, total, err := l.svcCtx.LogModel.FilterSystemLog(l.ctx, &log.FilterParams{
Page: req.Page,
Size: req.Size,
Type: log.TypeResetSubscribe.Uint8(),
ObjectID: req.UserSubscribeId,
})
if err != nil {
l.Errorf("[ResetSubscribeTrafficLog] failed to filter system log: %v", err)
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "FilterSystemLog failed, err: %v", err)
}
var list []types.ResetSubscribeTrafficLog
for _, item := range data {
var content log.ResetSubscribe
if err = content.Unmarshal([]byte(item.Content)); err != nil {
l.Errorf("[ResetSubscribeTrafficLog] failed to unmarshal log: %v", err)
continue
}
list = append(list, types.ResetSubscribeTrafficLog{
Id: item.Id,
Type: content.Type,
OrderNo: content.OrderNo,
ResetAt: content.ResetAt,
UserSubscribeId: item.ObjectID,
})
}
return &types.ResetSubscribeTrafficLogResponse{
Total: total,
List: list,
}, nil
}

View File

@ -956,6 +956,17 @@ type GetUserSubscribeLogsResponse struct {
Total int64 `json:"total"` Total int64 `json:"total"`
} }
type GetUserSubscribeResetTrafficLogsRequest struct {
Page int `form:"page"`
Size int `form:"size"`
UserSubscribeId int64 `form:"user_subscribe_id"`
}
type GetUserSubscribeResetTrafficLogsResponse struct {
List []ResetSubscribeTrafficLog `json:"list"`
Total int64 `json:"total"`
}
type GetUserSubscribeTrafficLogsRequest struct { type GetUserSubscribeTrafficLogsRequest struct {
Page int `form:"page"` Page int `form:"page"`
Size int `form:"size"` Size int `form:"size"`
@ -1416,6 +1427,25 @@ type ResetPasswordRequest struct {
CfToken string `json:"cf_token,optional"` CfToken string `json:"cf_token,optional"`
} }
type ResetSubscribeTrafficLog struct {
Id int64 `json:"id"`
Type uint8 `json:"type"`
UserSubscribeId int64 `json:"user_subscribe_id"`
OrderNo string `json:"order_no,omitempty"`
ResetAt int64 `json:"reset_at"`
}
type ResetSubscribeTrafficLogRequest struct {
Page int `form:"page"`
Size int `form:"size"`
UserSubscribeId int64 `form:"user_subscribe_id"`
}
type ResetSubscribeTrafficLogResponse struct {
List []ResetSubscribeTrafficLog `json:"list"`
Total int64 `json:"total"`
}
type ResetTrafficOrderRequest struct { type ResetTrafficOrderRequest struct {
UserSubscribeID int64 `json:"user_subscribe_id"` UserSubscribeID int64 `json:"user_subscribe_id"`
Payment int64 `json:"payment"` Payment int64 `json:"payment"`