"""Объявления администрации для игрока: что показать сейчас и «Понятно». Появление нового объявления у открытой вкладки обеспечивает SSE-сигнал `{type:"announcements"}`; объявление с отложенным началом клиент подхватывает периодическим перезапросом.""" from __future__ import annotations from fastapi import APIRouter, Depends from sqlmodel import Session from app.auth.deps import get_current_user from app.db.session import get_session from app.models import User from app.schemas import api as s from app.services import announcement_service router = APIRouter(prefix="/announcements", tags=["announcements"]) @router.get("/pending", response_model=list[s.AnnouncementRead]) def pending( session: Session = Depends(get_session), user: User = Depends(get_current_user), ) -> list[s.AnnouncementRead]: return [ s.AnnouncementRead( id=a.id, # type: ignore[arg-type] title=a.title, body_html=a.body_html, revision=a.revision, updated=updated, ) for a, updated in announcement_service.pending_for_user(session, user) ] @router.post("/{announcement_id}/ack", response_model=s.OkResponse) def acknowledge( announcement_id: int, body: s.AnnouncementAck, session: Session = Depends(get_session), user: User = Depends(get_current_user), ) -> s.OkResponse: announcement_service.acknowledge(session, user.id, announcement_id, body.revision) # type: ignore[arg-type] session.commit() return s.OkResponse()