alibi_seaorm/
conversions.rs1use 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}