"""Idempotent alert events emitted by scheduled and other backend tasks.""" from __future__ import annotations from typing import Literal from uuid import UUID from app.domain.schemas.shared import NonEmptyStr, PositiveInt, StrictModel from app.domain.schemas.workbench_runtime import WorkbenchAlertSource, WorkbenchDateTime class TaskAlertCommand(StrictModel): event_id: UUID alert_id: NonEmptyStr event_type: Literal["raised", "acknowledged", "resolved"] occurred_at: WorkbenchDateTime condition_id: NonEmptyStr | None source: WorkbenchAlertSource title: NonEmptyStr description: NonEmptyStr severity: Literal["warning", "critical"] class TaskAlertEvent(TaskAlertCommand): producer_id: NonEmptyStr class TaskAlertState(StrictModel): alert_id: NonEmptyStr revision: PositiveInt producer_id: NonEmptyStr condition_id: NonEmptyStr | None source: WorkbenchAlertSource title: NonEmptyStr description: NonEmptyStr occurred_at: WorkbenchDateTime severity: Literal["warning", "critical"] status: Literal["active", "acknowledged", "resolved"] updated_at: WorkbenchDateTime