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 import { unequipItems } from "./equipment";
8 export async function addInventoryItem(playerId: string, item: ShopEquipment) {
9 const inventoryItem: InventoryItem = {
14 equipment_slot: item.equipment_slot,
17 profession: item.profession,
20 level: item.requirements.level,
21 strength: item.requirements.strength,
22 constitution: item.requirements.constitution,
23 dexterity: item.requirements.dexterity,
24 intelligence: item.requirements.intelligence
27 strength: item.boosts.strength,
28 constitution: item.boosts.constitution,
29 dexterity: item.boosts.dexterity,
30 intelligence: item.boosts.intelligence,
31 damage: item.boosts.damage,
32 damage_mitigation: item.boosts.damage_mitigation,
33 defence: item.boosts.defence
36 currentAp: item.currentAp,
37 affectedSkills: item.affectedSkills
39 return db('inventory').insert(inventoryItem);
42 export async function getInventory(player_id: string): Promise<EquippedItemDetails[]> {
43 const res = await db.raw(`
45 coalesce(e.equipment_slot, i.equipment_slot) as equipment_slot,
46 e.item_id is not null as is_equipped
48 left outer join equipped e on e.item_id = i.item_id
54 return res.rows.map(row => {
55 row.affectedSkills = JSON.parse(row.affectedSkills);
60 export async function getInventoryItem(player_id: string, item_id: string): Promise<InventoryItem> {
61 return db.select('*').from<InventoryItem>('inventory').where({
67 export async function getEquippedItems(player_id: string): Promise<EquippedItemDetails[]> {
68 const res = await db.raw(`
69 select i.*, e.equipment_slot, true as is_equipped
71 join equipped e on e.item_id = i.item_id
75 return res.rows.map(row => {
76 row.affectedSkills = JSON.parse(row.affectedSkills);
81 export async function updateAp(player_id: string, apDamage: number, itemIds: string[]) {
82 const res: {item_id: string, currentAp: number, name: string}[] = await db('inventory').where({
84 }).whereIn('item_id', itemIds).update({
85 'currentAp': db.raw(`GREATEST("currentAp" - ${apDamage}, 0)`)
86 }).returning(['item_id', 'name', 'currentAp']);
88 const itemsToUnequip = res.filter(i => i.currentAp <= 0);
90 if(itemsToUnequip.length) {
91 await unequipItems(player_id, itemsToUnequip.map(i => i.item_id));
94 return itemsToUnequip;
97 export async function repair(player_id: string, item_id: string) {
98 return db('inventory').where({
102 'currentAp': db.raw('"maxAp"')
106 export async function deleteInventoryItem(player_id: string, item_id: string) {
107 await db('equipped').where({
112 await db('inventory').where({