use crate::sql::Auto;
use crate::Model;
#[derive(Model, Debug, Clone)]
#[rustango(
table = "rustango_admin_users",
app = "admin",
display = "username",
admin(
list_display = "username, is_superuser, active, created_at",
search_fields = "username",
ordering = "username",
)
)]
pub struct AdminUser {
#[rustango(primary_key)]
pub id: Auto<i64>,
#[rustango(max_length = 150, unique)]
pub username: String,
#[rustango(max_length = 200)]
pub password_hash: String,
#[rustango(default = "false")]
pub is_superuser: bool,
#[rustango(default = "true")]
pub active: bool,
pub created_at: chrono::DateTime<chrono::Utc>,
}
impl AdminUser {
pub fn new_with_password(
username: impl Into<String>,
password: &str,
is_superuser: bool,
) -> Result<Self, crate::passwords::PasswordError> {
Ok(Self {
id: Auto::Unset,
username: username.into(),
password_hash: crate::passwords::hash(password)?,
is_superuser,
active: true,
created_at: chrono::Utc::now(),
})
}
}