chore(release): 0.2.17
[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     icon: item.icon,
18     requirements: {
19       level: item.requirements.level,
20       strength: item.requirements.strength,
21       constitution: item.requirements.constitution,
22       dexterity: item.requirements.dexterity,
23       intelligence: item.requirements.intelligence
24     },
25     boosts: {
26       strength: item.boosts.strength,
27       constitution: item.boosts.constitution,
28       dexterity: item.boosts.dexterity,
29       intelligence: item.boosts.intelligence,
30       damage: item.boosts.damage,
31       damage_mitigation: item.boosts.damage_mitigation,
32     },
33     maxAp: item.maxAp,
34     currentAp: item.currentAp,
35     affectedSkills: item.affectedSkills
36   };
37   return db('inventory').insert(inventoryItem);
38 }
39
40 export async function getInventory(player_id: string): Promise<EquippedItemDetails[]> {
41   const res = await db.raw(`
42                 select i.*, 
43                 coalesce(e.equipment_slot, i.equipment_slot) as equipment_slot,
44                 e.item_id is not null as is_equipped 
45                 from inventory i 
46                 left outer join equipped e on e.item_id = i.item_id 
47                 where i.player_id = ?
48                 `, [
49                   player_id
50                 ]);
51
52   return res.rows.map(row => {
53     row.affectedSkills = JSON.parse(row.affectedSkills);
54     return row;
55   });
56 }
57
58 export async function getInventoryItem(player_id: string, item_id: string): Promise<InventoryItem> {
59   return db.select('*').from<InventoryItem>('inventory').where({
60     player_id,
61     item_id
62   }).first();
63 }
64
65 export async function getEquippedItems(player_id: string): Promise<EquippedItemDetails[]> {
66   const res = await db.raw(`
67                            select i.*, e.equipment_slot, true as is_equipped
68                            from inventory i
69                            join equipped e on e.item_id = i.item_id 
70                            where i.player_id = ?
71                            `, [player_id])
72
73     return res.rows.map(row => {
74       row.affectedSkills = JSON.parse(row.affectedSkills);
75       return row;
76     });
77 }
78
79 export async function updateAp(player_id: string, item_id: string, currentAp: number, maxAp: number) {
80   return db('inventory').update({
81     currentAp,
82     maxAp
83   }).where({
84     player_id,
85     item_id
86   })
87 }
88
89 export async function deleteInventoryItem(player_id: string, item_id: string) {
90   await db('equipped').where({
91     player_id,
92     item_id
93   }).delete();
94
95   await db('inventory').where({
96     player_id,
97     item_id
98   }).delete();
99 }