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