pub mod access_log;
pub mod bucket;
pub mod content_hash;
pub mod conversion_job;
pub mod file_comment;
pub mod file_lock;
pub mod file_share;
pub mod file_version;
pub mod processing_job;
pub mod stored_file;
pub mod thumbnail;
pub mod upload_session;
pub mod user_quota;
pub mod bucket_type;
pub mod bucket_status;
pub mod storage_backend;
pub mod hash_algorithm;
pub mod conversion_status;
pub mod conversion_type;
pub mod comment_status;
pub mod lock_status;
pub mod share_type;
pub mod share_status;
pub mod share_permission;
pub mod version_type;
pub mod file_version_status;
pub mod processing_job_type;
pub mod job_status;
pub mod file_status;
pub mod threat_level;
pub mod access_action;
pub mod processing_status;
pub mod thumbnail_size;
pub mod upload_status;
pub mod quota_status;
pub use access_log::AccessLog;
pub use access_log::AccessLogBuilder;
pub use access_log::AccessLogId;
pub use bucket::Bucket;
pub use bucket::BucketBuilder;
pub use bucket::BucketId;
pub use content_hash::ContentHash;
pub use content_hash::ContentHashBuilder;
pub use content_hash::ContentHashId;
pub use conversion_job::ConversionJob;
pub use conversion_job::ConversionJobBuilder;
pub use conversion_job::ConversionJobId;
pub use file_comment::FileComment;
pub use file_comment::FileCommentBuilder;
pub use file_comment::FileCommentId;
pub use file_lock::FileLock;
pub use file_lock::FileLockBuilder;
pub use file_lock::FileLockId;
pub use file_share::FileShare;
pub use file_share::FileShareBuilder;
pub use file_share::FileShareId;
pub use file_version::FileVersion;
pub use file_version::FileVersionBuilder;
pub use file_version::FileVersionId;
pub use processing_job::ProcessingJob;
pub use processing_job::ProcessingJobBuilder;
pub use processing_job::ProcessingJobId;
pub use stored_file::StoredFile;
pub use stored_file::StoredFileBuilder;
pub use stored_file::StoredFileId;
pub use thumbnail::Thumbnail;
pub use thumbnail::ThumbnailBuilder;
pub use thumbnail::ThumbnailId;
pub use upload_session::UploadSession;
pub use upload_session::UploadSessionBuilder;
pub use upload_session::UploadSessionId;
pub use user_quota::UserQuota;
pub use user_quota::UserQuotaBuilder;
pub use user_quota::UserQuotaId;
pub use bucket_type::BucketType;
pub use bucket_status::BucketStatus;
pub use storage_backend::StorageBackend;
pub use hash_algorithm::HashAlgorithm;
pub use conversion_status::ConversionStatus;
pub use conversion_type::ConversionType;
pub use comment_status::CommentStatus;
pub use lock_status::LockStatus;
pub use share_type::ShareType;
pub use share_status::ShareStatus;
pub use share_permission::SharePermission;
pub use version_type::VersionType;
pub use file_version_status::FileVersionStatus;
pub use processing_job_type::ProcessingJobType;
pub use job_status::JobStatus;
pub use file_status::FileStatus;
pub use threat_level::ThreatLevel;
pub use access_action::AccessAction;
pub use processing_status::ProcessingStatus;
pub use thumbnail_size::ThumbnailSize;
pub use upload_status::UploadStatus;
pub use quota_status::QuotaStatus;
use std::fmt::Debug;
pub trait Entity: Debug + Clone {
type Id: Debug + Clone + PartialEq;
fn entity_id(&self) -> &Self::Id;
fn entity_type() -> &'static str;
}
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[cfg(feature = "openapi")]
use utoipa::ToSchema;
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct AuditMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deleted_at: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_by: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_by: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deleted_by: Option<Uuid>,
}
impl AuditMetadata {
pub fn new() -> Self {
Self {
created_at: Some(Utc::now()),
..Default::default()
}
}
pub fn with_creator(creator_id: Uuid) -> Self {
Self {
created_at: Some(Utc::now()),
created_by: Some(creator_id),
..Default::default()
}
}
pub fn touch(&mut self) {
self.updated_at = Some(Utc::now());
}
pub fn touch_by(&mut self, updater_id: Uuid) {
self.updated_at = Some(Utc::now());
self.updated_by = Some(updater_id);
}
pub fn soft_delete(&mut self) {
self.deleted_at = Some(Utc::now());
}
pub fn soft_delete_by(&mut self, deleter_id: Uuid) {
self.deleted_at = Some(Utc::now());
self.deleted_by = Some(deleter_id);
}
pub fn restore(&mut self) {
self.deleted_at = None;
self.deleted_by = None;
}
pub fn is_deleted(&self) -> bool {
self.deleted_at.is_some()
}
pub fn is_active(&self) -> bool {
self.deleted_at.is_none()
}
}