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]}`);
51 starting_city: r.fields.starting_city_id[0],
52 ending_city: r.fields.ending_city_id[0]
54 })).onConflict(['starting_city', 'ending_city']).ignore();
63 export async function createLocations(): Promise<void> {
64 return new Promise(async (resolve) => {
65 base('Locations').select().eachPage(async (records, next) => {
67 await db('locations').insert(records.map(r => {
68 console.log(`Create ${r.fields['name']} in ${r.fields['City Name'][0]}`);
73 city_id: r.fields.city_id[0],
74 display_order: r.fields["Display Order"],
75 event_name: r.fields['event_name']
77 })).onConflict('id').merge();
86 export async function createAllCitiesAndLocations() {
87 return createCities().then(createPaths).then(createLocations);
91 createCities().then(createPaths).then(createLocations).then(() => {
92 console.log(`${stats.cityCount} Cities created`);
93 console.log(`${stats.paths} paths created`);
94 console.log('Complete');