feat(export): add space invites export
zhenyi committed
Added lib/export/space/invites.rs lib/export/space/invites.rs +66 −0 View lib/export/space/invites.rs
@@ -0,0 +1,66 @@
1use db::space::space_invite as invite_entity;
2use serde::{Deserialize, Serialize};
3use time::OffsetDateTime;
4use time::format_description::well_known::Rfc3339;
5use utoipa::ToSchema;
6use uuid::Uuid;
7
8fn fmt_ts(ts: OffsetDateTime) -> String {
9 ts.format(&Rfc3339).unwrap_or_default()
10}
11
12fn fmt_ts_opt(ts: Option<OffsetDateTime>) -> Option<String> {
13 ts.map(fmt_ts)
14}
15
16#[derive(Debug, Clone, Serialize, ToSchema)]
17pub struct SpaceInviteView {
18 pub id: Uuid,
19 pub space_id: Uuid,
20 pub user_id: Uuid,
21 pub email: String,
22 pub role_ids: Vec<Uuid>,
23 pub created_at: String,
24 pub expires_at: Option<String>,
25 pub accepted_at: Option<String>,
26 pub revoked_at: Option<String>,
27}
28
29impl From<invite_entity::Model> for SpaceInviteView {
30 fn from(m: invite_entity::Model) -> Self {
31 SpaceInviteView {
32 id: m.id,
33 space_id: m.space_id,
34 user_id: m.user_id,
35 email: m.email,
36 role_ids: m
37 .role_ids
38 .split(',')
39 .filter_map(|s| Uuid::parse_str(s).ok())
40 .collect(),
41 created_at: fmt_ts(m.created_at),
42 expires_at: fmt_ts_opt(m.expires_at),
43 accepted_at: fmt_ts_opt(m.accepted_at),
44 revoked_at: fmt_ts_opt(m.revoked_at),
45 }
46 }
47}
48
49#[derive(Debug, Clone, Deserialize, ToSchema)]
50pub struct CreateInviteCmd {
51 pub user_id: Option<Uuid>,
52 pub email: Option<String>,
53 pub role_ids: Vec<Uuid>,
54 pub expires_at: Option<String>,
55}
56
57#[derive(Debug, Clone, Deserialize, ToSchema)]
58pub struct AcceptInviteCmd {
59 pub accept_code: String,
60}
61
62#[derive(Debug, Clone, Serialize, ToSchema)]
63pub struct SpaceInvitePage {
64 pub items: Vec<SpaceInviteView>,
65 pub total: i64,
66}
No newline at end of file