package console import ( "context" "time" "github.com/perfect-panel/ppanel-server/internal/svc" "github.com/perfect-panel/ppanel-server/internal/types" "github.com/perfect-panel/ppanel-server/pkg/logger" ) type QueryUserStatisticsLogic struct { logger.Logger ctx context.Context svcCtx *svc.ServiceContext } // Query user statistics func NewQueryUserStatisticsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *QueryUserStatisticsLogic { return &QueryUserStatisticsLogic{ Logger: logger.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *QueryUserStatisticsLogic) QueryUserStatistics() (resp *types.UserStatisticsResponse, err error) { resp = &types.UserStatisticsResponse{} now := time.Now() // query today user register count todayUserResisterCount, err := l.svcCtx.UserModel.QueryResisterUserTotalByDate(l.ctx, now) if err != nil { l.Errorw("[QueryUserStatisticsLogic] QueryResisterUserTotalByDate error", logger.Field("error", err.Error())) } else { resp.Today.Register = todayUserResisterCount } // query today user purchase count newToday, renewalToday, err := l.svcCtx.OrderModel.QueryDateUserCounts(l.ctx, now) if err != nil { l.Errorw("[QueryUserStatisticsLogic] QueryDateUserCounts error", logger.Field("error", err.Error())) } else { resp.Today.NewOrderUsers = newToday resp.Today.RenewalOrderUsers = renewalToday } // query month user register count monthUserResisterCount, err := l.svcCtx.UserModel.QueryResisterUserTotalByMonthly(l.ctx, now) if err != nil { l.Errorw("[QueryUserStatisticsLogic] QueryResisterUserTotalByMonthly error", logger.Field("error", err.Error())) } else { resp.Monthly.Register = monthUserResisterCount } // query month user purchase count newMonth, renewalMonth, err := l.svcCtx.OrderModel.QueryMonthlyUserCounts(l.ctx, now) if err != nil { l.Errorw("[QueryUserStatisticsLogic] QueryMonthlyUserCounts error", logger.Field("error", err.Error())) } else { resp.Monthly.NewOrderUsers = newMonth resp.Monthly.RenewalOrderUsers = renewalMonth // TODO: Check the purchase status in the past seven days resp.Monthly.List = make([]types.UserStatistics, 0) } // query all user count allUserCount, err := l.svcCtx.UserModel.QueryResisterUserTotal(l.ctx) if err != nil { l.Errorw("[QueryUserStatisticsLogic] QueryResisterUserTotal error", logger.Field("error", err.Error())) } else { resp.All.Register = allUserCount } return }