Files
onGuard24/onguard24/modules/schedules.py
Alexandr 89b5983526 v1.5.0: IRM — инциденты, задачи, эскалации
- 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
2026-04-03 09:03:16 +03:00

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,
)
)