Return error, when Database insertion failed

This commit is contained in:
Timo Ley 2022-01-08 23:52:15 +01:00
parent b6abcd7c90
commit 5aeb937e6c
4 changed files with 14 additions and 3 deletions

View file

@ -1,9 +1,9 @@
use std::time::Duration; use std::time::Duration;
use axum::{body::Bytes, http::request}; use axum::body::Bytes;
use reqwest::{ use reqwest::{
multipart::{Form, Part}, multipart::{Form, Part},
Body, Client, Response, Url, Client, Response, Url,
}; };
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -69,7 +69,7 @@ impl IpfsClient {
.post(self.url.join("/api/v0/pin/add")?) .post(self.url.join("/api/v0/pin/add")?)
.query(&PinQuery::new(cid)) .query(&PinQuery::new(cid))
.timeout(Duration::from_secs(60)); .timeout(Duration::from_secs(60));
let response = request.send().await?; request.send().await?;
Ok(()) Ok(())
} }
} }

View file

@ -24,6 +24,8 @@ pub enum APIError {
Unauthorized(String), Unauthorized(String),
#[error("{0}")] #[error("{0}")]
Forbidden(String), Forbidden(String),
#[error("{0}")]
Internal(String),
#[error("IPFS error: {0}")] #[error("IPFS error: {0}")]
IPFS(#[from] IPFSError), IPFS(#[from] IPFSError),
} }
@ -53,6 +55,9 @@ impl IntoResponse for APIError {
APIError::BadRequest(err) => ErrorResponse::new(StatusCode::BAD_REQUEST, Some(err)), APIError::BadRequest(err) => ErrorResponse::new(StatusCode::BAD_REQUEST, Some(err)),
APIError::Unauthorized(err) => ErrorResponse::new(StatusCode::UNAUTHORIZED, Some(err)), APIError::Unauthorized(err) => ErrorResponse::new(StatusCode::UNAUTHORIZED, Some(err)),
APIError::Forbidden(err) => ErrorResponse::new(StatusCode::FORBIDDEN, Some(err)), APIError::Forbidden(err) => ErrorResponse::new(StatusCode::FORBIDDEN, Some(err)),
APIError::Internal(err) => {
ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, Some(err))
}
APIError::IPFS(_) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, None), APIError::IPFS(_) => ErrorResponse::new(StatusCode::INTERNAL_SERVER_ERROR, None),
}; };
let status = res.status.clone(); let status = res.status.clone();

View file

@ -147,6 +147,11 @@ async fn upload(
for f in files { for f in files {
let res = cat.add_meme(&user, &f, &ip, &db_pool).await?; let res = cat.add_meme(&user, &f, &ip, &db_pool).await?;
if res != 1 {
return Err(APIError::Internal("Database insertion error".to_string()));
}
ipfs.pin(f.hash).await?; ipfs.pin(f.hash).await?;
links.push(format!( links.push(format!(
"{}/{}/{}", "{}/{}/{}",

1
src/v1/upload.rs Normal file
View file

@ -0,0 +1 @@