chore(release): 0.2.6
[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           icon: r.fields.Icon,
24           count: 1,
25           requirements: {
26             level: r.fields['Required Level'],
27             strength: r.fields['Required STR'],
28             constitution: r.fields['Required CON'],
29             dexterity: r.fields['Required DEX'],
30             intelligence: r.fields['Required INT']
31           },
32           boosts: {
33             strength: r.fields['Boost STR'],
34             constitution: r.fields['Boost CON'],
35             dexterity: r.fields['Boost DEX'],
36             intelligence: r.fields['Boost INT'],
37             damage: r.fields['Boost DMG'],
38             damage_mitigation: r.fields['Damage Mitigation']
39           },
40           currentAp: r.fields['Armour Points'],
41           maxAp: r.fields['Armour Points'],
42           affectedSkills: JSON.stringify(r.fields['Affected Skills']),
43           location_id: r.fields.location_id[0]
44         };
45
46       })).onConflict('id').merge();
47       next();
48     }).finally(() => resolve());
49   });
50 }
51
52 export async function createShopItems(): Promise<void> {
53   return new Promise(async (resolve) => {
54     base('Items').select().eachPage(async (records, next) => {
55       const itemsForSale = [];
56       await db('items').insert(records.map(r => {
57         if(r.fields['location_id']) {
58           itemsForSale.push({
59             item_id: r.fields['Id'],
60             location_id: r.fields['location_id'][0],
61             amount: r.fields['Amount'],
62             price_per_unit: r.fields['Cost']
63           });
64         }
65         return {
66           id: r.fields['Id'],
67           name: r.fields.Name,
68           description: r.fields['Description'],
69           effect_name: r.fields['Effect Name'],
70           icon_name: r.fields['Icon Name']
71         };
72       })).onConflict('id').merge();
73
74       if(itemsForSale.length) {
75         await db('shop_items').insert(itemsForSale).onConflict(['item_id', 'location_id']).merge();
76       }
77
78       next();
79     }).finally(() => resolve());
80   });
81
82 }
83
84 if(!module.parent) {
85   createShopEquipment().then(createShopItems).then(() => {
86     console.log('Complete');
87     process.exit(0);
88   }).catch(e => {
89     console.log(e);
90     process.exit(1);
91   });
92 }