feat: update user preferences and system settings management

This commit is contained in:
2026-02-03 16:37:05 +08:00
parent 555bf38b71
commit 5a22351a66
21 changed files with 417 additions and 153 deletions

View File

@@ -0,0 +1,70 @@
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
from datetime import datetime
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent))
from config import settings
engine = create_engine(
settings.DATABASE_URL,
connect_args={"check_same_thread": False} if "sqlite" in settings.DATABASE_URL else {}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def upgrade():
db = SessionLocal()
try:
db.execute(text("""
CREATE TABLE IF NOT EXISTS system_settings (
id INTEGER PRIMARY KEY,
key VARCHAR(100) UNIQUE NOT NULL,
value JSON NOT NULL,
updated_at DATETIME NOT NULL
)
"""))
db.execute(text("""
CREATE INDEX IF NOT EXISTS ix_system_settings_key ON system_settings (key)
"""))
result = db.execute(text(
"SELECT COUNT(*) as count FROM system_settings WHERE key = 'local_model_enabled'"
))
count = result.fetchone()[0]
if count == 0:
db.execute(text(
"INSERT INTO system_settings (key, value, updated_at) VALUES "
"('local_model_enabled', '{\"enabled\": false}', :now)"
), {"now": datetime.utcnow()})
db.execute(text("""
UPDATE users
SET user_preferences = json_set(
COALESCE(user_preferences, '{}'),
'$.default_backend',
'aliyun'
)
WHERE json_extract(user_preferences, '$.default_backend') IS NULL
OR json_extract(user_preferences, '$.default_backend') = 'local'
"""))
db.commit()
print("Migration completed successfully!")
print("- Created system_settings table")
print("- Added local_model_enabled setting (default: false)")
print("- Updated user preferences to use aliyun backend by default")
except Exception as e:
db.rollback()
print(f"Migration failed: {e}")
raise
finally:
db.close()
if __name__ == "__main__":
upgrade()