use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct LoginRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
pub password: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RegisterRequest {
pub username: String,
pub password: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TokenResponse {
pub token: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct User {
pub username: String,
pub password_hash: String,
pub role: String,
pub permissions: Vec<String>,
pub created_at: u64,
pub last_login: Option<u64>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Role {
pub name: String,
pub permissions: Vec<String>,
pub description: Option<String>,
}
pub const TOKEN_KEY: &str = "auth_token";
pub const DEFAULT_TOKEN_TTL_SECONDS: u64 = 600;