Files
chinese-family-tree-2/fix-wang-data.sh
T
freedakgmail 5c8c70097c 0.8.0.0
2025-12-21 17:32:33 +08:00

99 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# 修复 wang@example.com 用户的成员代数数据
SSH_HOST="180.76.240.104-root"
REMOTE_DIR="/var/www/chinese-family-tree"
DB_NAME="family_tree"
echo "========================================="
echo "修复 wang@example.com 用户的成员代数数据"
echo "========================================="
# 在服务器上执行 SQL 查询和修复
ssh $SSH_HOST bash << 'ENDSSH'
cd /var/www/chinese-family-tree
echo ""
echo "1. 查询当前数据状态..."
echo ""
sudo -u postgres psql -d family_tree << 'SQLEOF'
-- 查看 wang@example.com 用户信息
SELECT id, email, name FROM "User" WHERE email = 'wang@example.com';
-- 查看该用户的家族树
SELECT ft.id, ft.name, ft."rootMemberId", ft."ownerId"
FROM "FamilyTree" ft
JOIN "User" u ON ft."ownerId" = u.id
WHERE u.email = 'wang@example.com';
-- 查看成员代数分布
SELECT fm.generation, COUNT(*) as count, STRING_AGG(fm."fullName", ', ' ORDER BY fm."createdAt") as members
FROM "FamilyMember" fm
JOIN "FamilyTree" ft ON fm."treeId" = ft.id
JOIN "User" u ON ft."ownerId" = u.id
WHERE u.email = 'wang@example.com'
GROUP BY fm.generation
ORDER BY fm.generation;
SQLEOF
echo ""
echo "2. 检查是否需要修复..."
echo ""
# 获取最小代数
MIN_GEN=$(sudo -u postgres psql -d family_tree -t -A -c "
SELECT MIN(fm.generation)
FROM \"FamilyMember\" fm
JOIN \"FamilyTree\" ft ON fm.\"treeId\" = ft.id
JOIN \"User\" u ON ft.\"ownerId\" = u.id
WHERE u.email = 'wang@example.com';
")
echo "当前最小代数: $MIN_GEN"
if [ "$MIN_GEN" -gt 1 ]; then
OFFSET=$((MIN_GEN - 1))
echo "需要将所有代数减少 $OFFSET"
echo ""
echo "3. 执行修复..."
sudo -u postgres psql -d family_tree << SQLEOF
-- 开始事务
BEGIN;
-- 更新所有成员的代数
UPDATE "FamilyMember" fm
SET generation = generation - $OFFSET
FROM "FamilyTree" ft, "User" u
WHERE fm."treeId" = ft.id
AND ft."ownerId" = u.id
AND u.email = 'wang@example.com';
-- 查看修复后的结果
SELECT fm.generation, COUNT(*) as count, STRING_AGG(fm."fullName", ', ' ORDER BY fm."createdAt") as members
FROM "FamilyMember" fm
JOIN "FamilyTree" ft ON fm."treeId" = ft.id
JOIN "User" u ON ft."ownerId" = u.id
WHERE u.email = 'wang@example.com'
GROUP BY fm.generation
ORDER BY fm.generation;
-- 提交事务
COMMIT;
SQLEOF
echo ""
echo "✅ 修复完成!"
else
echo "✅ 代数正常(从第1世开始),无需修复"
fi
ENDSSH
echo ""
echo "========================================="
echo "修复脚本执行完成"
echo "========================================="