"""Job lifecycle domain events.""" from __future__ import annotations from typing import Any, Dict, Optional from uuid import UUID from asf_events.base import ASFEvent class JobQueued(ASFEvent): event_type: str = "job.queued" job_id: UUID job_type: str queue: str payload: Dict[str, Any] = {} class JobStarted(ASFEvent): event_type: str = "job.started" job_id: UUID worker: Optional[str] = None payload: Dict[str, Any] = {} class JobCompleted(ASFEvent): event_type: str = "job.completed" job_id: UUID duration_ms: Optional[int] = None payload: Dict[str, Any] = {} class JobFailed(ASFEvent): event_type: str = "job.failed" job_id: UUID error: str payload: Dict[str, Any] = {} class JobCancelled(ASFEvent): event_type: str = "job.cancelled" job_id: UUID reason: Optional[str] = None payload: Dict[str, Any] = {}