abstract nlw away to Prepare.
This commit is contained in:
parent
96ee81f77d
commit
77946f0ed7
117
index.js
117
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);
|
||||
|
|
|
@ -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),
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue