1use crate::object::{EventId, EventType, IdempotencyToken, Payload};
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(
16 event_type: EventType,
17 payload: Payload,
18 idempotency_token: Option<IdempotencyToken>,
19 ) -> Self {
20 Self {
21 id: EventId::default(),
22 idempotency_token,
23 event_type,
24 payload,
25 created_at: OffsetDateTime::now_utc(),
26 locked_until: OffsetDateTime::UNIX_EPOCH,
27 status: EventStatus::Pending,
28 }
29 }
30}
31
32#[cfg_attr(feature = "sqlx", derive(Debug, sqlx::Type))]
33#[cfg_attr(
34 feature = "sqlx",
35 sqlx(type_name = "status", rename_all = "PascalCase")
36)]
37#[derive(Clone, PartialEq)]
38pub enum EventStatus {
39 Pending,
41 Processing,
42 Sent,
43}