Skip to main content

openauth_core/db/
models.rs

1use serde::{Deserialize, Serialize};
2use time::OffsetDateTime;
3
4/// Core user record.
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6pub struct User {
7    pub id: String,
8    pub name: String,
9    pub email: String,
10    pub email_verified: bool,
11    pub image: Option<String>,
12    #[serde(default)]
13    pub username: Option<String>,
14    #[serde(default, alias = "displayUsername")]
15    pub display_username: Option<String>,
16    pub created_at: OffsetDateTime,
17    pub updated_at: OffsetDateTime,
18}
19
20/// Linked credential, OAuth, or social provider account.
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
22pub struct Account {
23    pub id: String,
24    pub provider_id: String,
25    pub account_id: String,
26    pub user_id: String,
27    pub access_token: Option<String>,
28    pub refresh_token: Option<String>,
29    pub id_token: Option<String>,
30    pub access_token_expires_at: Option<OffsetDateTime>,
31    pub refresh_token_expires_at: Option<OffsetDateTime>,
32    pub scope: Option<String>,
33    pub password: Option<String>,
34    pub created_at: OffsetDateTime,
35    pub updated_at: OffsetDateTime,
36}
37
38/// Persisted user session.
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct Session {
41    pub id: String,
42    pub user_id: String,
43    pub expires_at: OffsetDateTime,
44    pub token: String,
45    pub ip_address: Option<String>,
46    pub user_agent: Option<String>,
47    pub created_at: OffsetDateTime,
48    pub updated_at: OffsetDateTime,
49}
50
51/// Verification token or value used by flows such as email verification.
52#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
53pub struct Verification {
54    pub id: String,
55    pub identifier: String,
56    pub value: String,
57    pub expires_at: OffsetDateTime,
58    pub created_at: OffsetDateTime,
59    pub updated_at: OffsetDateTime,
60}
61
62/// Database-backed rate limit bucket.
63#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
64pub struct RateLimit {
65    pub key: String,
66    pub count: u64,
67    pub last_request: i64,
68}