will need to clean up db API
This commit is contained in:
@@ -44,6 +44,57 @@ impl Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const OF_GROUP = 0;
|
||||||
|
const OF_SHOP = -1;
|
||||||
|
const SOLD = -2;
|
||||||
|
|
||||||
|
type WithOwner = Eq<looted::owner_id, i32>;
|
||||||
|
type OwnedLoot = Filter<looted::table, WithOwner>;
|
||||||
|
|
||||||
|
/// An owned item
|
||||||
|
///
|
||||||
|
/// The owner is a Player, the Group, the Merchant
|
||||||
|
/// OR the SOLD state.
|
||||||
|
#[derive(Identifiable, Debug, Queryable)]
|
||||||
|
#[table_name = "looted"]
|
||||||
|
pub(super) struct Loot {
|
||||||
|
id: i32,
|
||||||
|
name: String,
|
||||||
|
base_price: i32,
|
||||||
|
owner: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl Loot {
|
||||||
|
/// A filter on Loot that is owned by given player
|
||||||
|
pub(super) fn owned_by(id: i32) -> OwnedLoot {
|
||||||
|
looted::table.filter(looted::owner_id.eq(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn exists(id: i32) -> Exists<Find<looted::table, i32>> {
|
||||||
|
exists(looted::table.find(id))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn set_owner(&self, owner: i32, conn: &DbConnection) -> QueryResult<()> {
|
||||||
|
diesel::update(looted::table.find(self.id))
|
||||||
|
.set(looted::dsl::owner_id.eq(owner))
|
||||||
|
.execute(conn)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn into_item(self) -> Item {
|
||||||
|
Item {
|
||||||
|
id: self.id,
|
||||||
|
name: self.name,
|
||||||
|
base_price: self.base_price,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn find(id: i32) -> Find<looted::table, i32> {
|
||||||
|
looted::table.find(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct Inventory<'q>(pub &'q DbConnection);
|
pub struct Inventory<'q>(pub &'q DbConnection);
|
||||||
|
|
||||||
impl<'q> Inventory<'q> {
|
impl<'q> Inventory<'q> {
|
||||||
@@ -58,13 +109,18 @@ impl<'q> Inventory<'q> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The shop resource
|
||||||
pub struct Shop<'q>(pub &'q DbConnection);
|
pub struct Shop<'q>(pub &'q DbConnection);
|
||||||
|
|
||||||
impl<'q> Shop<'q> {
|
impl<'q> Shop<'q> {
|
||||||
|
// Rename to list
|
||||||
pub fn all(&self) -> QueryResult<Vec<Item>> {
|
pub fn all(&self) -> QueryResult<Vec<Item>> {
|
||||||
|
// Loot::owned_by(OF_SHOP).load(self.0)
|
||||||
shop::table.load(self.0)
|
shop::table.load(self.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pub fn buy(&self, items: Vec<(i32, f64)>, buyer: i32) -> UpdateResult {}
|
||||||
|
|
||||||
pub fn get(&self, id: i32) -> QueryResult<Item> {
|
pub fn get(&self, id: i32) -> QueryResult<Item> {
|
||||||
shop::table.find(&id).first::<Item>(self.0)
|
shop::table.find(&id).first::<Item>(self.0)
|
||||||
}
|
}
|
||||||
@@ -99,50 +155,6 @@ impl<'q> Shop<'q> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type WithOwner = Eq<looted::owner_id, i32>;
|
|
||||||
type OwnedLoot = Filter<looted::table, WithOwner>;
|
|
||||||
|
|
||||||
/// Represents an item that has been looted,
|
|
||||||
/// hence has an owner.
|
|
||||||
#[derive(Identifiable, Debug, Queryable)]
|
|
||||||
#[table_name = "looted"]
|
|
||||||
pub(super) struct Loot {
|
|
||||||
id: i32,
|
|
||||||
name: String,
|
|
||||||
base_price: i32,
|
|
||||||
owner: i32,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Loot {
|
|
||||||
/// A filter on Loot that is owned by given player
|
|
||||||
pub(super) fn owned_by(id: i32) -> OwnedLoot {
|
|
||||||
looted::table.filter(looted::owner_id.eq(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn exists(id: i32) -> Exists<Find<looted::table, i32>> {
|
|
||||||
exists(looted::table.find(id))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn set_owner(&self, owner: i32, conn: &DbConnection) -> QueryResult<()> {
|
|
||||||
diesel::update(looted::table.find(self.id))
|
|
||||||
.set(looted::dsl::owner_id.eq(owner))
|
|
||||||
.execute(conn)?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn into_item(self) -> Item {
|
|
||||||
Item {
|
|
||||||
id: self.id,
|
|
||||||
name: self.name,
|
|
||||||
base_price: self.base_price,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn find(id: i32) -> Find<looted::table, i32> {
|
|
||||||
looted::table.find(id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Manager for a *single* player loot
|
/// Manager for a *single* player loot
|
||||||
pub struct LootManager<'q>(pub &'q DbConnection, pub i32);
|
pub struct LootManager<'q>(pub &'q DbConnection, pub i32);
|
||||||
|
|
||||||
|
|||||||
27
src/api.rs
27
src/api.rs
@@ -98,6 +98,31 @@ pub enum ApiActions {
|
|||||||
//SetClaimsTimeout(pub i32),
|
//SetClaimsTimeout(pub i32),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum ApiEndpoints {
|
||||||
|
InventoryList,
|
||||||
|
InventoryCheck(Vec<String>),
|
||||||
|
InventoryAdd(String, i32), // db::Inventory(conn)::add(new_item)
|
||||||
|
|
||||||
|
ShopList, // db::Shop(conn)::list()
|
||||||
|
BuyItems(i32, BuySellParams), // db::Shop(conn)::buy(params)
|
||||||
|
RefreshShop(ItemList), // db::Shop(conn)::replace_list(items)
|
||||||
|
|
||||||
|
// db::Players::get returns AsPlayer<'q>
|
||||||
|
PlayerList, //db::Players(conn)::list()
|
||||||
|
PlayerAdd(NewPlayer), //db::Players(conn)::add(player)
|
||||||
|
PlayerFetch(i32), // db::Players(conn)::get(id)
|
||||||
|
PlayerClaims(i32), // db::Players(conn)::get(id).claims()
|
||||||
|
PlayerNotifications(i32), // db::Players(conn)::get(id).notifications()
|
||||||
|
PlayerLoot(i32),// db::Players(conn)::get(id).loot()
|
||||||
|
PlayerUpdateWealth(i32, f64), // db::Players(conn)::get(id).update_wealth(f64)
|
||||||
|
SellItems(i32, BuySellParams), // db::Players(conn)::get(id).sell(params)
|
||||||
|
ClaimItems(i32, IdList), // db::Players(conn)::get(id).claim(items)
|
||||||
|
UndoLastAction(i32), // db::Players(conn)::get(id).undo_last()
|
||||||
|
AddLoot(NewGroupLoot), // db::Group(conn)::add_loot(loot)
|
||||||
|
ResolveClaims, // db::Group(conn)::resolve_claims()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn execute(
|
pub fn execute(
|
||||||
conn: &DbConnection,
|
conn: &DbConnection,
|
||||||
query: ApiActions,
|
query: ApiActions,
|
||||||
@@ -143,7 +168,7 @@ pub fn execute(
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
ApiActions::FetchPlayer(id) => {
|
ApiActions::FetchPlayer(id) => {
|
||||||
response.set_value(Value::Player(db::Players(conn).find(id)?));
|
response.set_value(Value::Players(conn)(db::Players(conn).find(id)?));
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
ApiActions::FetchPlayerClaims(id) => {
|
ApiActions::FetchPlayerClaims(id) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user