70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
from sqlalchemy.orm import Session
|
|
|
|
from app.core.config import settings
|
|
from app.core.security import get_password_hash
|
|
from app.models.user import Subject, SystemSettings, User
|
|
|
|
DEFAULT_SUBJECTS = [
|
|
"语文",
|
|
"数学",
|
|
"英语",
|
|
"物理",
|
|
"化学",
|
|
"生物",
|
|
"历史",
|
|
"地理",
|
|
"政治",
|
|
]
|
|
|
|
|
|
def seed_subjects(db: Session) -> None:
|
|
existing = {s.name for s in db.query(Subject).all()}
|
|
for name in DEFAULT_SUBJECTS:
|
|
if name not in existing:
|
|
db.add(Subject(name=name))
|
|
db.commit()
|
|
|
|
|
|
def seed_admin_and_settings(db: Session) -> None:
|
|
row = db.get(SystemSettings, 1)
|
|
if row is None:
|
|
db.add(
|
|
SystemSettings(
|
|
id=1,
|
|
registration_enabled=True,
|
|
ai_provider="ollama",
|
|
ollama_base_url=settings.OLLAMA_BASE_URL,
|
|
ollama_model=settings.OLLAMA_MODEL,
|
|
openai_base_url=settings.OPENAI_BASE_URL,
|
|
openai_model=settings.OPENAI_MODEL,
|
|
ocr_service_url=settings.OCR_SERVICE_URL or None,
|
|
)
|
|
)
|
|
else:
|
|
if not row.ollama_base_url:
|
|
row.ollama_base_url = settings.OLLAMA_BASE_URL
|
|
if not row.ollama_model:
|
|
row.ollama_model = settings.OLLAMA_MODEL
|
|
if not row.openai_base_url:
|
|
row.openai_base_url = settings.OPENAI_BASE_URL
|
|
if not row.openai_model:
|
|
row.openai_model = settings.OPENAI_MODEL
|
|
if not row.ocr_service_url and settings.OCR_SERVICE_URL:
|
|
row.ocr_service_url = settings.OCR_SERVICE_URL
|
|
if not row.ai_provider:
|
|
row.ai_provider = "ollama"
|
|
|
|
admin = db.query(User).filter(User.username == settings.ADMIN_DEFAULT_USERNAME).first()
|
|
if admin is None:
|
|
db.add(
|
|
User(
|
|
username=settings.ADMIN_DEFAULT_USERNAME,
|
|
password_hash=get_password_hash(settings.ADMIN_DEFAULT_PASSWORD),
|
|
is_superuser=True,
|
|
)
|
|
)
|
|
elif not admin.is_superuser:
|
|
admin.is_superuser = True
|
|
|
|
db.commit()
|