If push task not found, return 404 instead of 500

This commit is contained in:
2023-10-24 13:27:29 +00:00
committed by GitHub
parent d8c0cac94c
commit 68c5d930c3
4 changed files with 24 additions and 6 deletions

View File

@@ -57,12 +57,12 @@ impl From<SqliteError> for PixivDownloaderDbError {
}
#[cfg(all(feature = "db_sqlite", feature = "server"))]
pub trait Optional2Extension<T> {
fn optional2(self) -> Result<Option<T>, PixivDownloaderDbError>;
pub trait Optional2Extension<T, E> {
fn optional2(self) -> Result<Option<T>, E>;
}
#[cfg(all(feature = "db_sqlite", feature = "server"))]
impl<T> Optional2Extension<T> for Result<T, PixivDownloaderDbError> {
impl<T> Optional2Extension<T, PixivDownloaderDbError> for Result<T, PixivDownloaderDbError> {
fn optional2(self) -> Result<Option<T>, PixivDownloaderDbError> {
match self {
Ok(v) => Ok(Some(v)),
@@ -80,6 +80,22 @@ impl<T> Optional2Extension<T> for Result<T, PixivDownloaderDbError> {
}
}
#[cfg(all(feature = "db_sqlite", feature = "server"))]
impl<T> Optional2Extension<T, SqliteError> for Result<T, SqliteError> {
fn optional2(self) -> Result<Option<T>, SqliteError> {
match self {
Ok(v) => Ok(Some(v)),
Err(e) => match e {
SqliteError::DbError(e) => match e {
rusqlite::Error::QueryReturnedNoRows => Ok(None),
_ => Err(SqliteError::DbError(e)),
},
_ => Err(e),
},
}
}
}
#[cfg(not(feature = "db_sqlite"))]
compile_error!("No database backend is enabled.");

View File

@@ -383,9 +383,9 @@ impl PixivDownloaderSqlite {
}
#[cfg(feature = "server")]
async fn get_push_task(&self, id: u64) -> Result<Option<PushTask>, PixivDownloaderDbError> {
async fn get_push_task(&self, id: u64) -> Result<Option<PushTask>, SqliteError> {
let con = self.db.lock().await;
con.query_row_and_then::<PushTask, PixivDownloaderDbError, _, _>(
con.query_row_and_then::<PushTask, SqliteError, _, _>(
"SELECT * FROM push_task WHERE id = ?;",
[id],
|row| {

View File

@@ -3,4 +3,5 @@ pub enum SqliteError {
DbError(rusqlite::Error),
DatabaseVersionTooNew,
UserNameAlreadyExists,
SerdeError(serde_json::Error),
}

View File

@@ -105,7 +105,8 @@ impl PushContext {
.db
.get_push_task(id)
.await
.try_err3(500, "Failed to get push task:")?;
.try_err3(500, "Failed to get push task:")?
.try_err3(404, "Push task not found.")?;
Ok(serde_json::to_value(re).try_err3(500, "Failed to serialize result:")?)
}
},