1 import { config as dotenv } from 'dotenv';
2 import { db } from "../src/server/lib/db";
3 import Airtable from 'airtable';
7 const CITIES_TABLE = 'tblNB3vyd4XXGO1uh';
15 apiKey: process.env.AIRTABLE_API_KEY
18 const base = Airtable.base('appDfPLPajPNog5Iw');
20 export async function createCities(): Promise<void> {
21 return new Promise(async (resolve) => {
23 base(CITIES_TABLE).select({
24 fields: ['id', 'Name'],
25 sort: [{field: 'id', 'direction': 'asc'}]
26 }).eachPage(async (records, next) => {
28 await db('cities').insert(records.map(r => {
29 console.log(`Creating ${r.fields.Name}`);
35 })).onConflict('id').merge();
44 export async function createPaths(): Promise<void> {
45 return new Promise(async (resolve) => {
46 base('Paths').select().eachPage(async (records, next) => {
47 await db('paths').insert(records.map(r => {
49 console.log(`Path from ${r.fields['Starting City Name'][0]} => ${r.fields['Ending City Name'][0]} (${r.fields.distance})`);
51 starting_city: r.fields.starting_city_id[0],
52 ending_city: r.fields.ending_city_id[0],
53 distance: parseInt(r.fields.distance?.toString() || '20')
55 })).onConflict(['starting_city', 'ending_city']).merge();
64 export async function createLocations(): Promise<void> {
65 return new Promise(async (resolve) => {
66 base('Locations').select().eachPage(async (records, next) => {
68 await db('locations').insert(records.map(r => {
69 console.log(`Create ${r.fields['name']} in ${r.fields['City Name'][0]}`);
74 city_id: r.fields.city_id[0],
75 display_order: r.fields["Display Order"],
76 event_name: r.fields['event_name'],
77 min_level: Math.max(parseInt(r.fields['Min Level'].toString()), 1)
79 })).onConflict('id').merge();
88 export async function createAllCitiesAndLocations() {
89 return createCities().then(createPaths).then(createLocations);
93 createCities().then(createPaths).then(createLocations).then(() => {
94 console.log(`${stats.cityCount} Cities created`);
95 console.log(`${stats.paths} paths created`);
96 console.log('Complete');