- docs/IRM.md; Alembic 002: incidents, tasks, escalation_policies - Модули incidents/tasks/escalations: API, UI, register_events(bus, pool) - Авто-инцидент из alert.received; тесты test_irm_modules.py Made-with: Cursor
49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
from fastapi import APIRouter, Request
|
|
from fastapi.responses import HTMLResponse
|
|
|
|
from onguard24.domain.events import EventBus
|
|
from onguard24.modules.ui_support import wrap_module_html_page
|
|
|
|
router = APIRouter(tags=["module-schedules"])
|
|
|
|
ui_router = APIRouter(tags=["web-schedules"], include_in_schema=False)
|
|
|
|
|
|
def register_events(_bus: EventBus, _pool=None) -> None:
|
|
"""Подписка на доменные события (например alert.received)."""
|
|
# _bus.subscribe("alert.received", handler)
|
|
|
|
|
|
async def render_home_fragment(request: Request) -> str:
|
|
"""Фрагмент для главной (в root_html вызывается через safe_fragment — падение не ломает главную)."""
|
|
del request
|
|
return (
|
|
'<div class="module-fragment">'
|
|
"<p>Планирование смен и календарь — следующий этап.</p>"
|
|
"</div>"
|
|
)
|
|
|
|
|
|
@router.get("/")
|
|
async def schedules_root():
|
|
return {
|
|
"module": "schedules",
|
|
"status": "stub",
|
|
"note": "календарь и смены — следующий этап",
|
|
}
|
|
|
|
|
|
@ui_router.get("/", response_class=HTMLResponse)
|
|
async def schedules_ui_home(request: Request):
|
|
"""Полная HTML-страница: /ui/modules/schedules/ — то же правое меню, что на главной."""
|
|
del request
|
|
inner = """<h1>Календарь дежурств</h1>
|
|
<p>Здесь будет функционал модуля: смены, календарь, уведомления.</p>"""
|
|
return HTMLResponse(
|
|
wrap_module_html_page(
|
|
document_title="Календарь дежурств — onGuard24",
|
|
current_slug="schedules",
|
|
main_inner_html=inner,
|
|
)
|
|
)
|