use diesel::{AsChangeset, Identifiable, Insertable, Queryable};
use time::PrimitiveDateTime;
use crate::schema::api_keys;
#[derive(Debug, Clone, Queryable, Identifiable)]
#[diesel(table_name = api_keys)]
pub struct ApiKey {
pub id: i32,
pub name: String,
pub key_hash: String,
pub permissions: String,
pub created_at: PrimitiveDateTime,
pub last_used_at: Option<PrimitiveDateTime>,
pub revoked_at: Option<PrimitiveDateTime>,
pub expires_at: Option<PrimitiveDateTime>,
}
impl ApiKey {
pub fn is_active(&self) -> bool {
self.revoked_at.is_none()
}
}
#[derive(Debug, Insertable)]
#[diesel(table_name = api_keys)]
pub struct NewApiKey<'a> {
pub name: &'a str,
pub key_hash: &'a str,
pub permissions: &'a str,
}
#[derive(Debug, AsChangeset)]
#[diesel(table_name = api_keys)]
pub struct ApiKeyLastUsedChangeset {
pub last_used_at: Option<PrimitiveDateTime>,
}
#[derive(Debug, AsChangeset)]
#[diesel(table_name = api_keys)]
pub struct ApiKeyRevocationChangeset {
pub revoked_at: Option<PrimitiveDateTime>,
}