From 77946f0ed79bde05d139f94b739ab39b07bf5166 Mon Sep 17 00:00:00 2001 From: "Jill \"oatmealine\" Monoids" Date: Mon, 5 Feb 2024 19:27:25 +0300 Subject: [PATCH] abstract nlw away to Prepare. --- index.js | 117 +++++++++---------------------------------------------- nlw.js | 100 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 99 deletions(-) create mode 100644 nlw.js diff --git a/index.js b/index.js index ee9bfad..7cac8b4 100644 --- a/index.js +++ b/index.js @@ -1,102 +1,21 @@ -import { GoogleSpreadsheet } from 'google-spreadsheet'; import express from 'express'; +import { fetchAllLevels as fetchNLWLevels } from './nlw.js'; -const doc = new GoogleSpreadsheet('1YxUE2kkvhT2E6AjnkvTf-o8iu_shSLbuFkEFcZOvieA', { apiKey: process.env.API_KEY }); - -const fruityLevels = { - 'Zur🅱️': 'Zurb', - 'Violently X𝕏': 'Violently X', - '🎄 Shock Therapy 🎄': 'Shock Therapy', - 'Collect All Pets 🦝': 'Collect All Pets', - 'Virtual Stigmata 🌚': 'Virtual Stigmata', - ' Dimensional Breaking': 'Dimensional Breaking', - 'Graphite Wordle': 'Graphite World', - 'Matilda tha Machine': 'Matilda the Machine', - 'Missing Benefi s': 'Missing Benefits', - 'troll levle': 'troll level', - 'gardening map': 'gardening map ', +let levels = { + nlw: { + regular: [], + pending: [], + platformer: [], + }, }; -await doc.loadInfo(); // loads document properties and worksheets -console.log(doc.title); - -async function fetchRegularCells(sheet) { - const levels = await sheet.getCellsInRange('A:A'); - const creators = await sheet.getCellsInRange('B:B'); - const skillsets = await sheet.getCellsInRange('D:D'); - const enjoyments = await sheet.getCellsInRange('E:E'); - const descriptions = await sheet.getCellsInRange('F:F'); - return { levels, creators, skillsets, enjoyments, descriptions }; -} -async function fetchPlatformerCells(sheet) { - const levels = await sheet.getCellsInRange('A:A'); - const creators = await sheet.getCellsInRange('B:B'); - const skillsets = await sheet.getCellsInRange('D:D'); - const enjoyments = await sheet.getCellsInRange('E:E'); - const descriptions = await sheet.getCellsInRange('F:F'); - return { levels, creators, skillsets, enjoyments, descriptions }; -} -async function fetchPendingCells(sheet) { - const levels = await sheet.getCellsInRange('B:B'); - const creators = await sheet.getCellsInRange('C:C'); - const skillsets = await sheet.getCellsInRange('E:E'); - const enjoyments = []; - const descriptions = await sheet.getCellsInRange('F:F'); - return { levels, creators, skillsets, enjoyments, descriptions }; +async function fetchSheets() { + const { regular, pending, platformer } = await fetchNLWLevels(); + levels.nlw = { regular, pending, platformer }; } -async function fetchLevels(sheet, platformer, pending) { - const { levels, creators, skillsets, enjoyments, descriptions } = await ( - pending ? fetchPendingCells(sheet) : (platformer ? fetchPlatformerCells(sheet) : fetchRegularCells(sheet)) - ); - - let levelObjs = []; - - let lastTier = null; - for (let i in levels) { - const level = levels[i], creator = creators[i], skillset = skillsets[i], enjoyment = enjoyments[i], description = descriptions[i]; - - if (level.length === 0 || level[0] === '') break; - - if (level[0].startsWith('| ')) { - lastTier = level[0].slice(2).replace(' Tier', '').trim(); - continue; - } - - if (!lastTier) continue; - if (lastTier === 'Super Terrifying') break; - - const enjoymentStr = enjoyment && enjoyment[0]; - const enjoymentParse = parseFloat(enjoymentStr || ""); - - const obj = { - sheetIndex: parseInt(i), - tier: lastTier, - name: fruityLevels[level[0]] || level[0] || "", - creator: creator && creator[0] || "", - skillset: skillset && skillset[0] || "", - enjoyment: !isNaN(enjoymentParse) ? enjoymentParse : null, - description: description && description[0] || "", - }; - - levelObjs.push(obj); - } - - return levelObjs; -} - -let regularLevels; -let pendingLevels; -let platformerLevels; - -async function fetchAllLevels() { - regularLevels = await fetchLevels(doc.sheetsById[0], false, false); - pendingLevels = await fetchLevels(doc.sheetsById[1134134033], false, true); - platformerLevels = await fetchLevels(doc.sheetsById[339121001], true, false); -} - -await fetchAllLevels(); -setInterval(fetchAllLevels, 1000 * 60 * 60); +await fetchSheets(); +setInterval(fetchSheets, 1000 * 60 * 60); const app = express(); @@ -109,16 +28,16 @@ app.get('/list', (req, res) => { let list; if (!type || type === '' || type === 'regular') { - list = regularLevels; + list = levels.nlw.regular; } else if (type === 'platformer') { - list = platformerLevels; + list = levels.nlw.platformer; } else if (type === 'pending') { - list = pendingLevels; + list = levels.nlw.pending; } else if (type === 'all') { return res.json([ - ...regularLevels.map(l => ({ type: 'regular', ...l })), - ...platformerLevels.map(l => ({ type: 'platformer', ...l })), - ...pendingLevels.map(l => ({ type: 'pending', ...l })), + ...levels.nlw.regular.map(l => ({ type: 'regular', ...l })), + ...levels.nlw.platformer.map(l => ({ type: 'platformer', ...l })), + ...levels.nlw.pending.map(l => ({ type: 'pending', ...l })), ]); } else { return res.status(400); diff --git a/nlw.js b/nlw.js new file mode 100644 index 0000000..82114d6 --- /dev/null +++ b/nlw.js @@ -0,0 +1,100 @@ +import { GoogleSpreadsheet } from 'google-spreadsheet'; + +const NLW_ID = '1YxUE2kkvhT2E6AjnkvTf-o8iu_shSLbuFkEFcZOvieA'; +const NLW_REGULAR_LEVELS_ID = 0; +const NLW_PENDING_LEVELS_ID = 1134134033; +const NLW_PLATFORMER_LEVELS_ID = 339121001; + +const fruityLevels = { + 'Zur🅱️': 'Zurb', + 'Violently X𝕏': 'Violently X', + '🎄 Shock Therapy 🎄': 'Shock Therapy', + 'Collect All Pets 🦝': 'Collect All Pets', + 'Virtual Stigmata 🌚': 'Virtual Stigmata', + ' Dimensional Breaking': 'Dimensional Breaking', + 'Graphite Wordle': 'Graphite World', + 'Matilda tha Machine': 'Matilda the Machine', + 'Missing Benefi s': 'Missing Benefits', + 'troll levle': 'troll level', + 'gardening map': 'gardening map ', +}; + +async function fetchRegularCells(sheet) { + console.log('fetching regular cells'); + const levels = await sheet.getCellsInRange('A:A'); + const creators = await sheet.getCellsInRange('B:B'); + const skillsets = await sheet.getCellsInRange('D:D'); + const enjoyments = await sheet.getCellsInRange('E:E'); + const descriptions = await sheet.getCellsInRange('F:F'); + return { levels, creators, skillsets, enjoyments, descriptions }; +} +async function fetchPlatformerCells(sheet) { + console.log('fetching platformer cells'); + const levels = await sheet.getCellsInRange('A:A'); + const creators = await sheet.getCellsInRange('B:B'); + const skillsets = await sheet.getCellsInRange('D:D'); + const enjoyments = await sheet.getCellsInRange('E:E'); + const descriptions = await sheet.getCellsInRange('F:F'); + return { levels, creators, skillsets, enjoyments, descriptions }; +} +async function fetchPendingCells(sheet) { + console.log('fetching pending cells'); + const levels = await sheet.getCellsInRange('B:B'); + const creators = await sheet.getCellsInRange('C:C'); + const skillsets = await sheet.getCellsInRange('E:E'); + const enjoyments = []; + const descriptions = await sheet.getCellsInRange('F:F'); + return { levels, creators, skillsets, enjoyments, descriptions }; +} + +async function fetchLevels(sheet, platformer, pending) { + const { levels, creators, skillsets, enjoyments, descriptions } = await ( + pending ? fetchPendingCells(sheet) : (platformer ? fetchPlatformerCells(sheet) : fetchRegularCells(sheet)) + ); + + let levelObjs = []; + + let lastTier = null; + for (let i in levels) { + const level = levels[i], creator = creators[i], skillset = skillsets[i], enjoyment = enjoyments[i], description = descriptions[i]; + + if (level.length === 0 || level[0] === '') break; + + if (level[0].startsWith('| ')) { + lastTier = level[0].slice(2).replace(' Tier', '').trim(); + continue; + } + + if (!lastTier) continue; + if (lastTier === 'Super Terrifying') break; + + const enjoymentStr = enjoyment && enjoyment[0]; + const enjoymentParse = parseFloat(enjoymentStr || ""); + + const obj = { + sheetIndex: parseInt(i), + tier: lastTier, + name: fruityLevels[level[0]] || level[0] || "", + creator: creator && creator[0] || "", + skillset: skillset && skillset[0] || "", + enjoyment: !isNaN(enjoymentParse) ? enjoymentParse : null, + description: description && description[0] || "", + }; + + levelObjs.push(obj); + } + + return levelObjs; +} + +export async function fetchAllLevels() { + console.log('fetching NLW levels'); + const doc = new GoogleSpreadsheet(NLW_ID, { apiKey: process.env.API_KEY }); + await doc.loadInfo(); // loads document properties and worksheets + console.log('loaded spreadsheet'); + return { + regular: await fetchLevels(doc.sheetsById[NLW_REGULAR_LEVELS_ID], false, false), + pending: await fetchLevels(doc.sheetsById[NLW_PENDING_LEVELS_ID], false, true), + platformer: await fetchLevels(doc.sheetsById[NLW_PLATFORMER_LEVELS_ID], true, false), + }; +} \ No newline at end of file