refactor PlayerView, plans to replace ApiStorage.js by lootalot.js api module

This commit is contained in:
2019-10-18 14:35:06 +02:00
parent 08397e7b25
commit 60a6e69f67
5 changed files with 93 additions and 55 deletions

View File

@@ -13,6 +13,7 @@ pub enum Update {
/// Every value which can be queried
#[derive(Debug)]
pub enum Value {
Player(db::Player),
Item(db::Item),
Claim(db::Claim),
ItemList(Vec<db::Item>),
@@ -23,11 +24,12 @@ pub enum Value {
impl serde::Serialize for Value {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
match self {
Self::Item(v) => v.serialize(serializer),
Self::Claim(v) => v.serialize(serializer),
Self::ItemList(v) => v.serialize(serializer),
Self::ClaimList(v) => v.serialize(serializer),
Self::PlayerList(v) => v.serialize(serializer),
Value::Player(v) => v.serialize(serializer),
Value::Item(v) => v.serialize(serializer),
Value::Claim(v) => v.serialize(serializer),
Value::ItemList(v) => v.serialize(serializer),
Value::ClaimList(v) => v.serialize(serializer),
Value::PlayerList(v) => v.serialize(serializer),
}
}
}
@@ -82,6 +84,7 @@ pub enum ApiActions {
FetchInventory,
FetchClaims,
// Player actions
FetchPlayer(i32),
FetchLoot(i32),
UpdateWealth(i32, f32),
BuyItems(i32, Vec<(i32, Option<f32>)>),
@@ -114,6 +117,9 @@ pub fn execute(
ApiActions::FetchClaims => {
response.set_value(Value::ClaimList(db::fetch_claims(conn)?));
}
ApiActions::FetchPlayer(id) => {
response.set_value(Value::Player(db::Players(conn).find(id)?));
}
ApiActions::FetchLoot(id) => {
response.set_value(Value::ItemList(db::LootManager(conn, id).all()?));
}
@@ -121,6 +127,7 @@ pub fn execute(
response.push_update(Update::Wealth(
db::AsPlayer(conn, id).update_wealth(amount)?,
));
response.notify(format!("Money updated !"));
}
ApiActions::BuyItems(id, params) => {
let mut cumulated_diff: Vec<db::Wealth> = Vec::with_capacity(params.len());

View File

@@ -41,7 +41,9 @@ fn configure_app(config: &mut web::ServiceConfig) {
) // List of players
.service(
web::scope("/{player_id}")
//.route(web::get().to_async(...)) // Details of player
.route("/", web::get().to_async(|pool, player: PlayerId| {
db_call(pool, Q::FetchPlayer(*player))
}))
.service(
web::resource("/claims")
//.route(web::get().to_async(endpoints::player_claims))