<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eze Sugar 👩‍💻</title>
    <description>The latest articles on DEV Community by Eze Sugar 👩‍💻 (@sweetestshuga).</description>
    <link>https://dev.to/sweetestshuga</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F317300%2F910f32b2-2032-4ed0-890f-5ae1d75e5589.jpg</url>
      <title>DEV Community: Eze Sugar 👩‍💻</title>
      <link>https://dev.to/sweetestshuga</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sweetestshuga"/>
    <language>en</language>
    <item>
      <title>How to install Node Lts version on your ubuntu</title>
      <dc:creator>Eze Sugar 👩‍💻</dc:creator>
      <pubDate>Mon, 23 Sep 2024 07:14:31 +0000</pubDate>
      <link>https://dev.to/sweetestshuga/how-to-install-node-lts-version-on-your-ubuntu-34a2</link>
      <guid>https://dev.to/sweetestshuga/how-to-install-node-lts-version-on-your-ubuntu-34a2</guid>
      <description>&lt;p&gt;To download and install LTS version of Node.js on Ubuntu 18, 20, 24 or any versions above, follow these steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update Package index:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo apt update&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Install Node.js LTS version using curl:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Install Node.js:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo apt-get install -y nodejs&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Verify the installation by checking the Node.js version:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;node -v&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you find this helpful, please follow and like&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>linux</category>
      <category>ubuntu</category>
      <category>node</category>
    </item>
    <item>
      <title>How to Install &amp; Setup K8-Cluster using kubeadm</title>
      <dc:creator>Eze Sugar 👩‍💻</dc:creator>
      <pubDate>Tue, 13 Aug 2024 17:32:44 +0000</pubDate>
      <link>https://dev.to/sweetestshuga/how-to-install-setup-k8-cluster-using-kubeadm-25p</link>
      <guid>https://dev.to/sweetestshuga/how-to-install-setup-k8-cluster-using-kubeadm-25p</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE &amp;amp; SYSTEM APPICATION IN MASTER AND WORKER NODES&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;INSTALL DOCKER IN SLAVE &amp;amp; MASTER&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install docker.io -y
sudo chmod 666 /var/run/docker.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;INSTALL PACKAGES FOR MASTER &amp;amp; SLAVES&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
sudo mkdir -p -m 755 /etc/apt/keyrings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;ADD KUBERNETES REPO AND CPG KEYS IN BOTH MASTER AND WORKER NODES&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;UPDATE PACKAGES IN ALL THE NODES&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;INSTALL COMPONENTS IN ALL THE NODES&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; sudo apt install -y kubeadm=1.28.1-1.1 kubelet=1.28.1-1.1 kubectl=1.28.1-1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;INITIALIZE THE MASTER NODE | NB: ONLY ON MASTER&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo kubeadm init --pod-network-cidr=10.244.0.0/16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;CONFIGURE KUBERNETES CLUSER | NB: ONLY ON MASTER&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;DEPLOY CALICO |A NETWOKING SOLUTION | NB: ONLY ON MASTER&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;DEPLOY INGRESS CONTROLLER | NB: ONLY ON MASTER&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.49.0/deploy/static/provider/baremetal/deploy.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Fetching Calendly API Events Using Express and Node.js</title>
      <dc:creator>Eze Sugar 👩‍💻</dc:creator>
      <pubDate>Sat, 03 Aug 2024 09:06:25 +0000</pubDate>
      <link>https://dev.to/sweetestshuga/fetching-calendly-api-events-using-express-and-nodejs-1dc2</link>
      <guid>https://dev.to/sweetestshuga/fetching-calendly-api-events-using-express-and-nodejs-1dc2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
In this article, we will explore how to fetch event data from the Calendly API and save it into a MongoDB database using an Express.js application. We will cover the entire process from setting up the project to performing CRUD operations to manage the data. Additionally, we will guide you on how to obtain your Calendly access token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
Before we begin, ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js installed on your system&lt;/li&gt;
&lt;li&gt;MongoDB installed or a MongoDB Atlas account&lt;/li&gt;
&lt;li&gt;Basic understanding of JavaScript and Node.js&lt;/li&gt;
&lt;li&gt;A Calendly account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Getting Your Calendly Access Token&lt;/strong&gt;&lt;br&gt;
To interact with the Calendly API, you'll need an access token. Follow these steps to obtain it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log in to Calendly:&lt;/strong&gt;&lt;br&gt;
Go to the Calendly login page and sign in to your account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navigate to the Integrations Page:&lt;/strong&gt;&lt;br&gt;
Click on your account in the top right corner, select "Integrations," and then click on "API and Webhooks."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generate an Access Token:&lt;/strong&gt;&lt;br&gt;
Click "Get a token now," name your token, and click "Create token." Copy the generated token and keep it secure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Store the Token Securely:&lt;/strong&gt;&lt;br&gt;
Create a .env file in your project directory and add your access token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CALENDLY_ACCESS_TOKEN=your_calendly_access_token
MONGO_URI=your_mongodb_connection_string

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Setting Up the Project
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Initialize a New Node.js Project:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir calendly-integration
cd calendly-integration
npm init -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install Necessary Dependencies:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install express mongoose axios dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Project Structure:
Organize your project with the following structure:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;calendly-integration/
├── controllers/
│   └── calendlyController.js
├── models/
│   └── Calendly.js
├── routes/
│   └── calendlyRoutes.js
├── .env
├── package.json
└── server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Code Implementation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Setting Up Server
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// server.js
import express from 'express';
import mongoose from 'mongoose';
import dotenv from 'dotenv';
import calendlyRoutes from './routes/calendlyRoutes.js';

dotenv.config();

const app = express();
app.use(express.json());

mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() =&amp;gt; console.log('MongoDB connected'))
  .catch(err =&amp;gt; console.error('MongoDB connection error:', err));

app.use('/api/calendly', calendlyRoutes);

const PORT = process.env.PORT || 5000;
app.listen(PORT, () =&amp;gt; console.log(`Server running on port ${PORT}`));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Creating the Mongoose Model:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// models/Calendly.js
import mongoose from 'mongoose';

const calendlySchema = new mongoose.Schema({
  name: String,
  email: String,
  eventDetails: Object,
});

const Calendly = mongoose.model('Calendly', calendlySchema);

export default Calendly;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Creating the Route Handlers:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// controllers/calendlyController.js
import axios from 'axios';
import Calendly from '../models/Calendly.js';

export const createCalendly = async (req, res, next) =&amp;gt; {
  try {
    const { name, email, ...otherEventDetails } = req.body;
    const existingUser = await Calendly.findOne({ email });

    let user;
    if (existingUser) {
      user = await existingUser.save();
    } else {
      user = await Calendly.create({ name, email, ...otherEventDetails });
    }

    res.json(user);
  } catch (err) {
    console.error('Error processing Calendly webhook:', err);
    res.sendStatus(500);
  }
};

export const fetchCalendlyEvent = async (req, res) =&amp;gt; {
  try {
    const token = process.env.CALENDLY_ACCESS_TOKEN;
    const headers = { Authorization: `Bearer ${token}` };

    const response = await axios.get('https://api.calendly.com/scheduled_events', {
      params: { user: 'https://api.calendly.com/users/user-uri' },
      headers,
    });

    const eventDataCollection = response.data.collection;
    let allInvitees = [];

    for (const event of eventDataCollection) {
      const inviteesUri = `${event.uri}/invitees`;
      const inviteesResponse = await axios.get(inviteesUri, { headers });
      allInvitees = allInvitees.concat(inviteesResponse.data.collection);
    }

    await Calendly.deleteMany({});
    await Calendly.insertMany(allInvitees);

    res.status(201).json({ message: 'Events and invitees saved successfully' });
  } catch (error) {
    console.error('Error fetching Calendly events and invitees:', error);
    res.status(500).json({ error: error.message });
  }
};

export const getCalendlyEventById = async (req, res) =&amp;gt; {
  try {
    const calendlyId = req.params.calendlyId;
    const calendly = await Calendly.findById(calendlyId);

    if (!calendly) {
      return res.status(404).json({ message: 'Calendly not found' });
    }

    res.status(200).json(calendly);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

export const refreshCalendlyEndpoint = async (req, res, next) =&amp;gt; {
  try {
    await axios.post('https://localhost:8080/api/booking/calendly');
    next();
  } catch (error) {
    console.error('Error refreshing Calendly endpoint:', error);
    res.status(500).send('Error refreshing Calendly endpoint');
  }
};

export const getCalendly = async (req, res, next) =&amp;gt; {
  try {
    const calendly = await Calendly.find();
    res.status(200).json(calendly);
  } catch (err) {
    next(err);
  }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Defining the Routes:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// routes/calendlyRoutes.js
import express from 'express';
import {
  createCalendly,
  fetchCalendlyEvent,
  getCalendlyEventById,
  refreshCalendlyEndpoint,
  getCalendly,
} from '../controllers/calendlyController.js';

const router = express.Router();

router.post('/create', createCalendly);
router.get('/fetch', fetchCalendlyEvent);
router.get('/:calendlyId', getCalendlyEventById);
router.post('/refresh', refreshCalendlyEndpoint);
router.get('/', getCalendly);

export default router;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this comprehensive guide, we have demonstrated how to fetch event data from the Calendly API and save it into a MongoDB database using an Express.js application. We covered obtaining the access token from Calendly, setting up the project, creating a Mongoose model, defining route handlers for CRUD operations, and fetching data from the Calendly API. By following these steps, you can build a robust backend to manage Calendly events and invitees.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
