chore(release): 0.3.3
[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,
54           constitution: r.fields.CON,
55           dexterity: r.fields.DEX,
56           intelligence: r.fields.INT,
57           exp: r.fields.EXP,
58           minLevel: r.fields.minLevel,
59           maxLevel: r.fields.maxLevel ?? r.fields.minLevel,
60           gold: r.fields.GOLD,
61           hp: r.fields.HP,
62           maxHp: r.fields.HP,
63           defence: Math.floor(parseInt(r.fields.Defence.toString() || '0')),
64           location_id: r.fields.location_id[0],
65           faction_id: factionId,
66           time_period: r.fields.time_period ? r.fields.time_period : 'any'
67         }
68       })).onConflict('id').merge();
69
70       next();
71
72     }).finally(() => {
73       resolve();
74     });
75   });
76 }
77
78 // run this script manually
79 if(!module.parent) {
80   createFactions().then(createMonsters).then(() => {
81     console.log(stats.monsters);
82     console.log('Complete');
83     process.exit(0);
84   }).catch(e => {
85     console.log(e);
86     process.exit(1);
87   });
88 }
89