Files
asd-backend/scripts/set-paid-user.sh
2026-05-26 15:20:50 +08:00

103 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 ""