diff --git a/lootalot_db/src/lib.rs b/lootalot_db/src/lib.rs index 4626605..3b101ac 100644 --- a/lootalot_db/src/lib.rs +++ b/lootalot_db/src/lib.rs @@ -100,20 +100,18 @@ pub fn fetch_claims(conn: &DbConnection) -> QueryResult> { pub fn resolve_claims(conn: &DbConnection) -> QueryResult<()> { let data = models::claim::Claims(conn).grouped_by_item()?; dbg!(&data); - - for (item, claims) in data { - match claims.len() { - 1 => { - let claim = claims.get(0).unwrap(); - let player_id = claim.player_id; - conn.transaction(|| { - claim.resolve_claim(conn)?; - //models::item::LootManager(self.0, 0).set_owner(claim.loot_id, claim.player_id)?; - models::player::AsPlayer(conn, player_id).update_debt(item.sell_value()) - })?; - } - _ => (), + for (item, mut claims) in data { + if claims.len() > 1 { + // TODO: better sorting mechanism :) + claims.sort_by(|a,b| a.resolve.cmp(&b.resolve)); } + let winner = claims.get(0).expect("Claims should not be empty !"); + let player_id = winner.player_id; + conn.transaction(|| { + winner.resolve_claim(conn)?; + models::player::AsPlayer(conn, player_id) + .update_debt(item.sell_value()) + })?; } Ok(()) } @@ -125,8 +123,18 @@ pub fn split_and_share(conn: &DbConnection, amount: i32, players: Vec) -> Q ) as f64; conn.transaction(|| { for p in players.into_iter() { - AsPlayer(conn, p).update_wealth(share)?; - AsPlayer(conn, 0).update_wealth(-share)?; + let player = Players(conn).find(p)?; + // Take debt into account + match share - player.debt as f64 { + rest if rest > 0.0 => { + AsPlayer(conn, p).update_debt(-player.debt)?; + AsPlayer(conn, p).update_wealth(rest)?; + AsPlayer(conn, 0).update_wealth(-rest)?; + }, + _ => { + AsPlayer(conn, p).update_debt(-share as i32)?; + } + } } Ok(Wealth::from_gp(share)) })