improved error handling #1

This commit is contained in:
2025-04-13 06:12:26 +02:00
parent a4992a163d
commit 53d0baa4a7
5 changed files with 125 additions and 81 deletions
+25 -19
View File
@@ -7,26 +7,32 @@ use super::{player, Session};
pub fn set_cloak(session: &Session, cloak: String) -> Result {
match player::player(session, session.local_player.id.clone())? {
Response::Player(crate::response::PlayerResponse::Player { cloaks, .. }) => {
if cloaks.contains(&cloak) || cloak.is_empty() {
session
.database
.players
.update_one(
doc! {
"uuid": session.local_player.id.clone(),
},
doc! {
"$set": {
"cloak": cloak,
},
},
)
.run()?;
Ok(Response::Success)
} else {
Err(Error::SomethingWentWrong)
if !cloaks.contains(&cloak) && !cloak.is_empty() {
return Err(Error::ValidationError(
format!("Player does not own cloak: {}", cloak)
));
}
session
.database
.players
.update_one(
doc! {
"uuid": session.local_player.id.clone(),
},
doc! {
"$set": {
"cloak": cloak.clone(),
},
},
)
.run()
.map_err(|e| Error::DatabaseError(
format!("Failed to update cloak: {}", e)
))?;
Ok(Response::Success)
}
_ => Err(Error::SomethingWentWrong),
_ => Err(Error::ValidationError("Invalid player data received".to_string())),
}
}