alibi_sqlx/store/entities/
api_key.rs1use super::api_key_start::ApiKeyStart;
2use crate::SqlxModel;
3use alibi_core::ApiKey;
4use chrono::{DateTime, Utc};
5
6#[derive(Clone, Debug, PartialEq, sqlx::FromRow, SqlxModel)]
7#[auth(table = "apikey")]
8pub struct Model {
9 pub id: String,
10 pub name: Option<String>,
11 pub start: Option<ApiKeyStart>,
12 pub prefix: Option<String>,
13 #[sqlx(rename = "key")]
14 pub key_hash: String,
15 #[sqlx(rename = "referenceId")]
16 pub reference_id: String,
17 #[sqlx(rename = "configId")]
18 pub config_id: String,
19 #[sqlx(rename = "refillInterval")]
20 pub refill_interval: Option<crate::Number>,
21 #[sqlx(rename = "refillAmount")]
22 pub refill_amount: Option<crate::Number>,
23 #[sqlx(rename = "lastRefillAt")]
24 pub last_refill_at: Option<DateTime<Utc>>,
25 pub enabled: Option<bool>,
26 #[sqlx(rename = "rateLimitEnabled")]
27 pub rate_limit_enabled: Option<bool>,
28 #[sqlx(rename = "rateLimitTimeWindow")]
29 pub rate_limit_time_window: Option<crate::Number>,
30 #[sqlx(rename = "rateLimitMax")]
31 pub rate_limit_max: Option<crate::Number>,
32 #[sqlx(rename = "requestCount")]
33 pub request_count: Option<crate::Number>,
34 pub remaining: Option<crate::Number>,
35 #[sqlx(rename = "lastRequest")]
36 pub last_request: Option<DateTime<Utc>>,
37 #[sqlx(rename = "expiresAt")]
38 pub expires_at: Option<DateTime<Utc>>,
39 #[sqlx(rename = "createdAt")]
40 pub created_at: DateTime<Utc>,
41 #[sqlx(rename = "updatedAt")]
42 pub updated_at: DateTime<Utc>,
43 pub permissions: Option<String>,
44 pub metadata: Option<String>,
45}
46
47fn to_rfc3339(value: DateTime<Utc>) -> String {
48 value.to_rfc3339()
49}
50
51impl From<&Model> for ApiKey {
52 fn from(model: &Model) -> Self {
53 Self {
54 id: model.id.clone(),
55 name: model.name.clone(),
56 start: model.start.as_ref().map(|start| start.as_str().to_owned()),
57 prefix: model.prefix.clone(),
58 key_hash: model.key_hash.clone(),
59 reference_id: model.reference_id.clone(),
60 config_id: model.config_id.clone(),
61 refill_interval: model.refill_interval.map(|value| value.0),
62 refill_amount: model.refill_amount.map(|value| value.0),
63 last_refill_at: model.last_refill_at.map(to_rfc3339),
64 enabled: model.enabled.unwrap_or(false),
65 rate_limit_enabled: model.rate_limit_enabled.unwrap_or(false),
66 rate_limit_time_window: model.rate_limit_time_window.map(|value| value.0),
67 rate_limit_max: model.rate_limit_max.map(|value| value.0),
68 request_count: model.request_count.map(|value| value.0),
69 remaining: model.remaining.map(|value| value.0),
70 last_request: model.last_request.map(to_rfc3339),
71 expires_at: model.expires_at.map(to_rfc3339),
72 created_at: to_rfc3339(model.created_at),
73 updated_at: to_rfc3339(model.updated_at),
74 permissions: model.permissions.clone(),
75 metadata: model.metadata.clone(),
76 }
77 }
78}