backbone_integrations/domain/entity/
mod.rs1pub mod integration_connector;
6pub mod integration_account;
7pub mod integration_event;
8pub mod connector_kind;
9pub mod connector_direction;
10pub mod connector_status;
11pub mod o_auth_provider;
12pub mod integration_account_status;
13pub mod integration_status;
14
15pub use integration_connector::IntegrationConnector;
17pub use integration_connector::IntegrationConnectorBuilder;
18pub use integration_connector::IntegrationConnectorId;
19pub use integration_account::IntegrationAccount;
20pub use integration_account::IntegrationAccountBuilder;
21pub use integration_account::IntegrationAccountId;
22pub use integration_event::IntegrationEvent;
23pub use integration_event::IntegrationEventBuilder;
24pub use integration_event::IntegrationEventId;
25pub use connector_kind::ConnectorKind;
26pub use connector_direction::ConnectorDirection;
27pub use connector_status::ConnectorStatus;
28pub use o_auth_provider::OAuthProvider;
29pub use integration_account_status::IntegrationAccountStatus;
30pub use integration_status::IntegrationStatus;
31
32use std::fmt::Debug;
37
38pub trait Entity: Debug + Clone {
43 type Id: Debug + Clone + PartialEq;
45
46 fn entity_id(&self) -> &Self::Id;
48
49 fn entity_type() -> &'static str;
51}
52
53use chrono::{DateTime, Utc};
58use serde::{Deserialize, Serialize};
59use uuid::Uuid;
60#[cfg(feature = "openapi")]
61use utoipa::ToSchema;
62
63#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
68#[cfg_attr(feature = "openapi", derive(ToSchema))]
69pub struct AuditMetadata {
70 #[serde(skip_serializing_if = "Option::is_none")]
72 pub created_at: Option<DateTime<Utc>>,
73
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub updated_at: Option<DateTime<Utc>>,
77
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub deleted_at: Option<DateTime<Utc>>,
81
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub created_by: Option<Uuid>,
85
86 #[serde(skip_serializing_if = "Option::is_none")]
88 pub updated_by: Option<Uuid>,
89
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub deleted_by: Option<Uuid>,
93}
94
95impl AuditMetadata {
96 pub fn new() -> Self {
98 Self {
99 created_at: Some(Utc::now()),
100 ..Default::default()
101 }
102 }
103
104 pub fn with_creator(creator_id: Uuid) -> Self {
106 Self {
107 created_at: Some(Utc::now()),
108 created_by: Some(creator_id),
109 ..Default::default()
110 }
111 }
112
113 pub fn touch(&mut self) {
115 self.updated_at = Some(Utc::now());
116 }
117
118 pub fn touch_by(&mut self, updater_id: Uuid) {
120 self.updated_at = Some(Utc::now());
121 self.updated_by = Some(updater_id);
122 }
123
124 pub fn soft_delete(&mut self) {
126 self.deleted_at = Some(Utc::now());
127 }
128
129 pub fn soft_delete_by(&mut self, deleter_id: Uuid) {
131 self.deleted_at = Some(Utc::now());
132 self.deleted_by = Some(deleter_id);
133 }
134
135 pub fn restore(&mut self) {
137 self.deleted_at = None;
138 self.deleted_by = None;
139 }
140
141 pub fn is_deleted(&self) -> bool {
143 self.deleted_at.is_some()
144 }
145
146 pub fn is_active(&self) -> bool {
148 self.deleted_at.is_none()
149 }
150}