abstract nlw away to Prepare.

This commit is contained in:
Jill 2024-02-05 19:27:25 +03:00
parent 96ee81f77d
commit 77946f0ed7
Signed by: oat
GPG Key ID: 33489AA58A955108
2 changed files with 118 additions and 99 deletions

117
index.js
View File

@ -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);

100
nlw.js Normal file
View File

@ -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),
};
}