Skip to content

Commit

Permalink
More descriptive error for publish version conflict
Browse files Browse the repository at this point in the history
  • Loading branch information
w4 committed Sep 21, 2021
1 parent d27847c commit 058e4ce
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
17 changes: 12 additions & 5 deletions chartered-db/src/crates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -401,21 +401,28 @@ impl CrateWithPermissions {
))
.execute(&conn)?;

insert_into(crate_versions)
let res = insert_into(crate_versions)
.values((
crate_id.eq(self.crate_.id),
filesystem_object.eq(file_identifier.to_string()),
size.eq(file_size),
checksum.eq(file_checksum),
version.eq(given.vers),
version.eq(&given.vers),
dependencies.eq(CrateDependencies(given.deps)),
features.eq(CrateFeatures(given.features)),
links.eq(given.links),
user_id.eq(user.id),
))
.execute(&conn)?;

Ok(())
.execute(&conn);

use diesel::result::{DatabaseErrorKind, Error as DieselError};
match res {
Ok(_) => Ok(()),
Err(DieselError::DatabaseError(DatabaseErrorKind::UniqueViolation, _)) => {
Err(Error::VersionConflict(given.vers.into_owned()))
}
Err(e) => Err(e.into()),
}
})?;

Ok(())
Expand Down
4 changes: 3 additions & 1 deletion chartered-db/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ pub enum Error {
MissingPermission(crate::users::UserCratePermissionValue),
/// The requested crate does not exist
MissingCrate,
/// Version {0} already exists for this crate
VersionConflict(String),
}

impl Error {
Expand All @@ -82,7 +84,7 @@ impl Error {
http::StatusCode::NOT_FOUND
}
Self::MissingPermission(_) => http::StatusCode::FORBIDDEN,
Self::KeyParse(_) => http::StatusCode::BAD_REQUEST,
Self::KeyParse(_) | Self::VersionConflict(_) => http::StatusCode::BAD_REQUEST,
_ => http::StatusCode::INTERNAL_SERVER_ERROR,
}
}
Expand Down

0 comments on commit 058e4ce

Please sign in to comment.