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 = "api_keys")]
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 pub reference_id: String,
16 pub config_id: String,
17 pub refill_interval: Option<f64>,
18 pub refill_amount: Option<f64>,
19 pub last_refill_at: Option<DateTime<Utc>>,
20 pub enabled: bool,
21 pub rate_limit_enabled: bool,
22 pub rate_limit_time_window: Option<f64>,
23 pub rate_limit_max: Option<f64>,
24 pub request_count: Option<f64>,
25 pub remaining: Option<f64>,
26 pub last_request: Option<DateTime<Utc>>,
27 pub expires_at: Option<DateTime<Utc>>,
28 pub created_at: DateTime<Utc>,
29 pub updated_at: DateTime<Utc>,
30 pub permissions: Option<String>,
31 pub metadata: Option<String>,
32}
33
34fn to_rfc3339(value: DateTime<Utc>) -> String {
35 value.to_rfc3339()
36}
37
38impl From<&Model> for ApiKey {
39 fn from(model: &Model) -> Self {
40 Self {
41 id: model.id.clone(),
42 name: model.name.clone(),
43 start: model.start.as_ref().map(|start| start.as_str().to_owned()),
44 prefix: model.prefix.clone(),
45 key_hash: model.key_hash.clone(),
46 reference_id: model.reference_id.clone(),
47 config_id: model.config_id.clone(),
48 refill_interval: model.refill_interval,
49 refill_amount: model.refill_amount,
50 last_refill_at: model.last_refill_at.map(to_rfc3339),
51 enabled: model.enabled,
52 rate_limit_enabled: model.rate_limit_enabled,
53 rate_limit_time_window: model.rate_limit_time_window,
54 rate_limit_max: model.rate_limit_max,
55 request_count: model.request_count,
56 remaining: model.remaining,
57 last_request: model.last_request.map(to_rfc3339),
58 expires_at: model.expires_at.map(to_rfc3339),
59 created_at: to_rfc3339(model.created_at),
60 updated_at: to_rfc3339(model.updated_at),
61 permissions: model.permissions.clone(),
62 metadata: model.metadata.clone(),
63 }
64 }
65}