diff --git a/src/server/axum/api.rs b/src/server/axum/api.rs index 42b1b06..be0aec8 100644 --- a/src/server/axum/api.rs +++ b/src/server/axum/api.rs @@ -35,10 +35,9 @@ pub fn router() -> OpenApiRouter { .routes(routes!(post_trigger_index)) .routes(routes!(get_index_status)) // User management - .route("/user", post(post_user)) - .route("/user/{name}", delete(delete_user)) - .route("/user/{name}", put(put_user)) - .route("/users", get(get_users)) + .routes(routes!(post_user)) + .routes(routes!(delete_user, put_user)) + .routes(routes!(get_users)) // File browser .route("/browse", get(get_browse_root)) .route("/browse/{*path}", get(get_browse)) @@ -229,6 +228,13 @@ async fn post_auth( Ok(Json(authorization)) } +#[utoipa::path( + get, + path = "/users", + responses( + (status = 200, body = Vec), + ), +)] async fn get_users( _admin_rights: AdminRights, State(config_manager): State, @@ -238,6 +244,16 @@ async fn get_users( Ok(Json(users)) } +#[utoipa::path( + post, + path = "/user", + request_body = dto::NewUser, + responses( + (status = 200), + (status = 400), + (status = 409) + ) +)] async fn post_user( _admin_rights: AdminRights, State(config_manager): State, @@ -249,6 +265,16 @@ async fn post_user( Ok(()) } +#[utoipa::path( + put, + path = "/user/{name}", + request_body = dto::UserUpdate, + responses( + (status = 200), + (status = 404), + (status = 409) + ) +)] async fn put_user( admin_rights: AdminRights, State(config_manager): State, @@ -272,6 +298,15 @@ async fn put_user( Ok(()) } +#[utoipa::path( + delete, + path = "/user/{name}", + responses( + (status = 200), + (status = 404), + (status = 409) + ) +)] async fn delete_user( admin_rights: AdminRights, State(config_manager): State, diff --git a/src/server/dto/v8.rs b/src/server/dto/v8.rs index c3f6953..49f221d 100644 --- a/src/server/dto/v8.rs +++ b/src/server/dto/v8.rs @@ -106,7 +106,7 @@ pub struct SavePlaylistInput { pub tracks: Vec, } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, ToSchema)] pub struct User { pub name: String, pub is_admin: bool, @@ -121,14 +121,14 @@ impl From for User { } } -#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, ToSchema)] pub struct NewUser { pub name: String, pub password: String, pub admin: bool, } -#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, ToSchema)] pub struct UserUpdate { pub new_password: Option, pub new_is_admin: Option,