refactor(network): improve network statistics calculations and update related DTOs
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 7m14s
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 7m14s
- Refactored GetNetworkStatisticsQueryHandler to enhance logic for counting active members in left and right legs. - Updated GetNetworkStatisticsResponseDto to include new properties for LeftLegCount and RightLegCount. - Modified Protobuf definitions to align with the updated response structure for network statistics. - Enhanced SQL script to differentiate between all subtree counts and active club member counts.
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
-- =============================================
|
||||
-- Diagnose: Package holder counts per leg (read-only)
|
||||
-- Compares OLD source (NetworkWeeklyBalances) vs NEW (active members + current cycle)
|
||||
-- Diagnose: Leg counts — all subtree vs active-only vs gold/silver
|
||||
-- Usage: SET @RootUserId to the tree owner UserId
|
||||
-- =============================================
|
||||
|
||||
@@ -44,6 +43,18 @@ Subtree AS (
|
||||
FROM Subtree s
|
||||
INNER JOIN CMS.Users u ON u.NetworkParentId = s.UserId AND u.IsDeleted = 0
|
||||
),
|
||||
AllSubtreeCounts AS (
|
||||
SELECT LegSide, COUNT(DISTINCT UserId) AS Cnt
|
||||
FROM Subtree
|
||||
GROUP BY LegSide
|
||||
),
|
||||
ActiveClubCounts AS (
|
||||
SELECT s.LegSide, COUNT(DISTINCT s.UserId) AS Cnt
|
||||
FROM Subtree s
|
||||
INNER JOIN CMS.ClubMemberships cm
|
||||
ON cm.UserId = s.UserId AND cm.IsActive = 1 AND cm.IsDeleted = 0
|
||||
GROUP BY s.LegSide
|
||||
),
|
||||
ActivePackageHolders AS (
|
||||
SELECT
|
||||
s.LegSide,
|
||||
@@ -53,25 +64,27 @@ ActivePackageHolders AS (
|
||||
INNER JOIN CMS.ClubMemberships cm ON cm.UserId = s.UserId AND cm.IsActive = 1 AND cm.IsDeleted = 0
|
||||
INNER JOIN CMS.ClubMembershipCycles cc ON cc.UserId = s.UserId AND cc.IsCurrentCycle = 1
|
||||
GROUP BY s.LegSide, cc.PackageId
|
||||
),
|
||||
LatestNwb AS (
|
||||
SELECT PackageId, LeftLegTotal, RightLegTotal, WeekDefinitionId,
|
||||
ROW_NUMBER() OVER (PARTITION BY PackageId ORDER BY WeekDefinitionId DESC) AS rn
|
||||
FROM CMS.NetworkWeeklyBalances
|
||||
WHERE UserId = @RootUserId
|
||||
AND PackageId IN (@GoldPackageId, @SilverPackageId)
|
||||
)
|
||||
SELECT
|
||||
@RootUserId AS RootUserId,
|
||||
@GoldPackageId AS GoldPackageId,
|
||||
@SilverPackageId AS SilverPackageId,
|
||||
-- NEW: real holder counts
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 0 AND PackageId = @GoldPackageId), 0) AS New_GoldLeft,
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 1 AND PackageId = @GoldPackageId), 0) AS New_GoldRight,
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 0 AND PackageId = @SilverPackageId), 0) AS New_SilverLeft,
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 1 AND PackageId = @SilverPackageId), 0) AS New_SilverRight,
|
||||
-- OLD: weekly balance scores (previous wrong source)
|
||||
ISNULL((SELECT LeftLegTotal FROM LatestNwb WHERE PackageId = @GoldPackageId AND rn = 1), 0) AS Old_Nwb_GoldLeft,
|
||||
ISNULL((SELECT RightLegTotal FROM LatestNwb WHERE PackageId = @GoldPackageId AND rn = 1), 0) AS Old_Nwb_GoldRight,
|
||||
ISNULL((SELECT LeftLegTotal FROM LatestNwb WHERE PackageId = @SilverPackageId AND rn = 1), 0) AS Old_Nwb_SilverLeft,
|
||||
ISNULL((SELECT RightLegTotal FROM LatestNwb WHERE PackageId = @SilverPackageId AND rn = 1), 0) AS Old_Nwb_SilverRight;
|
||||
-- All subtree (old سازمان چپ/راست)
|
||||
ISNULL((SELECT Cnt FROM AllSubtreeCounts WHERE LegSide = 0), 0) AS AllLeft,
|
||||
ISNULL((SELECT Cnt FROM AllSubtreeCounts WHERE LegSide = 1), 0) AS AllRight,
|
||||
-- Active club only (new سازمان چپ/راست / کل)
|
||||
ISNULL((SELECT Cnt FROM ActiveClubCounts WHERE LegSide = 0), 0) AS ActiveLeft,
|
||||
ISNULL((SELECT Cnt FROM ActiveClubCounts WHERE LegSide = 1), 0) AS ActiveRight,
|
||||
ISNULL((SELECT Cnt FROM ActiveClubCounts WHERE LegSide = 0), 0)
|
||||
+ ISNULL((SELECT Cnt FROM ActiveClubCounts WHERE LegSide = 1), 0) AS ActiveTotal,
|
||||
-- Gold / Silver package holders (active + current cycle)
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 0 AND PackageId = @GoldPackageId), 0) AS GoldLeft,
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 1 AND PackageId = @GoldPackageId), 0) AS GoldRight,
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 0 AND PackageId = @SilverPackageId), 0) AS SilverLeft,
|
||||
ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 1 AND PackageId = @SilverPackageId), 0) AS SilverRight,
|
||||
-- Gaps: Active − (Gold+Silver) per leg
|
||||
ISNULL((SELECT Cnt FROM ActiveClubCounts WHERE LegSide = 0), 0)
|
||||
- ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 0 AND PackageId = @GoldPackageId), 0)
|
||||
- ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 0 AND PackageId = @SilverPackageId), 0) AS GapLeft_ActiveMinusPackages,
|
||||
ISNULL((SELECT Cnt FROM ActiveClubCounts WHERE LegSide = 1), 0)
|
||||
- ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 1 AND PackageId = @GoldPackageId), 0)
|
||||
- ISNULL((SELECT HolderCount FROM ActivePackageHolders WHERE LegSide = 1 AND PackageId = @SilverPackageId), 0) AS GapRight_ActiveMinusPackages
|
||||
OPTION (MAXRECURSION 0);
|
||||
|
||||
Reference in New Issue
Block a user