diff --git a/apis/admin/user.api b/apis/admin/user.api index 92149fd..e52734d 100644 --- a/apis/admin/user.api +++ b/apis/admin/user.api @@ -164,6 +164,15 @@ type ( List []UserLoginLog `json:"list"` 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 { UserSubscribeId int64 `json:"user_subscribe_id"` } @@ -251,6 +260,10 @@ service ppanel { @handler GetUserSubscribeLogs 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" @handler GetUserSubscribeTrafficLogs get /subscribe/traffic_logs (GetUserSubscribeTrafficLogsRequest) returns (GetUserSubscribeTrafficLogsResponse) diff --git a/apis/public/user.api b/apis/public/user.api index 66c8d08..6b94ad8 100644 --- a/apis/public/user.api +++ b/apis/public/user.api @@ -35,6 +35,15 @@ type ( Amount int64 `json:"amount"` 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 { Page int `form:"page"` Size int `form:"size"` @@ -136,6 +145,10 @@ service ppanel { @handler Unsubscribe post /unsubscribe (UnsubscribeRequest) + @doc "Reset Subscribe Traffic Log" + @handler ResetSubscribeTrafficLog + get /subscribe/reset/log (ResetSubscribeTrafficLogRequest) returns (ResetSubscribeTrafficLogResponse) + @doc "Query User Balance Log" @handler QueryUserBalanceLog get /balance_log returns (QueryUserBalanceLogListResponse) diff --git a/apis/types.api b/apis/types.api index 963f5f5..b35acb6 100644 --- a/apis/types.api +++ b/apis/types.api @@ -754,5 +754,12 @@ type ( Linux string `json:"linux,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"` + } ) diff --git a/internal/handler/admin/user/getUserSubscribeResetTrafficLogsHandler.go b/internal/handler/admin/user/getUserSubscribeResetTrafficLogsHandler.go new file mode 100644 index 0000000..0f7525d --- /dev/null +++ b/internal/handler/admin/user/getUserSubscribeResetTrafficLogsHandler.go @@ -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) + } +} diff --git a/internal/handler/public/user/resetSubscribeTrafficLogHandler.go b/internal/handler/public/user/resetSubscribeTrafficLogHandler.go new file mode 100644 index 0000000..20a047b --- /dev/null +++ b/internal/handler/public/user/resetSubscribeTrafficLogHandler.go @@ -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) + } +} diff --git a/internal/handler/routes.go b/internal/handler/routes.go index 856ede7..642e31b 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -525,6 +525,9 @@ func RegisterHandlers(router *gin.Engine, serverCtx *svc.ServiceContext) { // Get user subcribe logs 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 adminUserGroupRouter.GET("/subscribe/traffic_logs", adminUser.GetUserSubscribeTrafficLogsHandler(serverCtx)) } @@ -759,6 +762,9 @@ func RegisterHandlers(router *gin.Engine, serverCtx *svc.ServiceContext) { // Query User Subscribe publicUserGroupRouter.GET("/subscribe", publicUser.QueryUserSubscribeHandler(serverCtx)) + // Reset Subscribe Traffic Log + publicUserGroupRouter.GET("/subscribe/reset/log", publicUser.ResetSubscribeTrafficLogHandler(serverCtx)) + // Get Subscribe Log publicUserGroupRouter.GET("/subscribe_log", publicUser.GetSubscribeLogHandler(serverCtx)) diff --git a/internal/logic/admin/user/getUserSubscribeResetTrafficLogsLogic.go b/internal/logic/admin/user/getUserSubscribeResetTrafficLogsLogic.go new file mode 100644 index 0000000..b3c3638 --- /dev/null +++ b/internal/logic/admin/user/getUserSubscribeResetTrafficLogsLogic.go @@ -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 +} diff --git a/internal/logic/public/user/resetSubscribeTrafficLogLogic.go b/internal/logic/public/user/resetSubscribeTrafficLogLogic.go new file mode 100644 index 0000000..a5e1aa8 --- /dev/null +++ b/internal/logic/public/user/resetSubscribeTrafficLogLogic.go @@ -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 +} diff --git a/internal/types/types.go b/internal/types/types.go index 71bbdbf..1127d89 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -956,6 +956,17 @@ type GetUserSubscribeLogsResponse struct { 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 { Page int `form:"page"` Size int `form:"size"` @@ -1416,6 +1427,25 @@ type ResetPasswordRequest struct { 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 { UserSubscribeID int64 `json:"user_subscribe_id"` Payment int64 `json:"payment"`