Use the new Waka item ID field
This will help us disambiguate items like Butterfly Dress with a non-unique name, and also some where the real item name is glitchy so using it as a key is not wise lol
This commit is contained in:
parent
2b93e5cca7
commit
45cf9a6f1f
1 changed files with 24 additions and 28 deletions
|
@ -14,9 +14,9 @@ import connectToDb from "../src/server/db";
|
||||||
async function handle(req, res) {
|
async function handle(req, res) {
|
||||||
const allNcItemNamesAndIdsPromise = loadAllNcItemNamesAndIds();
|
const allNcItemNamesAndIdsPromise = loadAllNcItemNamesAndIds();
|
||||||
|
|
||||||
let itemValuesByName;
|
let itemValuesByIdOrName;
|
||||||
try {
|
try {
|
||||||
itemValuesByName = await loadWakaValuesByName();
|
itemValuesByIdOrName = await loadWakaValuesByIdOrName();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
res.setHeader("Content-Type", "text/plain");
|
res.setHeader("Content-Type", "text/plain");
|
||||||
|
@ -28,25 +28,10 @@ async function handle(req, res) {
|
||||||
const allNcItemNamesAndIds = await allNcItemNamesAndIdsPromise;
|
const allNcItemNamesAndIds = await allNcItemNamesAndIdsPromise;
|
||||||
const itemValues = {};
|
const itemValues = {};
|
||||||
for (const { name, id } of allNcItemNamesAndIds) {
|
for (const { name, id } of allNcItemNamesAndIds) {
|
||||||
if (name in itemValuesByName) {
|
if (id in itemValuesByIdOrName) {
|
||||||
itemValues[id] = itemValuesByName[name];
|
itemValues[id] = itemValuesByIdOrName[id];
|
||||||
} else {
|
} else if (name in itemValuesByIdOrName) {
|
||||||
console.warn(
|
itemValues[id] = itemValuesByIdOrName[name];
|
||||||
`[Item: Y, Waka: N] No Waka value for NC DTI item ${JSON.stringify(
|
|
||||||
name
|
|
||||||
)} (${id})`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const allNcItemNames = new Set(allNcItemNamesAndIds.map(({ name }) => name));
|
|
||||||
for (const name of Object.keys(itemValuesByName)) {
|
|
||||||
if (!allNcItemNames.has(name)) {
|
|
||||||
console.warn(
|
|
||||||
`[Item: N, Waka: Y] No NC DTI data for Waka item ${JSON.stringify(
|
|
||||||
name
|
|
||||||
)}`
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +61,12 @@ async function loadAllNcItemNamesAndIds() {
|
||||||
return rows.map(({ id, name }) => ({ id, name: normalizeItemName(name) }));
|
return rows.map(({ id, name }) => ({ id, name: normalizeItemName(name) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadWakaValuesByName() {
|
/**
|
||||||
|
* Load all Waka values from the spreadsheet. Returns an object keyed by ID or
|
||||||
|
* name - that is, if the item ID is provided in the sheet, we use that as the
|
||||||
|
* key; or if not, we use the name as the key.
|
||||||
|
*/
|
||||||
|
async function loadWakaValuesByIdOrName() {
|
||||||
if (!process.env["GOOGLE_API_KEY"]) {
|
if (!process.env["GOOGLE_API_KEY"]) {
|
||||||
throw new Error(`GOOGLE_API_KEY environment variable must be provided`);
|
throw new Error(`GOOGLE_API_KEY environment variable must be provided`);
|
||||||
}
|
}
|
||||||
|
@ -109,15 +99,21 @@ async function loadWakaValuesByName() {
|
||||||
// the spreadsheet columns that we don't use on DTI, like Notes.
|
// the spreadsheet columns that we don't use on DTI, like Notes.
|
||||||
//
|
//
|
||||||
// NOTE: The Sheets API only returns the first non-empty cells of the row.
|
// NOTE: The Sheets API only returns the first non-empty cells of the row.
|
||||||
// So, when there's no value specified, it only returns one cell.
|
// That's why we set `""` as the defaults, in case the value/notes/etc
|
||||||
// That's why we set `""` as the default `value`.
|
// aren't provided.
|
||||||
const itemValuesByName = {};
|
const itemValuesByIdOrName = {};
|
||||||
for (const [itemName, value = ""] of rows) {
|
for (const [
|
||||||
|
itemName,
|
||||||
|
value = "",
|
||||||
|
notes = "",
|
||||||
|
marks = "",
|
||||||
|
itemId = "",
|
||||||
|
] of rows) {
|
||||||
const normalizedItemName = normalizeItemName(itemName);
|
const normalizedItemName = normalizeItemName(itemName);
|
||||||
itemValuesByName[normalizedItemName] = { value };
|
itemValuesByIdOrName[itemId || normalizedItemName] = { value };
|
||||||
}
|
}
|
||||||
|
|
||||||
return itemValuesByName;
|
return itemValuesByIdOrName;
|
||||||
}
|
}
|
||||||
|
|
||||||
function normalizeItemName(name) {
|
function normalizeItemName(name) {
|
||||||
|
|
Loading…
Reference in a new issue