· 4 years ago · Apr 02, 2021, 06:34 AM
1// https://developer.mozilla.org/en-US/docs/Glossary/IIFE
2// inital script to populate skateparks in db - DO NOT RUN THIS SCRIPT IN PRODUCTION
3;(async () => {
4  require('dotenv').config();
5  const {db} = require('../db');
6  const {client} = require('../../mapsApi');
7  await require('../schema/dbReset')();
8  
9  // hit API to get back our skateparks
10  client
11    .placesNearby({
12      params: {
13        location: { lat: 49.2827, lng: -123.1207 },
14        radius: 50000,
15        keyword: 'skatepark',
16        key: process.env.KEY,
17      },
18      timeout: 1000, // milliseconds
19    })
20    .then((r) => {
21      const places  = r.data;
22  
23      /* hit the details endpoint on places api to get more information for each place
24       * https://github.com/googlemaps/google-maps-services-js/blob/master/src/places/details.ts */
25      for (place of places.results) {
26        const myPlaceId = place.place_id;
27        const myFields = [
28          'name',
29          'place_id',
30          'formatted_address', 
31          'formatted_phone_number', 
32          'opening_hours', 
33          'type',
34          'review',
35          'website', 
36          'photo',
37          'geometry'
38        ]
39  
40        client
41          .placeDetails({
42            params: {
43              place_id: myPlaceId,
44              fields: myFields,
45              key: process.env.KEY,
46            },
47            timeout: 1000, // milliseconds
48          })
49          .then((r) => {
50            const placeDetails = r.data;
51            insertAllParks(placeDetails, db);
52            insertReviews(placeDetails, db);
53          })
54          .catch((e) => {
55            console.log(e.response.data.error_message);
56          });
57      }
58    })
59  
60    // insert allparks information into my all_skateparks table
61    const insertAllParks = function(placeDetails, db) {
62      const placeId = placeDetails.result.place_id;
63      console.log("YOO: ", placeId)
64      const name = placeDetails.result.name;
65      const formattedAddress = placeDetails.result.formatted_address;
66      const phone = placeDetails.result.formatted_phone_number;
67      const website = placeDetails.result.website;
68      const paramaters = [placeId, name, formattedAddress, phone, website];
69  
70      const query = `
71        INSERT INTO all_skateparks(
72          place_id,
73          name, 
74          formatted_address, 
75          phone, 
76          website
77        )
78        VALUES ($1, $2, $3, $4, $5)
79      `;
80      db.query(query, paramaters);
81    }
82
83    const insertReviews = function(placeDetails, db) {
84      const placeId = placeDetails.result.place_id;
85      console.log("YEE: ", placeId);
86      const reviews = placeDetails.result.reviews;
87    
88      if (reviews) {
89        for (review of reviews) {
90          console.log("Review: ", placeId, review)
91          const authorName = review.author_name;
92          const authorUrl = review.author_url;
93          const language = review.language;
94          const profileUrl = review.profile_url;
95          const rating = review.rating;
96          const timeDescription = review.relative_time_description;
97          const text = review.text;
98          const time = review.time;
99          const paramaters = [
100            placeId, 
101            authorName, 
102            authorUrl, 
103            language, 
104            profileUrl,
105            rating, 
106            timeDescription, 
107            text, 
108            time
109          ];
110
111          const query = `
112          INSERT INTO reviews(
113            place_id, 
114            review_author, 
115            review_author_url, 
116            review_language,
117            review_profile_url,
118            review_rating, 
119            relative_time_desc, 
120            review_text, 
121            review_time
122          )
123          VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
124          `;
125          db.query(query, paramaters);
126        }
127      }
128    }
129})()