diff --git a/README.md b/README.md index 76d6d581..1fe506c4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository is for the Integrating With HubSpot I: Foundations course. This To read the full directions, please go to the [practicum instructions](https://app.hubspot.com/academy/l/tracks/1092124/1093824/5493?language=en). -**Put your HubSpot developer test account custom objects URL link here:** https://app.hubspot.com/contacts/l/objects/${custom-obj-number}/views/all/list +**Put your HubSpot developer test account custom objects URL link here:** https://app.hubspot.com/contacts/146526590/objects/2-144750582/views/all/list ___ ## Tips: diff --git a/index.js b/index.js index f337a32d..f4cb963c 100644 --- a/index.js +++ b/index.js @@ -8,64 +8,69 @@ app.use(express.urlencoded({ extended: true })); app.use(express.json()); // * Please DO NOT INCLUDE the private app access token in your repo. Don't do this practicum in your normal account. -const PRIVATE_APP_ACCESS = ''; +require('dotenv').config(); +const PRIVATE_APP_ACCESS = process.env.PRIVATE_APP_ACCESS; // TODO: ROUTE 1 - Create a new app.get route for the homepage to call your custom object data. Pass this data along to the front-end and create a new pug template in the views folder. // * Code for Route 1 goes here +// ROUTE 1 - Homepage to display custom object data +app.get('/', async (req, res) => { + try { + const response = await axios.get('https://api.hubapi.com/crm/v3/objects/2-144750582', { + headers: { Authorization: `Bearer ${PRIVATE_APP_ACCESS}` }, + params: { properties: 'name,breed,age' } + }); + + const pets = response.data.results || []; + res.render('homepage', { + title: 'Custom Object Records | Integrating With HubSpot I Practicum', + pets + }); + } catch (error) { + console.error(error.message); + res.status(500).send('Error loading homepage.'); + } +}); // TODO: ROUTE 2 - Create a new app.get route for the form to create or update new custom object data. Send this data along in the next route. // * Code for Route 2 goes here - +app.get('/update-cobj', (req, res) => { + res.render('updates', { title: 'Update Custom Object Form | Integrating With HubSpot I Practicum' }); +}); // TODO: ROUTE 3 - Create a new app.post route for the custom objects form to create or update your custom object data. Once executed, redirect the user to the homepage. // * Code for Route 3 goes here - -/** -* * This is sample code to give you a reference for how you should structure your calls. - -* * App.get sample -app.get('/contacts', async (req, res) => { - const contacts = 'https://api.hubspot.com/crm/v3/objects/contacts'; - const headers = { - Authorization: `Bearer ${PRIVATE_APP_ACCESS}`, - 'Content-Type': 'application/json' - } - try { - const resp = await axios.get(contacts, { headers }); - const data = resp.data.results; - res.render('contacts', { title: 'Contacts | HubSpot APIs', data }); - } catch (error) { - console.error(error); - } -}); - -* * App.post sample -app.post('/update', async (req, res) => { - const update = { +app.post('/update-cobj', async (req, res) => { + // Build the CRM record payload from form data + const newRecord = { properties: { - "favorite_book": req.body.newVal + "name": req.body.name, + "breed": req.body.breed, + "age": req.body.age } - } + }; + + // HubSpot API endpoint (replace YOUR_OBJECT_TYPE with your object type, e.g. contacts or custom object) + const url = 'https://api.hubapi.com/crm/v3/objects/2-144750582'; - const email = req.query.email; - const updateContact = `https://api.hubapi.com/crm/v3/objects/contacts/${email}?idProperty=email`; const headers = { Authorization: `Bearer ${PRIVATE_APP_ACCESS}`, 'Content-Type': 'application/json' }; - try { - await axios.patch(updateContact, update, { headers } ); - res.redirect('back'); - } catch(err) { - console.error(err); + try { + // Send POST request to create the record in HubSpot + await axios.post(url, newRecord, { headers }); + + // After creating the record, redirect to homepage + res.redirect('/'); + } catch (err) { + console.error('Error creating CRM record:', err); + res.status(500).send('Failed to create CRM record'); } - }); -*/ - // * Localhost app.listen(3000, () => console.log('Listening on http://localhost:3000')); \ No newline at end of file diff --git a/package.json b/package.json index 62db37aa..cc45df7a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "integrating-with-hubspot-i-foundations-practicum", + "name": "lyna-hafid-i-foundations-practicum", "version": "1.0.0", "description": "", "main": "index.js", @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "axios": "^1.3.5", + "dotenv": "^0.21.0", "express": "^4.18.2", "pug": "^3.0.2" } diff --git a/views/homepage.pug b/views/homepage.pug new file mode 100644 index 00000000..6524083f --- /dev/null +++ b/views/homepage.pug @@ -0,0 +1,19 @@ +doctype html +html + head + title= title + body + h1 Custom Object Records + a(href="/update-cobj") Add/Update this table + table(border="1") + thead + tr + th Name + th Breed + th Age + tbody + each pet in pets + tr + td= pet.properties.name + td= pet.properties.breed + td= pet.properties.age diff --git a/views/updates.pug b/views/updates.pug new file mode 100644 index 00000000..22c3fc5a --- /dev/null +++ b/views/updates.pug @@ -0,0 +1,18 @@ +doctype html +html + head + title= "Update Custom Object Form | Integrating With HubSpot I Practicum" + body + a(href="/") Return to the homepage + h1 Create a New CRM Record + form(action="/update-cobj" method="POST") + div + label(for="name") Name: + input(type="text" name="name" required) + div + label(for="breed") Breed: + input(type="text" name="breed" required) + div + label(for="age") Age: + input(type="text" name="age" required) + button(type="submit") Create Record