1use crate::object::{EventType, Payload, EventId, IdempotencyToken};
2use time::OffsetDateTime;
3
4#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
5pub struct Event {
6 pub id: EventId,
7 pub idempotency_token: Option<IdempotencyToken>,
8 pub event_type: EventType,
9 pub payload: Payload,
10 pub created_at: OffsetDateTime,
11 pub locked_until: OffsetDateTime,
12 pub status: EventStatus,
13}
14impl Event {
15 pub fn new(event_type: EventType, payload: Payload, idempotency_token: Option<IdempotencyToken>) -> Self {
16 Self {
17 id: EventId::default(),
18 idempotency_token,
19 event_type,
20 payload,
21 created_at: OffsetDateTime::now_utc(),
22 locked_until: OffsetDateTime::UNIX_EPOCH,
23 status: EventStatus::Pending,
24 }
25 }
26}
27
28#[cfg_attr(feature = "sqlx", derive(Debug, sqlx::Type))]
29#[cfg_attr(
30 feature = "sqlx",
31 sqlx(type_name = "status", rename_all = "PascalCase")
32)]
33#[derive(Clone)]
34pub enum EventStatus {
35 Pending,
37 Processing,
38 Sent,
39}