111 lines
3.6 KiB
JavaScript
111 lines
3.6 KiB
JavaScript
import { GoogleSpreadsheet } from 'google-spreadsheet';
|
||
import express from 'express';
|
||
|
||
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',
|
||
};
|
||
|
||
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 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 obj = {
|
||
sheetIndex: parseInt(i),
|
||
name: fruityLevels[level[0]] || level[0],
|
||
creator: creator && creator[0],
|
||
skillset: skillset && skillset[0],
|
||
enjoyment: enjoyment && enjoyment[0],
|
||
description: description && description[0],
|
||
};
|
||
|
||
levelObjs.push(obj);
|
||
}
|
||
|
||
return levelObjs;
|
||
}
|
||
|
||
let regularLevels = await fetchLevels(doc.sheetsById[0], false, false);
|
||
let pendingLevels = await fetchLevels(doc.sheetsById[1134134033], false, true);
|
||
let platformerLevels = await fetchLevels(doc.sheetsById[339121001], true, false);
|
||
|
||
const app = express();
|
||
|
||
app.get('/', (req, res) => {
|
||
res.redirect('https://git.oat.zone/oat/nlw-api');
|
||
});
|
||
|
||
app.get('/list', (req, res) => {
|
||
const type = req.query.type;
|
||
|
||
let list;
|
||
if (!type || type === '' || type === 'regular') {
|
||
list = regularLevels;
|
||
} else if (type === 'platformer') {
|
||
list = platformerLevels;
|
||
} else if (type === 'pending') {
|
||
list = pendingLevels;
|
||
} else {
|
||
return res.status(400);
|
||
}
|
||
|
||
res.json(list);
|
||
});
|
||
|
||
const port = process.env.PORT || 8080
|
||
app.listen(port);
|
||
console.log(`lisening on port ${port}`); |