| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- """模块登记路由:登记或查询子系统服务地址与启用状态。"""
- 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}
|