Add the user deactivation state in the admin API

This commit is contained in:
Quentin Gliech
2025-06-02 11:54:16 +02:00
parent 770e4791f4
commit cd96b6324e
3 changed files with 34 additions and 5 deletions

View File

@@ -47,6 +47,9 @@ pub struct User {
/// When the user was locked. If null, the user is not locked.
locked_at: Option<DateTime<Utc>>,
/// When the user was deactivated. If null, the user is not deactivated.
deactivated_at: Option<DateTime<Utc>>,
/// Whether the user can request admin privileges.
admin: bool,
}
@@ -60,6 +63,7 @@ impl User {
username: "alice".to_owned(),
created_at: DateTime::default(),
locked_at: None,
deactivated_at: None,
admin: false,
},
Self {
@@ -67,6 +71,7 @@ impl User {
username: "bob".to_owned(),
created_at: DateTime::default(),
locked_at: None,
deactivated_at: None,
admin: true,
},
Self {
@@ -74,6 +79,7 @@ impl User {
username: "charlie".to_owned(),
created_at: DateTime::default(),
locked_at: Some(DateTime::default()),
deactivated_at: None,
admin: false,
},
]
@@ -87,6 +93,7 @@ impl From<mas_data_model::User> for User {
username: user.username,
created_at: user.created_at,
locked_at: user.locked_at,
deactivated_at: user.deactivated_at,
admin: user.can_request_admin,
}
}

View File

@@ -32,6 +32,7 @@ use crate::{
enum UserStatus {
Active,
Locked,
Deactivated,
}
impl std::fmt::Display for UserStatus {
@@ -39,6 +40,7 @@ impl std::fmt::Display for UserStatus {
match self {
Self::Active => write!(f, "active"),
Self::Locked => write!(f, "locked"),
Self::Deactivated => write!(f, "deactivated"),
}
}
}
@@ -58,7 +60,9 @@ pub struct FilterParams {
///
/// * `active`: Only retrieve active users
///
/// * `locked`: Only retrieve locked users
/// * `locked`: Only retrieve locked users (includes deactivated users)
///
/// * `deactivated`: Only retrieve deactivated users
#[serde(rename = "filter[status]")]
status: Option<UserStatus>,
}
@@ -142,6 +146,7 @@ pub async fn handler(
let filter = match params.status {
Some(UserStatus::Active) => filter.active_only(),
Some(UserStatus::Locked) => filter.locked_only(),
Some(UserStatus::Deactivated) => filter.deactivated_only(),
None => filter,
};

View File

@@ -873,9 +873,9 @@
{
"in": "query",
"name": "filter[status]",
"description": "Retrieve the items with the given status\n\nDefaults to retrieve all users, including locked ones.\n\n* `active`: Only retrieve active users\n\n* `locked`: Only retrieve locked users",
"description": "Retrieve the items with the given status\n\nDefaults to retrieve all users, including locked ones.\n\n* `active`: Only retrieve active users\n\n* `locked`: Only retrieve locked users (includes deactivated users)\n\n* `deactivated`: Only retrieve deactivated users",
"schema": {
"description": "Retrieve the items with the given status\n\nDefaults to retrieve all users, including locked ones.\n\n* `active`: Only retrieve active users\n\n* `locked`: Only retrieve locked users",
"description": "Retrieve the items with the given status\n\nDefaults to retrieve all users, including locked ones.\n\n* `active`: Only retrieve active users\n\n* `locked`: Only retrieve locked users (includes deactivated users)\n\n* `deactivated`: Only retrieve deactivated users",
"$ref": "#/components/schemas/UserStatus",
"nullable": true
},
@@ -902,6 +902,7 @@
"username": "alice",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": null,
"deactivated_at": null,
"admin": false
},
"links": {
@@ -915,6 +916,7 @@
"username": "bob",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": null,
"deactivated_at": null,
"admin": true
},
"links": {
@@ -928,6 +930,7 @@
"username": "charlie",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": "1970-01-01T00:00:00Z",
"deactivated_at": null,
"admin": false
},
"links": {
@@ -979,6 +982,7 @@
"username": "alice",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": null,
"deactivated_at": null,
"admin": false
},
"links": {
@@ -1064,6 +1068,7 @@
"username": "alice",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": null,
"deactivated_at": null,
"admin": false
},
"links": {
@@ -1220,6 +1225,7 @@
"username": "alice",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": null,
"deactivated_at": null,
"admin": false
},
"links": {
@@ -1299,6 +1305,7 @@
"username": "bob",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": null,
"deactivated_at": null,
"admin": true
},
"links": {
@@ -1368,6 +1375,7 @@
"username": "charlie",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": "1970-01-01T00:00:00Z",
"deactivated_at": null,
"admin": false
},
"links": {
@@ -1437,6 +1445,7 @@
"username": "charlie",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": "1970-01-01T00:00:00Z",
"deactivated_at": null,
"admin": false
},
"links": {
@@ -1505,6 +1514,7 @@
"username": "alice",
"created_at": "1970-01-01T00:00:00Z",
"locked_at": null,
"deactivated_at": null,
"admin": false
},
"links": {
@@ -3132,7 +3142,7 @@
"nullable": true
},
"filter[status]": {
"description": "Retrieve the items with the given status\n\nDefaults to retrieve all users, including locked ones.\n\n* `active`: Only retrieve active users\n\n* `locked`: Only retrieve locked users",
"description": "Retrieve the items with the given status\n\nDefaults to retrieve all users, including locked ones.\n\n* `active`: Only retrieve active users\n\n* `locked`: Only retrieve locked users (includes deactivated users)\n\n* `deactivated`: Only retrieve deactivated users",
"$ref": "#/components/schemas/UserStatus",
"nullable": true
}
@@ -3142,7 +3152,8 @@
"type": "string",
"enum": [
"active",
"locked"
"locked",
"deactivated"
]
},
"PaginatedResponse_for_User": {
@@ -3223,6 +3234,12 @@
"format": "date-time",
"nullable": true
},
"deactivated_at": {
"description": "When the user was deactivated. If null, the user is not deactivated.",
"type": "string",
"format": "date-time",
"nullable": true
},
"admin": {
"description": "Whether the user can request admin privileges.",
"type": "boolean"