use std::collections::BTreeMap;
use salvo::prelude::*;
use serde::{Deserialize, Serialize};
use crate::{OwnedUserId, UnixMillis};
#[derive(ToSchema, Serialize, Debug)]
pub struct UserInfoResBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub user_id: Option<OwnedUserId>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub devices: BTreeMap<String, DeviceInfo>,
}
#[derive(ToSchema, Clone, Debug, Default, Deserialize, Serialize)]
pub struct DeviceInfo {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sessions: Vec<SessionInfo>,
}
impl DeviceInfo {
pub fn new() -> Self {
Self::default()
}
}
#[derive(ToSchema, Clone, Debug, Default, Deserialize, Serialize)]
pub struct SessionInfo {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub connections: Vec<ConnectionInfo>,
}
impl SessionInfo {
pub fn new() -> Self {
Self::default()
}
}
#[derive(ToSchema, Clone, Debug, Default, Deserialize, Serialize)]
pub struct ConnectionInfo {
pub ip: Option<String>,
pub last_seen: Option<UnixMillis>,
pub user_agent: Option<String>,
}
impl ConnectionInfo {
pub fn new() -> Self {
Self::default()
}
}