1
0
mirror of https://github.com/kamranahmedse/developer-roadmap.git synced 2025-02-22 02:27:43 +01:00
developer-roadmap/bin/update-sponsors.cjs

119 lines
3.0 KiB
JavaScript
Raw Normal View History

2023-03-01 02:19:40 +00:00
const path = require('path');
const fs = require('fs');
const yaml = require('js-yaml');
const apiKey = process.env.SPONSOR_SHEET_API_KEY;
const sheetId = process.env.SPONSOR_SHEET_ID;
if (!apiKey || !sheetId) {
console.error('Missing API key or sheet ID');
process.exit(1);
}
const sheetRange = 'A3:I1001';
const sheetUrl = `https://sheets.googleapis.com/v4/spreadsheets/${sheetId}/values/${sheetRange}?key=${apiKey}`;
function populateRoadmapAds({
roadmapUrl,
company,
redirectUrl,
imageUrl,
adTitle,
adDescription,
startDate,
endDate,
isActive,
}) {
const isConfiguredActive = isActive.toLowerCase() === 'yes';
const currentDate = new Date();
const isDateInRange = currentDate >= new Date(startDate) && currentDate <= new Date(endDate);
const shouldShowAd = isConfiguredActive && isDateInRange;
// get id from the roadmap URL
const roadmapId = roadmapUrl
.split('/')
.pop()
.replace(/\?.+?$/, '');
const roadmapFilePath = path.join(__dirname, '../src/data/roadmaps', `${roadmapId}/${roadmapId}.md`);
if (!fs.existsSync(roadmapFilePath)) {
console.error(`Roadmap file not found: ${roadmapFilePath}`);
process.exit(1);
}
console.log(`Updating roadmap: ${roadmapId}`);
const roadmapFileContent = fs.readFileSync(roadmapFilePath, 'utf8');
const frontMatterRegex = /---\n([\s\S]*?)\n---/;
const existingFrontmatter = roadmapFileContent.match(frontMatterRegex)[1];
const contentWithoutFrontmatter = roadmapFileContent.replace(frontMatterRegex, ``).trim();
2023-03-01 02:28:46 +00:00
let fronmatterObj = yaml.load(existingFrontmatter);
2023-03-01 02:19:40 +00:00
if (shouldShowAd) {
2023-03-01 02:28:46 +00:00
const frontmatterValues = Object.entries(fronmatterObj);
// Insert sponsor data at 10 index i.e. after
// roadmap dimensions in the fronmatter
frontmatterValues.splice(10, 0, [
'sponsor',
{
url: redirectUrl,
title: adTitle,
imageUrl,
description: adDescription,
event: {
category: 'SponsorClick',
action: `${company} Redirect`,
label: `Clicked ${company} Link`,
},
2023-03-01 02:19:40 +00:00
},
2023-03-01 02:28:46 +00:00
]);
fronmatterObj = Object.fromEntries(frontmatterValues);
2023-03-01 02:19:40 +00:00
} else {
2023-03-01 02:28:46 +00:00
delete fronmatterObj.sponsor;
2023-03-01 02:19:40 +00:00
}
2023-03-01 02:28:46 +00:00
const newFrontmatter = yaml.dump(fronmatterObj, { lineWidth: 10000, forceQuotes: true, quotingType: '"' });
2023-03-01 02:19:40 +00:00
const newContent = `---\n${newFrontmatter}---\n\n${contentWithoutFrontmatter}`;
fs.writeFileSync(roadmapFilePath, newContent, 'utf8');
}
fetch(sheetUrl)
.then((res) => res.json())
.then((rawData) => {
const rows = rawData.values;
rows.map((row) => {
// prettier-ignore
const [
roadmapUrl,
company,
redirectUrl,
imageUrl,
adTitle,
adDescription,
startDate,
endDate,
isActive,
] = row;
populateRoadmapAds({
roadmapUrl,
company,
redirectUrl,
imageUrl,
adTitle,
adDescription,
startDate,
endDate,
isActive,
});
});
});