Add the user deactivation state in the admin API
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user