diff --git a/python_core/api/auth_api.py b/python_core/api/auth_api.py index 2854671..f1b40f4 100644 --- a/python_core/api/auth_api.py +++ b/python_core/api/auth_api.py @@ -35,11 +35,12 @@ class AuthAPI: """ try: # 创建注册请求对象 + display_name = data.get("display_name", "") or "" request = RegisterRequest( username=data.get("username", "").strip(), email=data.get("email", "").strip(), password=data.get("password", ""), - display_name=data.get("display_name", "").strip() or None + display_name=display_name.strip() or None ) # 执行注册 diff --git a/python_core/database/user_postgres.py b/python_core/database/user_postgres.py index 866563c..c678fdf 100644 --- a/python_core/database/user_postgres.py +++ b/python_core/database/user_postgres.py @@ -161,6 +161,20 @@ PostgreSQL 驱动 psycopg2 未安装。请安装: ADD COLUMN avatar_url TEXT DEFAULT '' """) + # 检查 last_login 字段是否存在 + cursor.execute(""" + SELECT column_name + FROM information_schema.columns + WHERE table_name = 'users' AND column_name = 'last_login' + """) + + if not cursor.fetchone(): + logger.info("Adding last_login column to users table") + cursor.execute(""" + ALTER TABLE users + ADD COLUMN last_login TIMESTAMP + """) + except Exception as e: logger.error(f"Failed to migrate user table: {e}") raise e @@ -251,12 +265,12 @@ PostgreSQL 驱动 psycopg2 未安装。请安装: 'username': row['username'], 'email': row['email'], 'password_hash': row['password_hash'], - 'display_name': row['display_name'], - 'avatar_url': row['avatar_url'], + 'display_name': row.get('display_name', row['username']), + 'avatar_url': row.get('avatar_url', ''), 'is_active': row['is_active'], - 'last_login': row['last_login'].isoformat() if row['last_login'] else None, - 'created_at': row['created_at'].isoformat() if row['created_at'] else None, - 'updated_at': row['updated_at'].isoformat() if row['updated_at'] else None + 'last_login': row.get('last_login').isoformat() if row.get('last_login') else None, + 'created_at': row.get('created_at').isoformat() if row.get('created_at') else None, + 'updated_at': row.get('updated_at').isoformat() if row.get('updated_at') else None } return None @@ -286,12 +300,12 @@ PostgreSQL 驱动 psycopg2 未安装。请安装: 'username': row['username'], 'email': row['email'], 'password_hash': row['password_hash'], - 'display_name': row['display_name'], - 'avatar_url': row['avatar_url'], + 'display_name': row.get('display_name', row['username']), + 'avatar_url': row.get('avatar_url', ''), 'is_active': row['is_active'], - 'last_login': row['last_login'].isoformat() if row['last_login'] else None, - 'created_at': row['created_at'].isoformat() if row['created_at'] else None, - 'updated_at': row['updated_at'].isoformat() if row['updated_at'] else None + 'last_login': row.get('last_login').isoformat() if row.get('last_login') else None, + 'created_at': row.get('created_at').isoformat() if row.get('created_at') else None, + 'updated_at': row.get('updated_at').isoformat() if row.get('updated_at') else None } return None @@ -321,12 +335,12 @@ PostgreSQL 驱动 psycopg2 未安装。请安装: 'username': row['username'], 'email': row['email'], 'password_hash': row['password_hash'], - 'display_name': row['display_name'], - 'avatar_url': row['avatar_url'], + 'display_name': row.get('display_name', row['username']), + 'avatar_url': row.get('avatar_url', ''), 'is_active': row['is_active'], - 'last_login': row['last_login'].isoformat() if row['last_login'] else None, - 'created_at': row['created_at'].isoformat() if row['created_at'] else None, - 'updated_at': row['updated_at'].isoformat() if row['updated_at'] else None + 'last_login': row.get('last_login').isoformat() if row.get('last_login') else None, + 'created_at': row.get('created_at').isoformat() if row.get('created_at') else None, + 'updated_at': row.get('updated_at').isoformat() if row.get('updated_at') else None } return None