core: type user and auth session timestamps

This commit is contained in:
a.tolmachev
2026-04-12 22:11:43 +00:00
parent 624224f089
commit e03d4da925
14 changed files with 156 additions and 44 deletions
+44 -1
View File
@@ -1,4 +1,5 @@
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
use crate::ids::{InvitationId, PlatformApiKeyId, UserId, WorkspaceId};
@@ -48,7 +49,8 @@ pub struct User {
pub email: String,
pub display_name: String,
pub status: UserStatus,
pub created_at: String,
#[serde(with = "time::serde::rfc3339")]
pub created_at: OffsetDateTime,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
@@ -82,3 +84,44 @@ pub struct PlatformApiKey {
pub created_at: String,
pub last_used_at: Option<String>,
}
#[cfg(test)]
mod tests {
use serde_json::json;
use time::{OffsetDateTime, format_description::well_known::Rfc3339};
use super::{User, UserStatus};
use crate::ids::UserId;
#[test]
fn user_serializes_created_at_as_rfc3339() {
let user = User {
id: UserId::new("user_01"),
email: "owner@example.com".to_owned(),
display_name: "Owner".to_owned(),
status: UserStatus::Active,
created_at: OffsetDateTime::parse("2026-03-25T12:00:00Z", &Rfc3339).unwrap(),
};
let value = serde_json::to_value(&user).unwrap();
assert_eq!(value["created_at"], json!("2026-03-25T12:00:00Z"));
}
#[test]
fn user_deserializes_created_at_from_rfc3339() {
let user: User = serde_json::from_value(json!({
"id": "user_01",
"email": "owner@example.com",
"display_name": "Owner",
"status": "active",
"created_at": "2026-03-25T12:00:00Z"
}))
.unwrap();
assert_eq!(
user.created_at,
OffsetDateTime::parse("2026-03-25T12:00:00Z", &Rfc3339).unwrap()
);
}
}