"""模块登记路由:登记或查询子系统服务地址与启用状态。""" from datetime import datetime from fastapi import APIRouter, Depends, HTTPException from sqlmodel import Session, select from app.db import get_session from app.deps import require_role from app.models import ModuleService, UserRole from app.schemas import ModulePublic, ModuleRegisterRequest router = APIRouter(prefix="/modules", tags=["modules"]) @router.get("", response_model=list[ModulePublic]) def list_modules(session: Session = Depends(get_session)): return list(session.exec(select(ModuleService)).all()) @router.post("/register", response_model=ModulePublic) def register_module( payload: ModuleRegisterRequest, session: Session = Depends(get_session), _=Depends(require_role(UserRole.teacher)), ): existing = session.exec(select(ModuleService).where(ModuleService.name == payload.name)).first() if existing: existing.base_url = payload.base_url existing.is_enabled = payload.is_enabled existing.updated_at = datetime.utcnow() session.add(existing) session.commit() session.refresh(existing) return existing module = ModuleService(name=payload.name, base_url=payload.base_url, is_enabled=payload.is_enabled) session.add(module) session.commit() session.refresh(module) return module @router.delete("/{name}") def disable_module( name: str, session: Session = Depends(get_session), _=Depends(require_role(UserRole.teacher)), ): module = session.exec(select(ModuleService).where(ModuleService.name == name)).first() if not module: raise HTTPException(status_code=404, detail="Module not found") module.is_enabled = False module.updated_at = datetime.utcnow() session.add(module) session.commit() return {"status": "disabled", "name": name}