backbone_activity/domain/entity/
mod.rs1pub mod activity;
6pub mod activity_type;
7pub mod activity_status;
8pub mod activity_direction;
9
10pub use activity::Activity;
12pub use activity::ActivityBuilder;
13pub use activity::ActivityId;
14pub use activity_type::ActivityType;
15pub use activity_status::ActivityStatus;
16pub use activity_direction::ActivityDirection;
17
18use std::fmt::Debug;
23
24pub trait Entity: Debug + Clone {
29 type Id: Debug + Clone + PartialEq;
31
32 fn entity_id(&self) -> &Self::Id;
34
35 fn entity_type() -> &'static str;
37}
38
39use chrono::{DateTime, Utc};
44use serde::{Deserialize, Serialize};
45use uuid::Uuid;
46#[cfg(feature = "openapi")]
47use utoipa::ToSchema;
48
49#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
54#[cfg_attr(feature = "openapi", derive(ToSchema))]
55pub struct AuditMetadata {
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub created_at: Option<DateTime<Utc>>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub updated_at: Option<DateTime<Utc>>,
63
64 #[serde(skip_serializing_if = "Option::is_none")]
66 pub deleted_at: Option<DateTime<Utc>>,
67
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub created_by: Option<Uuid>,
71
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub updated_by: Option<Uuid>,
75
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub deleted_by: Option<Uuid>,
79}
80
81impl AuditMetadata {
82 pub fn new() -> Self {
84 Self {
85 created_at: Some(Utc::now()),
86 ..Default::default()
87 }
88 }
89
90 pub fn with_creator(creator_id: Uuid) -> Self {
92 Self {
93 created_at: Some(Utc::now()),
94 created_by: Some(creator_id),
95 ..Default::default()
96 }
97 }
98
99 pub fn touch(&mut self) {
101 self.updated_at = Some(Utc::now());
102 }
103
104 pub fn touch_by(&mut self, updater_id: Uuid) {
106 self.updated_at = Some(Utc::now());
107 self.updated_by = Some(updater_id);
108 }
109
110 pub fn soft_delete(&mut self) {
112 self.deleted_at = Some(Utc::now());
113 }
114
115 pub fn soft_delete_by(&mut self, deleter_id: Uuid) {
117 self.deleted_at = Some(Utc::now());
118 self.deleted_by = Some(deleter_id);
119 }
120
121 pub fn restore(&mut self) {
123 self.deleted_at = None;
124 self.deleted_by = None;
125 }
126
127 pub fn is_deleted(&self) -> bool {
129 self.deleted_at.is_some()
130 }
131
132 pub fn is_active(&self) -> bool {
134 self.deleted_at.is_none()
135 }
136}