Handle POST /databases - create a new database.
(
Extension(state): Extension<Arc<RESTServer>>,
Json(payload): Json<serde_json::Value>,
)
| 134 | } |
| 135 | /// Handle POST /databases - create a new database. |
| 136 | pub async fn create_database( |
| 137 | Extension(state): Extension<Arc<RESTServer>>, |
| 138 | Json(payload): Json<serde_json::Value>, |
| 139 | ) -> impl IntoResponse { |
| 140 | let name = match payload.get("name").and_then(|n| n.as_str()) { |
| 141 | Some(n) => n.to_string(), |
| 142 | None => { |
| 143 | let err = |
| 144 | ErrorResponse::new(None, None, Some("Missing name".to_string()), Some(400)); |
| 145 | return (StatusCode::BAD_REQUEST, Json(err)).into_response(); |
| 146 | } |
| 147 | }; |
| 148 | |
| 149 | let mut s = state.inner.lock().unwrap(); |
| 150 | if let std::collections::hash_map::Entry::Vacant(e) = s.databases.entry(name.clone()) { |
| 151 | let response = GetDatabaseResponse::new( |
| 152 | Some(name.clone()), |
| 153 | Some(name.clone()), |
| 154 | None, |
| 155 | HashMap::new(), |
| 156 | AuditRESTResponse::new(None, None, None, None, None), |
| 157 | ); |
| 158 | e.insert(response); |
| 159 | (StatusCode::OK, Json(serde_json::json!(""))).into_response() |
| 160 | } else { |
| 161 | let err = ErrorResponse::new( |
| 162 | Some("database".to_string()), |
| 163 | Some(name), |
| 164 | Some("Already Exists".to_string()), |
| 165 | Some(409), |
| 166 | ); |
| 167 | (StatusCode::CONFLICT, Json(err)).into_response() |
| 168 | } |
| 169 | } |
| 170 | /// Handle GET /databases/:name - get a specific database. |
| 171 | pub async fn get_database( |
| 172 | Path(name): Path<String>, |
no test coverage detected