"""Detection-level taxonomy API. Read-only in M7 — M8 will add CRUD. The four defaults are seeded at boot via `app.services.detection_levels.seed_detection_levels()`. """ from __future__ import annotations from typing import Any from flask import Blueprint, jsonify from app.core.auth_decorators import require_auth, require_perm from app.services import detection_levels as svc bp = Blueprint("detection_levels", __name__, url_prefix="/detection-levels") def _serialize(view: svc.DetectionLevelView) -> dict[str, Any]: return { "id": str(view.id), "key": view.key, "label_fr": view.label_fr, "label_en": view.label_en, "color_token": view.color_token, "position": view.position, "is_default": view.is_default, "is_system": view.is_system, } @bp.get("") @require_auth @require_perm("detection_level.read") def list_detection_levels(): items = svc.list_detection_levels() return jsonify({"items": [_serialize(it) for it in items]})