Fix events

This commit is contained in:
Urtzi Alfaro
2025-07-17 19:03:11 +02:00
parent 013d32d00f
commit 599e335fbb
3 changed files with 355 additions and 36 deletions

View File

@@ -1,73 +1,122 @@
"""
Event definitions for microservices communication
- Simple class-based approach to avoid dataclass issues
"""
from dataclasses import dataclass
from datetime import datetime
from typing import Dict, Any, Optional
import uuid
@dataclass
class BaseEvent:
"""Base event class"""
event_id: str
event_type: str
service_name: str
timestamp: datetime
data: Dict[str, Any]
correlation_id: Optional[str] = None
def __post_init__(self):
if not self.event_id:
self.event_id = str(uuid.uuid4())
if not self.timestamp:
self.timestamp = datetime.now(datetime.timezone.utc)
def __init__(self, service_name: str, data: Dict[str, Any], event_type: str = "", correlation_id: Optional[str] = None):
self.service_name = service_name
self.data = data
self.event_type = event_type
self.event_id = str(uuid.uuid4())
self.timestamp = datetime.utcnow()
self.correlation_id = correlation_id
# Training Events
@dataclass
class TrainingStartedEvent(BaseEvent):
event_type: str = "training.started"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="training.started",
correlation_id=correlation_id
)
@dataclass
class TrainingCompletedEvent(BaseEvent):
event_type: str = "training.completed"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="training.completed",
correlation_id=correlation_id
)
@dataclass
class TrainingFailedEvent(BaseEvent):
event_type: str = "training.failed"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="training.failed",
correlation_id=correlation_id
)
# Forecasting Events
@dataclass
class ForecastGeneratedEvent(BaseEvent):
event_type: str = "forecast.generated"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="forecast.generated",
correlation_id=correlation_id
)
@dataclass
class ForecastRequestedEvent(BaseEvent):
event_type: str = "forecast.requested"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="forecast.requested",
correlation_id=correlation_id
)
# User Events
@dataclass
class UserRegisteredEvent(BaseEvent):
event_type: str = "user.registered"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="user.registered",
correlation_id=correlation_id
)
@dataclass
class UserLoginEvent(BaseEvent):
event_type: str = "user.login"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="user.login",
correlation_id=correlation_id
)
# Tenant Events
@dataclass
class TenantCreatedEvent(BaseEvent):
event_type: str = "tenant.created"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="tenant.created",
correlation_id=correlation_id
)
@dataclass
class TenantUpdatedEvent(BaseEvent):
event_type: str = "tenant.updated"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="tenant.updated",
correlation_id=correlation_id
)
# Notification Events
@dataclass
class NotificationSentEvent(BaseEvent):
event_type: str = "notification.sent"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="notification.sent",
correlation_id=correlation_id
)
@dataclass
class NotificationFailedEvent(BaseEvent):
event_type: str = "notification.failed"
def __init__(self, service_name: str, data: Dict[str, Any], correlation_id: Optional[str] = None):
super().__init__(
service_name=service_name,
data=data,
event_type="notification.failed",
correlation_id=correlation_id
)