chore(release): 0.3.0
[risinglegends.git] / seeds / monsters.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 let stats = {
8   monsters: {}
9 };
10 Airtable.configure({
11   apiKey: process.env.AIRTABLE_API_KEY
12 });
13
14 const base = Airtable.base('appDfPLPajPNog5Iw');
15
16 export async function createFactions(): Promise<void> {
17   return new Promise(async (resolve, reject) => {
18     base('Factions').select().eachPage(async (records, next) => {
19       await db('factions').insert(records.map(r => {
20         console.log(`Creating faction ${r.fields.Name}`);
21         return {
22           id: r.fields.ID,
23           name: r.fields.Name,
24           description: r.fields.Description
25         }
26       })).onConflict('id').merge();
27
28       next();
29     }).finally(() => {
30       resolve();
31     })
32
33   });
34 }
35
36
37 export async function createMonsters(): Promise<void> {
38   return new Promise(async (resolve, reject) => {
39     await db('fight').delete();
40
41     base('Monsters').select().eachPage(async (records, next) => {
42       await db('monsters').insert(records.map(r => {
43         if(!stats.monsters[r.fields['Location Name'][0]]) {
44           stats.monsters[r.fields['Location Name'][0]] = 0;
45         }
46         stats.monsters[r.fields['Location Name'][0]]++;
47
48         const factionId = r.fields.faction_id ? r.fields.faction_id[0] : null;
49
50         return {
51           id: r.fields.id,
52           name: r.fields.Name,
53           strength: r.fields['STR_override'] || r.fields.STR,
54           constitution: r.fields['CON_override'] || r.fields.CON,
55           dexterity: r.fields['DEX_override'] || r.fields.DEX,
56           intelligence: r.fields['INT_override'] || r.fields.INT,
57           exp: r.fields.EXP,
58           level: r.fields.Level,
59           gold: r.fields.GOLD,
60           hp: r.fields.HP,
61           maxHp: r.fields.HP,
62           defence: Math.floor(parseInt(r.fields.Defence.toString() || '0')),
63           location_id: r.fields.location_id[0],
64           faction_id: factionId,
65           time_period: r.fields.time_period ? r.fields.time_period : 'any'
66         }
67       })).onConflict('id').merge();
68
69       next();
70
71     }).finally(() => {
72       resolve();
73     });
74   });
75 }
76
77 // run this script manually
78 if(!module.parent) {
79   createFactions().then(createMonsters).then(() => {
80     console.log(stats.monsters);
81     console.log('Complete');
82     process.exit(0);
83   }).catch(e => {
84     console.log(e);
85     process.exit(1);
86   });
87 }
88