Skip to main content

alibi_seaorm/
conversions.rs

1use crate::store::entities;
2use alibi_core::{
3    ApiKey, DeviceCode, Invitation, InvitationStatus, Member, Organization, Passkey, TwoFactor,
4};
5use chrono::{DateTime, Utc};
6
7impl From<&entities::organization::Model> for Organization {
8    fn from(model: &entities::organization::Model) -> Self {
9        Self {
10            additional_fields: std::collections::BTreeMap::default(),
11            id: model.id.clone(),
12            name: model.name.clone(),
13            slug: model.slug.clone(),
14            logo: model.logo.clone(),
15            metadata: model.metadata.as_ref().map(|metadata| (**metadata).clone()),
16            created_at: model.created_at,
17            updated_at: model.updated_at,
18        }
19    }
20}
21
22impl From<&entities::member::Model> for Member {
23    fn from(model: &entities::member::Model) -> Self {
24        Self {
25            id: model.id.clone(),
26            organization_id: model.organization_id.clone(),
27            user_id: model.user_id.clone(),
28            role: model.role.clone(),
29            created_at: model.created_at,
30        }
31    }
32}
33
34impl From<&entities::invitation::Model> for Invitation {
35    fn from(model: &entities::invitation::Model) -> Self {
36        Self {
37            id: model.id.clone(),
38            organization_id: model.organization_id.clone(),
39            email: model.email.clone(),
40            role: Some(model.role.clone()),
41            team_id: model.team_id.clone(),
42            status: InvitationStatus::from(model.status.clone()),
43            inviter_id: model.inviter_id.clone(),
44            expires_at: model.expires_at,
45            created_at: model.created_at,
46        }
47    }
48}
49
50impl From<&entities::two_factor::Model> for TwoFactor {
51    fn from(model: &entities::two_factor::Model) -> Self {
52        Self {
53            id: model.id.clone(),
54            secret: model.secret.clone(),
55            backup_codes: model.backup_codes.clone(),
56            user_id: model.user_id.clone(),
57            verified: model.verified,
58            failed_verification_count: model.failed_verification_count,
59            locked_until: model.locked_until,
60            created_at: model.created_at,
61            updated_at: model.updated_at,
62        }
63    }
64}
65
66impl From<&entities::api_key::Model> for ApiKey {
67    fn from(model: &entities::api_key::Model) -> Self {
68        Self {
69            id: model.id.clone(),
70            name: model.name.clone(),
71            start: model.start.as_ref().map(|start| start.as_str().to_owned()),
72            prefix: model.prefix.clone(),
73            key_hash: model.key_hash.clone(),
74            reference_id: model.reference_id.clone(),
75            config_id: model.config_id.clone(),
76            refill_interval: model.refill_interval,
77            refill_amount: model.refill_amount,
78            last_refill_at: model.last_refill_at.map(to_rfc3339),
79            enabled: model.enabled,
80            rate_limit_enabled: model.rate_limit_enabled,
81            rate_limit_time_window: model.rate_limit_time_window,
82            rate_limit_max: model.rate_limit_max,
83            request_count: model.request_count,
84            remaining: model.remaining,
85            last_request: model.last_request.map(to_rfc3339),
86            expires_at: model.expires_at.map(to_rfc3339),
87            created_at: to_rfc3339(model.created_at),
88            updated_at: to_rfc3339(model.updated_at),
89            permissions: model.permissions.clone(),
90            metadata: model.metadata.clone(),
91        }
92    }
93}
94
95impl From<&entities::passkey::Model> for Passkey {
96    fn from(model: &entities::passkey::Model) -> Self {
97        Self {
98            id: model.id.clone(),
99            name: model.name.clone(),
100            public_key: model.public_key.clone(),
101            user_id: model.user_id.clone(),
102            credential_id: model.credential_id.clone(),
103            counter: u64::try_from(model.counter).unwrap_or_default(),
104            device_type: model.device_type.clone(),
105            backed_up: model.backed_up,
106            transports: model.transports.clone(),
107            created_at: model.created_at,
108            updated_at: model.updated_at,
109            aaguid: model.aaguid.clone(),
110            credential: model.credential.clone(),
111        }
112    }
113}
114
115impl From<&entities::device_code::Model> for DeviceCode {
116    fn from(model: &entities::device_code::Model) -> Self {
117        Self {
118            id: model.id.clone(),
119            device_code: model.device_code.clone(),
120            user_code: model.user_code.clone(),
121            user_id: model.user_id.clone(),
122            expires_at: model.expires_at,
123            status: model.status.clone(),
124            last_polled_at: model.last_polled_at,
125            polling_interval: model.polling_interval,
126            client_id: model.client_id.clone(),
127            scope: model.scope.clone(),
128        }
129    }
130}
131
132fn to_rfc3339(value: DateTime<Utc>) -> String {
133    value.to_rfc3339()
134}