Compare commits

2 Commits

Author SHA1 Message Date
966cafb9d9 updates README 2019-06-21 14:01:27 +02:00
0f77a16a8c updates table schema 2019-06-21 13:57:36 +02:00
11 changed files with 63 additions and 35 deletions

View File

@@ -16,14 +16,18 @@ Un gestionnaire de trésors pour des joueurs de Donjon&Dragons(tm).
## Base de données
### Objets
### Objets (items)
L'inventaire des objets qui peuvent être lootés.
PK: id
### Propriétaires
### Objets lootés (looted)
Les objets actuellement looté.
Même schéma que `items` plus une colonne supplémentaire : `owner_id` -> players(id)
### Joueurs (players)
Les joueurs sont des propriétaires d'objet.
Le "groupe" est un propriétaire spécial, avec un ID réservé : 0
La table conserve l'état actuel des finances du propriétaire. L'attribut `dette` représente la dette envers le groupe.
@@ -32,16 +36,16 @@ La table conserve l'état actuel des finances du propriétaire. L'attribut `dett
PK: id
ATTRS: name, debt (in gp), pp, sp, gp, cp
```
### Propriété
### Requêtes (claims)
Table associative entre objets et propriétaires (joueurs ou groupe)
L'ajout d'un objet à un propriétaire est un achat. La suppression, une vente.
NB: L'historique d'achat est enregistré puis effacé lors de la vente.
Table associative entre objets lootés et joueurs.
Représente les requêtes des joueurs. La colonne `resolve` permettra d'établir un classement de détermination entre les joueurs.
```
PK: id
FK: objets_id, proprietaire_id
ATTRS: acquired_date, at_value
FK: loot_id, player_id
ATTRS: resolve
```
### Opérations
_Doit-on garder un historique des opérations ?_

Binary file not shown.

View File

@@ -1,2 +1,3 @@
DROP TABLE items;
DROP TABLE looted;

View File

@@ -1,5 +1,15 @@
-- The global inventory of items
CREATE TABLE items (
id INTEGER PRIMARY KEY NOT NULL,
name VARCHAR NOT NULL,
base_price INTEGER NOT NULL
);
-- The items that have been looted
CREATE TABLE looted (
id INTEGER PRIMARY KEY NOT NULL,
name VARCHAR NOT NULL,
base_price INTEGER NOT NULL,
owner_id INTEGER NOT NULL,
FOREIGN KEY (owner_id) REFERENCES players(id)
);

View File

@@ -7,3 +7,5 @@ CREATE TABLE players (
gp INTEGER DEFAULT 0 NOT NULL,
pp INTEGER DEFAULT 0 NOT NULL
);
INSERT INTO players (id, name) VALUES (0, 'Groupe');

View File

@@ -1 +0,0 @@
DROP TABLE looted;

View File

@@ -1,8 +0,0 @@
CREATE TABLE looted (
id INTEGER PRIMARY KEY NOT NULL,
player_id INTEGER NOT NULL,
item_id INTEGER NOT NULL,
acquired_date DATE NOT NULL,
FOREIGN KEY (player_id) REFERENCES players(id),
FOREIGN KEY (item_id) REFERENCES items(id)
);

View File

@@ -0,0 +1 @@
DROP TABLE claims;

View File

@@ -0,0 +1,8 @@
CREATE TABLE claims (
id INTEGER PRIMARY KEY NOT NULL,
player_id INTEGER NOT NULL,
loot_id INTEGER NOT NULL,
resolve INTEGER NOT NULL DEFAULT 0,
FOREIGN KEY (player_id) REFERENCES players(id),
FOREIGN KEY (loot_id) REFERENCES looted(id)
);

View File

@@ -23,18 +23,14 @@ impl Player {
Ok(players.load::<Self>(conn)?)
}
pub fn fetch_chest(player: i32, conn: &SqliteConnection) -> QueryResult<Vec<Item>> {
let owned = {
use schema::looted::dsl::*;
looted.filter(player_id.eq(player)).select(item_id).load::<i32>(conn)?
};
pub fn fetch_chest(player_id: i32, conn: &SqliteConnection) -> QueryResult<Vec<Item>> {
use schema::looted::dsl::*;
let owned = looted
.filter(owner_id.eq(player_id))
.select((id, name, base_price))
.load::<Item>(conn)?;
dbg!(&owned);
let chest = {
use schema::items::dsl::*;
items.filter(id.eq_any(owned)).load::<Item>(conn)?
};
dbg!(&chest);
Ok(chest)
Ok(owned)
}
}

View File

@@ -1,3 +1,12 @@
table! {
claims (id) {
id -> Integer,
player_id -> Integer,
loot_id -> Integer,
resolve -> Integer,
}
}
table! {
items (id) {
id -> Integer,
@@ -9,9 +18,9 @@ table! {
table! {
looted (id) {
id -> Integer,
player_id -> Integer,
item_id -> Integer,
acquired_date -> Date,
name -> Text,
base_price -> Integer,
owner_id -> Integer,
}
}
@@ -27,7 +36,13 @@ table! {
}
}
joinable!(looted -> items (item_id));
joinable!(looted -> players (player_id));
joinable!(claims -> looted (loot_id));
joinable!(claims -> players (player_id));
joinable!(looted -> players (owner_id));
allow_tables_to_appear_in_same_query!(items, looted, players,);
allow_tables_to_appear_in_same_query!(
claims,
items,
looted,
players,
);