Files
yixiaogao/database/user_cli.py

146 lines
5.3 KiB
Python
Raw Normal View History

2025-12-02 14:58:52 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
用户数据库命令行接口
用于Go后端调用执行用户操作
"""
import sys
import json
from user_database import UserDatabase
def main():
if len(sys.argv) < 2:
print(json.dumps({"error": "缺少命令参数"}))
sys.exit(1)
command = sys.argv[1]
db = UserDatabase()
try:
if command == "create":
# 创建用户: python user_cli.py create <username> <password> <email>
if len(sys.argv) < 5:
print(json.dumps({"error": "参数不足: 需要用户名、密码和邮箱"}))
sys.exit(1)
username = sys.argv[2]
password = sys.argv[3]
email = sys.argv[4]
user_id = db.create_user(username, password, email)
print(json.dumps({
"success": True,
"user_id": user_id,
"username": username
}))
elif command == "verify":
# 验证密码: python user_cli.py verify <username> <password>
if len(sys.argv) < 4:
print(json.dumps({"error": "参数不足: 需要用户名和密码"}))
sys.exit(1)
username = sys.argv[2]
password = sys.argv[3]
user = db.verify_password(username, password)
if user:
# 删除密码哈希
user_data = {k: v for k, v in user.items() if k != 'password_hash'}
# 转换datetime为字符串
if 'created_at' in user_data and user_data['created_at']:
user_data['created_at'] = str(user_data['created_at'])
if 'last_login_at' in user_data and user_data['last_login_at']:
user_data['last_login_at'] = str(user_data['last_login_at'])
# 更新登录时间
db.update_login_time(user['user_id'])
print(json.dumps({
"success": True,
**user_data
}))
else:
print(json.dumps({"error": "用户名或密码错误"}))
sys.exit(1)
elif command == "get":
# 获取用户信息: python user_cli.py get <user_id>
if len(sys.argv) < 3:
print(json.dumps({"error": "参数不足: 需要用户ID"}))
sys.exit(1)
user_id = int(sys.argv[2])
user = db.get_user_by_id(user_id)
if user:
# 删除密码哈希
user_data = {k: v for k, v in user.items() if k != 'password_hash'}
# 转换datetime为字符串
if 'created_at' in user_data and user_data['created_at']:
user_data['created_at'] = str(user_data['created_at'])
if 'last_login_at' in user_data and user_data['last_login_at']:
user_data['last_login_at'] = str(user_data['last_login_at'])
print(json.dumps(user_data))
else:
print(json.dumps({"error": "用户不存在"}))
sys.exit(1)
elif command == "update":
# 更新用户信息: python user_cli.py update <user_id> [--email <email>] [--bio <bio>]
if len(sys.argv) < 3:
print(json.dumps({"error": "参数不足: 需要用户ID"}))
sys.exit(1)
user_id = int(sys.argv[2])
kwargs = {}
# 解析命令行参数
i = 3
while i < len(sys.argv):
if sys.argv[i] == "--email" and i + 1 < len(sys.argv):
kwargs['email'] = sys.argv[i + 1]
i += 2
elif sys.argv[i] == "--bio" and i + 1 < len(sys.argv):
kwargs['bio'] = sys.argv[i + 1]
i += 2
elif sys.argv[i] == "--password" and i + 1 < len(sys.argv):
kwargs['password'] = sys.argv[i + 1]
i += 2
else:
i += 1
if not kwargs:
print(json.dumps({"error": "没有提供需要更新的字段"}))
sys.exit(1)
success = db.update_user(user_id, **kwargs)
if success:
print(json.dumps({"success": True, "message": "更新成功"}))
else:
print(json.dumps({"error": "更新失败"}))
sys.exit(1)
else:
print(json.dumps({"error": f"未知命令: {command}"}))
sys.exit(1)
except db.UserExistsError as e:
print(json.dumps({"error": str(e), "type": "UserExistsError"}))
sys.exit(1)
except db.ValidationError as e:
print(json.dumps({"error": str(e), "type": "ValidationError"}))
sys.exit(1)
except db.UserNotFoundError as e:
print(json.dumps({"error": str(e), "type": "UserNotFoundError"}))
sys.exit(1)
except Exception as e:
print(json.dumps({"error": str(e), "type": "Exception"}))
sys.exit(1)
if __name__ == "__main__":
main()