chore(release): 0.3.3
[risinglegends.git] / src / server / locations / repair.ts
1 import { Request, Response, Router } from "express";
2 import { authEndpoint } from '../auth';
3 import { logger } from "../lib/logger";
4 import { getService } from "../map";
5 import { getInventory, getInventoryItem, repair } from '../inventory';
6 import { renderRepairService } from '../views/repair';
7 import { repairCost } from "../../shared/inventory";
8 import * as Alert from "../views/alert";
9 import { updatePlayer } from "../player";
10 import { renderPlayerBar } from "../views/player-bar";
11
12 export const router = Router();
13
14 router.get('/city/services/repair/:location_id', authEndpoint, async(req: Request, res: Response) => {
15   const service = await getService(parseInt(req.params.location_id));
16
17   if(!service || service.city_id !== req.player.city_id) {
18     logger.log(`Invalid location: [${req.params.location_id}]`);
19     res.sendStatus(400);
20   }
21
22   const equippedItems = await getInventory(req.player.id);
23
24   const damaged = equippedItems.filter(i => {
25     return i.currentAp < i.maxAp
26   });
27
28   res.send(renderRepairService(damaged, req.player, service));
29 });
30
31 router.post('/city/services/:location_id/repair/:item_id', authEndpoint, async (req: Request, res: Response) => {
32   const service = await getService(parseInt(req.params.location_id));
33
34   if(!service || service.city_id !== req.player.city_id) {
35     logger.log(`Invalid location: [${req.params.location_id}]`);
36     res.sendStatus(400);
37   }
38
39   const item = await getInventoryItem(req.player.id, req.params.item_id);
40
41   if(!item) {
42     logger.log(`Invalid item [${req.params.item_id}]`);
43     res.sendStatus(400);
44   }
45
46   const cost = repairCost(item);
47
48   if(req.player.gold < cost) {
49     res.status(400).send(Alert.ErrorAlert(`You need at least ${cost}G to repair your ${item.name}`));
50     return;
51   }
52
53   req.player.gold -= cost;
54   item.currentAp = item.maxAp;
55
56   await updatePlayer(req.player);
57   await repair(req.player.id, item.item_id);
58
59   const equippedItems = await getInventory(req.player.id);
60
61   const damaged = equippedItems.filter(i => {
62     return i.currentAp < i.maxAp
63   });
64
65   res.send(
66     renderRepairService(damaged, req.player, service) 
67       + renderPlayerBar(req.player)
68     + Alert.SuccessAlert(`You repaired your ${item.name} for ${cost}G`)
69   );
70 });