1use crate::object::{EventType, Payload, EventId};
2use time::OffsetDateTime;
3use uuid::Uuid;
4
5#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
6pub struct Event {
7 pub id: EventId,
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) -> Self {
16 Self {
17 id: EventId::default(),
18 event_type,
19 payload,
20 created_at: OffsetDateTime::now_utc(),
21 locked_until: OffsetDateTime::UNIX_EPOCH,
22 status: EventStatus::Pending,
23 }
24 }
25 pub fn load(
26 id: Uuid,
27 event_type: &String,
28 payload: &serde_json::Value,
29 created_at: OffsetDateTime,
30 locked_until: OffsetDateTime,
31 status: &EventStatus
32 ) -> Self {
33 Self {
34 id: EventId::load(id),
35 event_type: EventType::load(event_type),
36 payload: Payload::load(payload),
37 created_at,
38 locked_until,
39 status: status.clone(),
40 }
41 }
42}
43
44#[cfg_attr(feature = "sqlx", derive(Debug, sqlx::Type))]
45#[cfg_attr(
46 feature = "sqlx",
47 sqlx(type_name = "status", rename_all = "PascalCase")
48)]
49#[derive(Clone)]
50pub enum EventStatus {
51 Pending,
53 Processing,
54 Sent,
55}