This commit is contained in:
2026-05-26 15:20:00 +08:00
committed by milky0217
parent 8d77a240da
commit d03acf0add
7 changed files with 856 additions and 2 deletions

102
scripts/set-paid-user.sh Executable file
View File

@@ -0,0 +1,102 @@
#!/bin/bash
# ===========================================
# 通过 SSH 在服务器上执行 SQL设置指定用户的付费状态
# ===========================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
ENV_FILE="$PROJECT_ROOT/.env"
get_ssh_host() {
grep '^SSH_SERVER=' "$ENV_FILE" 2>/dev/null | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'" | xargs
}
usage() {
echo "用法: $0 <user_id> [--permanent|--expires YYYY-MM-DD|--cancel]"
echo ""
echo " user_id 用户 ID必填"
echo " --monthly 设为月会员30天
--permanent 设为永久会员is_member=true, membership_expires_at=NULL"
echo " --expires DATE 设为指定日期到期(格式: YYYY-MM-DD"
echo " --cancel 取消付费状态is_member=false, membership_expires_at=NULL"
echo ""
echo "示例:"
echo " $0 1 --permanent # 用户 1 永久会员"
echo " $0 1 --expires 2027-12-31 # 2027-12-31 到期"
echo " $0 1 --cancel # 取消付费"
exit 0
}
# ---------- 参数解析 ----------
USER_ID=""; ACTION=""; EXPIRES_DATE=""
while [[ $# -gt 0 ]]; do
case "$1" in
--permanent) ACTION="permanent" ;;
--expires) ACTION="expires"; EXPIRES_DATE="$2"; shift ;;
--monthly) ACTION="monthly" ;;
--cancel) ACTION="cancel" ;;
--dev) DB_NAME="milkydata_dev" ;;
--help|-h) usage ;;
*) USER_ID="$1" ;;
esac
shift
done
[ -z "$USER_ID" ] && usage
[ -z "$ACTION" ] && usage
# ---------- 连接信息 ----------
SSH_HOST=$(get_ssh_host)
[ -z "$SSH_HOST" ] && { echo "错误: 未配置 SSH_SERVER"; exit 1; }
DB_CONTAINER="1Panel-postgresql-FtMo"
DB_USER="milkydata"
# ---------- 构建 SQL ----------
case "$ACTION" in
permanent)
SQL="UPDATE users SET is_member = true, membership_expires_at = NULL WHERE id = ${USER_ID};"
DESC="永久会员"
;;
monthly)
SQL="UPDATE users SET is_member = true, membership_expires_at = NOW() + INTERVAL '30 days' WHERE id = ${USER_ID};"
DESC="月会员30天"
;;
expires)
SQL="UPDATE users SET is_member = true, membership_expires_at = '${EXPIRES_DATE}' WHERE id = ${USER_ID};"
DESC="到期: ${EXPIRES_DATE}"
;;
cancel)
SQL="UPDATE users SET is_member = false, membership_expires_at = NULL WHERE id = ${USER_ID};"
DESC="取消付费"
;;
esac
echo ""
echo "═══════════════════════════════════════"
echo " 操作: 用户 ${USER_ID}${DESC}"
echo " 数据库: ${DB_NAME}${SSH_HOST}"
echo "═══════════════════════════════════════"
echo ""
echo "当前状态:"
CURRENT_SQL="SELECT id, name, is_member, membership_expires_at FROM users WHERE id = ${USER_ID};"
ssh "$SSH_HOST" "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${CURRENT_SQL}\""
echo ""
echo "将要执行:"
echo " ${SQL}"
echo ""
read -p "确认执行? [y/N] " -n 1 -r; echo
[[ ! $REPLY =~ ^[Yy]$ ]] && { echo "已取消"; exit 0; }
echo ""
echo "执行中..."
ssh "$SSH_HOST" "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${SQL}\"" && echo "✅ 操作成功" || echo "❌ 操作失败"
echo ""
echo "验证结果:"
VERIFY_SQL="SELECT id, name, phone, type, is_member, is_admin, membership_expires_at FROM users WHERE id = ${USER_ID};"
ssh "$SSH_HOST" "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${VERIFY_SQL}\""
echo ""