feat: Add monitoring alerts skeleton and enhance worker with notifications

This commit is contained in:
masoodafar-web
2025-11-30 20:18:10 +03:30
parent 55fa71e09b
commit 199e7e99d1
23 changed files with 5038 additions and 1168 deletions
@@ -0,0 +1,99 @@
-- =====================================================================
-- Migration Script: ParentId → NetworkParentId & LegPosition Assignment
-- Date: 2025-06-01
-- Purpose: Migrate existing User.ParentId data to new NetworkParentId + LegPosition binary tree structure
-- =====================================================================
BEGIN TRANSACTION;
-- Step 1: Validation - Find users with more than 2 children (INVALID for binary tree)
-- این کاربران باید قبل از Migration بررسی شوند
SELECT
ParentId,
COUNT(*) as ChildCount,
STRING_AGG(CAST(Id AS VARCHAR), ', ') as ChildIds
FROM Users
WHERE ParentId IS NOT NULL
GROUP BY ParentId
HAVING COUNT(*) > 2;
-- اگر نتیجه‌ای بود، باید دستی تصمیم بگیرید کدام 2 فرزند باقی بمانند!
-- اگر نتیجه‌ای نبود، ادامه دهید:
-- Step 2: Copy ParentId → NetworkParentId for all users
UPDATE Users
SET NetworkParentId = ParentId
WHERE ParentId IS NOT NULL
AND NetworkParentId IS NULL;
-- Step 3: Assign LegPosition (Left/Right) based on order
-- برای هر Parent، اولین فرزند = Left، دومین فرزند = Right
WITH RankedChildren AS (
SELECT
Id,
ParentId,
ROW_NUMBER() OVER (PARTITION BY ParentId ORDER BY Id ASC) as ChildRank
FROM Users
WHERE ParentId IS NOT NULL
)
UPDATE Users
SET LegPosition = CASE
WHEN rc.ChildRank = 1 THEN 0 -- Left = 0 (enum value)
WHEN rc.ChildRank = 2 THEN 1 -- Right = 1 (enum value)
ELSE NULL -- اگر بیشتر از 2 فرزند بود (نباید اتفاق بیفته)
END
FROM Users u
INNER JOIN RankedChildren rc ON u.Id = rc.Id;
-- Step 4: Validation - Check for orphaned nodes (Parent doesn't exist)
SELECT
Id,
NetworkParentId,
'Orphaned: Parent does not exist' as Issue
FROM Users
WHERE NetworkParentId IS NOT NULL
AND NetworkParentId NOT IN (SELECT Id FROM Users);
-- اگر Orphan یافت شد، باید آنها را NULL کنید یا Parent صحیح تخصیص دهید
-- Step 5: Validation - Verify binary tree integrity
-- هر Parent باید حداکثر 2 فرزند داشته باشد
SELECT
NetworkParentId,
COUNT(*) as ChildCount,
STRING_AGG(CAST(Id AS VARCHAR), ', ') as ChildIds
FROM Users
WHERE NetworkParentId IS NOT NULL
GROUP BY NetworkParentId
HAVING COUNT(*) > 2;
-- اگر نتیجه خالی بود، Migration موفق است!
-- Step 6: Statistics
SELECT
'Total Users' as Metric,
COUNT(*) as Count
FROM Users
UNION ALL
SELECT
'Users with NetworkParentId',
COUNT(*)
FROM Users
WHERE NetworkParentId IS NOT NULL
UNION ALL
SELECT
'Users with LegPosition Left',
COUNT(*)
FROM Users
WHERE LegPosition = 0
UNION ALL
SELECT
'Users with LegPosition Right',
COUNT(*)
FROM Users
WHERE LegPosition = 1;
-- Commit if validation passes
COMMIT;
-- ROLLBACK; -- اگر مشکل پیش آمد، uncomment کنید