feat(export): add user deletion export
zhenyi committed
Added lib/export/user/deletion.rs lib/export/user/deletion.rs +71 −0 View lib/export/user/deletion.rs
@@ -0,0 +1,71 @@
1use serde::{Deserialize, Serialize};
2use time::format_description::well_known::Rfc3339;
3use utoipa::ToSchema;
4use uuid::Uuid;
5
6#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema)]
7#[serde(rename_all = "snake_case")]
8pub enum DeletionStatus {
9 Pending,
10 Scheduled,
11 Completed,
12 Cancelled,
13}
14
15impl From<db::user::user_deletion_requests::UserDeletionRequestStatus> for DeletionStatus {
16 fn from(s: db::user::user_deletion_requests::UserDeletionRequestStatus) -> Self {
17 use db::user::user_deletion_requests::UserDeletionRequestStatus as Db;
18 match s {
19 Db::Pending => DeletionStatus::Pending,
20 Db::Scheduled => DeletionStatus::Scheduled,
21 Db::Completed => DeletionStatus::Completed,
22 Db::Cancelled => DeletionStatus::Cancelled,
23 }
24 }
25}
26
27impl From<DeletionStatus> for db::user::user_deletion_requests::UserDeletionRequestStatus {
28 fn from(s: DeletionStatus) -> Self {
29 use db::user::user_deletion_requests::UserDeletionRequestStatus as Db;
30 match s {
31 DeletionStatus::Pending => Db::Pending,
32 DeletionStatus::Scheduled => Db::Scheduled,
33 DeletionStatus::Completed => Db::Completed,
34 DeletionStatus::Cancelled => Db::Cancelled,
35 }
36 }
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
40pub struct DeletionRequestView {
41 pub id: Uuid,
42 pub user_id: Uuid,
43 pub reason: Option<String>,
44 pub status: DeletionStatus,
45 pub scheduled_for: Option<String>,
46 pub completed_at: Option<String>,
47 pub cancelled_at: Option<String>,
48 pub created_at: String,
49 pub updated_at: String,
50}
51
52impl From<db::user::user_deletion_requests::Model> for DeletionRequestView {
53 fn from(m: db::user::user_deletion_requests::Model) -> Self {
54 Self {
55 id: m.id,
56 user_id: m.user_id,
57 reason: m.reason,
58 status: m.status.into(),
59 scheduled_for: m.scheduled_for.map(|t| t.format(&Rfc3339).unwrap_or_default()),
60 completed_at: m.completed_at.map(|t| t.format(&Rfc3339).unwrap_or_default()),
61 cancelled_at: m.cancelled_at.map(|t| t.format(&Rfc3339).unwrap_or_default()),
62 created_at: m.created_at.format(&Rfc3339).unwrap_or_default(),
63 updated_at: m.updated_at.format(&Rfc3339).unwrap_or_default(),
64 }
65 }
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize, ToSchema, Default)]
69pub struct RequestDeletionCmd {
70 pub reason: Option<String>,
71}
No newline at end of file