nlw-api/index.js

111 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}`);