package logic import ( "context" "git.cialloo.com/CiallooWeb/ServerStatistics/app/internal/svc" "git.cialloo.com/CiallooWeb/ServerStatistics/app/internal/types" "github.com/zeromicro/go-zero/core/logx" ) type TotalPlayTimeLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // Get total playtime within a specified time range func NewTotalPlayTimeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *TotalPlayTimeLogic { return &TotalPlayTimeLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *TotalPlayTimeLogic) TotalPlayTime(req *types.TotalPlayTimeReq) (resp *types.TotalPlayTimeResp, err error) { query := ` SELECT COALESCE(SUM(duration), 0) FROM steam_union.connection_log WHERE connection_type = 2 AND log_time >= TO_TIMESTAMP($1 / 1000.0) AND log_time <= TO_TIMESTAMP($2 / 1000.0) AND steamid64 > 1 ` var totalTime int64 err = l.svcCtx.DB.QueryRowContext(l.ctx, query, req.TimeRangeStart, req.TimeRangeEnd).Scan(&totalTime) if err != nil { l.Errorf("Failed to query total playtime: %v", err) return nil, err } return &types.TotalPlayTimeResp{ TotalPlayTime: totalTime, }, nil }