chore(release): 0.3.0
[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             defence: r.fields['Defence'],
40           },
41           currentAp: r.fields['Armour Points'],
42           maxAp: r.fields['Armour Points'],
43           affectedSkills: JSON.stringify(r.fields['Affected Skills']),
44           location_id: r.fields.location_id[0]
45         };
46
47       })).onConflict('id').merge();
48       next();
49     }).finally(() => resolve());
50   });
51 }
52
53 export async function createShopItems(): Promise<void> {
54   return new Promise(async (resolve) => {
55     base('Items').select().eachPage(async (records, next) => {
56       const itemsForSale = [];
57       await db('items').insert(records.map(r => {
58         if(r.fields['location_id']) {
59           itemsForSale.push({
60             item_id: r.fields['Id'],
61             location_id: r.fields['location_id'][0],
62             amount: r.fields['Amount'],
63             price_per_unit: r.fields['Cost']
64           });
65         }
66         return {
67           id: r.fields['Id'],
68           name: r.fields.Name,
69           description: r.fields['Description'],
70           effect_name: r.fields['Effect Name'],
71           icon_name: r.fields['Icon Name']
72         };
73       })).onConflict('id').merge();
74
75       if(itemsForSale.length) {
76         await db('shop_items').insert(itemsForSale).onConflict(['item_id', 'location_id']).merge();
77       }
78
79       next();
80     }).finally(() => resolve());
81   });
82
83 }
84
85 if(!module.parent) {
86   createShopEquipment().then(createShopItems).then(() => {
87     console.log('Complete');
88     process.exit(0);
89   }).catch(e => {
90     console.log(e);
91     process.exit(1);
92   });
93 }