chore(release): 0.2.5
[risinglegends.git] / seeds / shop_items.ts
1 import { config as dotenv } from 'dotenv';
2 import { db } from "../src/server/lib/db";
3 import Airtable from 'airtable';
4
5 dotenv();
6
7 Airtable.configure({
8   apiKey: process.env.AIRTABLE_API_KEY
9 });
10
11 const base = Airtable.base('appDfPLPajPNog5Iw');
12
13 export async function createShopEquipment(): Promise<void> {
14   return new Promise(async (resolve) => {
15     base('Shop Equipment').select().eachPage(async (records, next) => {
16       await db('shop_equipment').insert(records.map(r => {
17         return {
18           id: r.fields.id,
19           name: r.fields.Name,
20           type: r.fields['Equipment Type'],
21           equipment_slot: r.fields['Equipment Slot'],
22           cost: r.fields.Cost,
23           count: 1,
24           requirements: {
25             level: r.fields['Required Level'],
26             strength: r.fields['Required STR'],
27             constitution: r.fields['Required CON'],
28             dexterity: r.fields['Required DEX'],
29             intelligence: r.fields['Required INT']
30           },
31           boosts: {
32             strength: r.fields['Boost STR'],
33             constitution: r.fields['Boost CON'],
34             dexterity: r.fields['Boost DEX'],
35             intelligence: r.fields['Boost INT'],
36             damage: r.fields['Boost DMG'],
37             damage_mitigation: r.fields['Damage Mitigation']
38           },
39           currentAp: r.fields['Armour Points'],
40           maxAp: r.fields['Armour Points'],
41           affectedSkills: JSON.stringify(r.fields['Affected Skills']),
42           location_id: r.fields.location_id[0]
43         };
44
45       })).onConflict('id').merge();
46       next();
47     }).finally(() => resolve());
48   });
49 }
50
51 export async function createShopItems(): Promise<void> {
52   return new Promise(async (resolve) => {
53     base('Items').select().eachPage(async (records, next) => {
54       const itemsForSale = [];
55       await db('items').insert(records.map(r => {
56         if(r.fields['location_id']) {
57           itemsForSale.push({
58             item_id: r.fields['Id'],
59             location_id: r.fields['location_id'][0],
60             amount: r.fields['Amount'],
61             price_per_unit: r.fields['Cost']
62           });
63         }
64         return {
65           id: r.fields['Id'],
66           name: r.fields.Name,
67           description: r.fields['Description'],
68           effect_name: r.fields['Effect Name'],
69           icon_name: r.fields['Icon Name']
70         };
71       })).onConflict('id').merge();
72
73       if(itemsForSale.length) {
74         await db('shop_items').insert(itemsForSale).onConflict(['item_id', 'location_id']).merge();
75       }
76
77       next();
78     }).finally(() => resolve());
79   });
80
81 }
82
83 if(!module.parent) {
84   createShopEquipment().then(createShopItems).then(() => {
85     console.log('Complete');
86     process.exit(0);
87   }).catch(e => {
88     console.log(e);
89     process.exit(1);
90   });
91 }