return descriptive errors when saving bots
This commit is contained in:
parent
bd5dd17eb9
commit
148178a344
1 changed files with 27 additions and 3 deletions
|
@ -1,11 +1,13 @@
|
|||
use axum::body;
|
||||
use axum::extract::{Multipart, Path};
|
||||
use axum::http::StatusCode;
|
||||
use axum::response::{IntoResponse, Response};
|
||||
use axum::Json;
|
||||
use diesel::OptionalExtension;
|
||||
use rand::distributions::Alphanumeric;
|
||||
use rand::Rng;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::{json, value::Value as JsonValue};
|
||||
use serde_json::{self, json, value::Value as JsonValue};
|
||||
use std::io::Cursor;
|
||||
use std::path::PathBuf;
|
||||
|
||||
|
@ -20,16 +22,38 @@ pub struct SaveBotParams {
|
|||
pub bot_name: String,
|
||||
pub code: String,
|
||||
}
|
||||
|
||||
pub enum SaveBotError {
|
||||
BotNameTaken,
|
||||
}
|
||||
|
||||
impl IntoResponse for SaveBotError {
|
||||
fn into_response(self) -> Response {
|
||||
let (status, value) = match self {
|
||||
SaveBotError::BotNameTaken => {
|
||||
(StatusCode::FORBIDDEN, json!({ "error": "BotNameTaken" }))
|
||||
}
|
||||
};
|
||||
|
||||
let encoded = serde_json::to_vec(&value).expect("could not encode response value");
|
||||
|
||||
Response::builder()
|
||||
.status(status)
|
||||
.body(body::boxed(body::Full::from(encoded)))
|
||||
.expect("could not build response")
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn save_bot(
|
||||
Json(params): Json<SaveBotParams>,
|
||||
conn: DatabaseConnection,
|
||||
) -> Result<Json<Bot>, StatusCode> {
|
||||
) -> Result<Json<Bot>, SaveBotError> {
|
||||
// TODO: authorization
|
||||
let res = bots::find_bot_by_name(¶ms.bot_name, &conn)
|
||||
.optional()
|
||||
.expect("could not run query");
|
||||
let bot = match res {
|
||||
Some(_bot) => return Err(StatusCode::FORBIDDEN),
|
||||
Some(_bot) => return Err(SaveBotError::BotNameTaken),
|
||||
None => {
|
||||
let new_bot = bots::NewBot {
|
||||
owner_id: None,
|
||||
|
|
Loading…
Reference in a new issue