146 lines
5.3 KiB
Python
146 lines
5.3 KiB
Python
|
|
#!/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()
|