unifies Buy and Sell parameters
This commit is contained in:
32
src/api.rs
32
src/api.rs
@@ -3,7 +3,7 @@ use lootalot_db::{self as db, DbConnection, Update, Value};
|
||||
pub type ItemListWithMods = Vec<(i32, Option<f64>)>;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct SellParams {
|
||||
pub struct BuySellParams {
|
||||
pub items: ItemListWithMods,
|
||||
players: Option<Vec<i32>>,
|
||||
global_mod: Option<f64>,
|
||||
@@ -64,8 +64,8 @@ pub enum ApiActions {
|
||||
FetchNotifications(i32),
|
||||
FetchLoot(i32),
|
||||
UpdateWealth(i32, f64),
|
||||
BuyItems(i32, Vec<(i32, Option<f64>)>),
|
||||
SellItems(i32, SellParams),
|
||||
BuyItems(i32, BuySellParams),
|
||||
SellItems(i32, BuySellParams),
|
||||
ClaimItem(i32, i32),
|
||||
UnclaimItem(i32, i32),
|
||||
UndoLastAction(i32),
|
||||
@@ -119,19 +119,18 @@ pub fn execute(
|
||||
}
|
||||
ApiActions::BuyItems(id, params) => {
|
||||
// TODO: check that player has enough money !
|
||||
let mut cumulated_diff: Vec<db::Wealth> = Vec::with_capacity(params.len());
|
||||
let mut added_items: u16 = 0;
|
||||
for (item_id, price_mod) in params.into_iter() {
|
||||
let mut gains: Vec<db::Wealth> = Vec::with_capacity(params.items.len());
|
||||
for (item_id, price_mod) in params.items.into_iter() {
|
||||
if let Ok((item, diff)) = db::buy_item_from_inventory(conn, id, item_id, price_mod)
|
||||
{
|
||||
cumulated_diff.push(diff);
|
||||
response.push_update(Update::ItemAdded(item));
|
||||
added_items += 1;
|
||||
response.push_update(item);
|
||||
gains.push(diff);
|
||||
} else {
|
||||
response.push_error(format!("Error adding {}", item_id));
|
||||
}
|
||||
}
|
||||
let total_amount = cumulated_diff
|
||||
let added_items = gains.len();
|
||||
let total_amount = gains
|
||||
.into_iter()
|
||||
.fold(db::Wealth::from_gp(0.0), |acc, i| acc + i);
|
||||
response.notify(format!(
|
||||
@@ -145,20 +144,19 @@ pub fn execute(
|
||||
// Behavior differs if player is group or regular.
|
||||
// Group sells item like players then split the total amount among players.
|
||||
ApiActions::SellItems(id, params) => {
|
||||
let mut all_results: Vec<db::Wealth> = Vec::with_capacity(params.items.len());
|
||||
let mut sold_items: u16 = 0;
|
||||
let mut gains: Vec<db::Wealth> = Vec::with_capacity(params.items.len());
|
||||
for (loot_id, price_mod) in params.items.iter() {
|
||||
if let Ok((deleted, diff)) =
|
||||
db::sell_item_transaction(conn, id, *loot_id, *price_mod)
|
||||
{
|
||||
all_results.push(diff);
|
||||
response.push_update(Update::ItemRemoved(deleted));
|
||||
sold_items += 1;
|
||||
response.push_update(deleted);
|
||||
gains.push(diff);
|
||||
} else {
|
||||
response.push_error(format!("Erreur lors de la vente (loot_id : {})", loot_id));
|
||||
}
|
||||
}
|
||||
let total_amount = all_results
|
||||
let sold_items = gains.len();
|
||||
let total_amount = gains
|
||||
.into_iter()
|
||||
.fold(db::Wealth::from_gp(0.0), |acc, i| acc + i);
|
||||
match id {
|
||||
@@ -214,7 +212,7 @@ pub fn execute(
|
||||
let mut added_items = 0;
|
||||
for item in items.into_iter() {
|
||||
if let Ok(added) = db::LootManager(conn, 0).add_from(&item) {
|
||||
response.push_update(Update::ItemAdded(added));
|
||||
response.push_update(added);
|
||||
added_items += 1;
|
||||
} else {
|
||||
response.push_error(format!("Error adding {:?}", item));
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use actix_cors::Cors;
|
||||
use actix_files as fs;
|
||||
use actix_web::{web, middleware, App, Error, HttpResponse, HttpServer, Either};
|
||||
use futures::{Future, IntoFuture};
|
||||
use futures::{Future};
|
||||
use std::env;
|
||||
|
||||
use lootalot_db as db;
|
||||
@@ -98,7 +98,7 @@ fn configure_app(config: &mut web::ServiceConfig) {
|
||||
db_call(pool, Q::FetchLoot(*player))
|
||||
}))
|
||||
.route(web::put().to_async(
|
||||
move |pool, (player, data): (PlayerId, web::Json<api::ItemListWithMods>)| {
|
||||
move |pool, (player, data): (PlayerId, web::Json<api::BuySellParams>)| {
|
||||
db_call(pool, Q::BuyItems(*player, data.into_inner()))
|
||||
},
|
||||
))
|
||||
@@ -108,7 +108,7 @@ fn configure_app(config: &mut web::ServiceConfig) {
|
||||
},
|
||||
))
|
||||
.route(web::delete().to_async(
|
||||
move |pool, (player, data): (PlayerId, web::Json<api::SellParams>)| {
|
||||
move |pool, (player, data): (PlayerId, web::Json<api::BuySellParams>)| {
|
||||
db_call(pool, Q::SellItems(*player, data.into_inner()))
|
||||
},
|
||||
)),
|
||||
|
||||
Reference in New Issue
Block a user