chore(release): 0.2.5
[risinglegends.git] / src / server / inventory.ts
1 import {InventoryItem, ShopEquipment} from "../shared/inventory";
2 import { v4 as uuid } from 'uuid';
3 import { db} from './lib/db';
4 import {EquippedItemDetails} from "../shared/equipped";
5
6
7 export async function addInventoryItem(playerId: string, item: ShopEquipment) {
8   const inventoryItem: InventoryItem = {
9     player_id: playerId,
10     item_id: uuid(),
11     name: item.name,
12     type: item.type,
13     equipment_slot: item.equipment_slot,
14     cost: item.cost,
15     count: item.count,
16     profession:  item.profession,
17     requirements: {
18       level: item.requirements.level,
19       strength: item.requirements.strength,
20       constitution: item.requirements.constitution,
21       dexterity: item.requirements.dexterity,
22       intelligence: item.requirements.intelligence
23     },
24     boosts: {
25       strength: item.boosts.strength,
26       constitution: item.boosts.constitution,
27       dexterity: item.boosts.dexterity,
28       intelligence: item.boosts.intelligence,
29       damage: item.boosts.damage,
30       damage_mitigation: item.boosts.damage_mitigation,
31     },
32     maxAp: item.maxAp,
33     currentAp: item.currentAp,
34     affectedSkills: item.affectedSkills
35   };
36   return db('inventory').insert(inventoryItem);
37 }
38
39 export async function getInventory(player_id: string): Promise<EquippedItemDetails[]> {
40   const res = await db.raw(`
41                 select i.*, 
42                 coalesce(e.equipment_slot, i.equipment_slot) as equipment_slot,
43                 e.item_id is not null as is_equipped 
44                 from inventory i 
45                 left outer join equipped e on e.item_id = i.item_id 
46                 where i.player_id = ?
47                 `, [
48                   player_id
49                 ]);
50
51   return res.rows.map(row => {
52     row.affectedSkills = JSON.parse(row.affectedSkills);
53     return row;
54   });
55 }
56
57 export async function getInventoryItem(player_id: string, item_id: string): Promise<InventoryItem> {
58   return db.select('*').from<InventoryItem>('inventory').where({
59     player_id,
60     item_id
61   }).first();
62 }
63
64 export async function getEquippedItems(player_id: string): Promise<EquippedItemDetails[]> {
65   const res = await db.raw(`
66                            select i.*, e.equipment_slot, true as is_equipped
67                            from inventory i
68                            join equipped e on e.item_id = i.item_id 
69                            where i.player_id = ?
70                            `, [player_id])
71
72     return res.rows.map(row => {
73       row.affectedSkills = JSON.parse(row.affectedSkills);
74       return row;
75     });
76 }
77
78 export async function updateAp(player_id: string, item_id: string, currentAp: number, maxAp: number) {
79   return db('inventory').update({
80     currentAp,
81     maxAp
82   }).where({
83     player_id,
84     item_id
85   })
86 }
87
88 export async function deleteInventoryItem(player_id: string, item_id: string) {
89   await db('equipped').where({
90     player_id,
91     item_id
92   }).delete();
93
94   await db('inventory').where({
95     player_id,
96     item_id
97   }).delete();
98 }