Migrate most things from item translations
Not the modeling code yet though!
This commit is contained in:
parent
6686f13154
commit
62531cfe34
7 changed files with 45 additions and 74 deletions
|
@ -49,7 +49,7 @@ async function handle(req, res) {
|
|||
// Modified, unless the data really did change.)
|
||||
res.setHeader(
|
||||
"Cache-Control",
|
||||
"public, max-age=3600, stale-while-revalidate=86400"
|
||||
"public, max-age=3600, stale-while-revalidate=86400",
|
||||
);
|
||||
return res.send(itemValues);
|
||||
}
|
||||
|
@ -58,11 +58,8 @@ async function loadAllNcItemNamesAndIds() {
|
|||
const db = await connectToDb();
|
||||
|
||||
const [rows] = await db.query(`
|
||||
SELECT items.id, item_translations.name FROM items
|
||||
INNER JOIN item_translations ON item_translations.item_id = items.id
|
||||
WHERE
|
||||
(items.rarity_index IN (0, 500) OR is_manually_nc = 1)
|
||||
AND item_translations.locale = "en"
|
||||
SELECT items.id, items.name FROM items
|
||||
WHERE items.rarity_index IN (0, 500) OR is_manually_nc = 1
|
||||
`);
|
||||
|
||||
return rows.map(({ id, name }) => ({ id, name: normalizeItemName(name) }));
|
||||
|
@ -75,13 +72,13 @@ async function loadAllNcItemNamesAndIds() {
|
|||
*/
|
||||
async function loadOWLSValuesByIdOrName() {
|
||||
const res = await fetch(
|
||||
`https://neo-owls.herokuapp.com/itemdata/owls_script/`
|
||||
`https://neo-owls.herokuapp.com/itemdata/owls_script/`,
|
||||
);
|
||||
const json = await res.json();
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(
|
||||
`Could not load OWLS Pricer data: ${res.status} ${res.statusText}`
|
||||
`Could not load OWLS Pricer data: ${res.status} ${res.statusText}`,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -137,7 +134,7 @@ function normalizeItemName(name) {
|
|||
async function handleWithBeeline(req, res) {
|
||||
beeline.withTrace(
|
||||
{ name: "api/allNCTradeValues", operation_name: "api/allNCTradeValues" },
|
||||
() => handle(req, res)
|
||||
() => handle(req, res),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -115,8 +115,7 @@ async function handle(req, res) {
|
|||
|
||||
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||
try {
|
||||
const { itemLoader, itemTranslationLoader, zoneLoader } =
|
||||
buildLoaders(db);
|
||||
const { itemLoader, zoneLoader } = buildLoaders(db);
|
||||
|
||||
// Copied from setLayerBodyId mutation
|
||||
const itemId = await db
|
||||
|
@ -127,9 +126,8 @@ async function handle(req, res) {
|
|||
)
|
||||
.then(([rows]) => normalizeRow(rows[0]).parentId);
|
||||
|
||||
const [item, itemTranslation, zone, bodyName] = await Promise.all([
|
||||
const [item, zone, bodyName] = await Promise.all([
|
||||
itemLoader.load(itemId),
|
||||
itemTranslationLoader.load(itemId),
|
||||
zoneLoader.load(layer.zoneId),
|
||||
loadBodyName(layer.bodyId, db),
|
||||
]);
|
||||
|
@ -137,7 +135,7 @@ async function handle(req, res) {
|
|||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${item.name}`,
|
||||
thumbnail: {
|
||||
url: item.thumbnailUrl,
|
||||
height: 80,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
yarn run --silent mysqldump openneo_impress species colors zones \
|
||||
> $(dirname $0)/../public-data-constants.sql \
|
||||
&& yarn run --silent mysqldump openneo_impress alt_styles items item_translations \
|
||||
&& yarn run --silent mysqldump openneo_impress alt_styles items \
|
||||
parents_swf_assets pet_states pet_types swf_assets \
|
||||
| gzip -c \
|
||||
> $(dirname $0)/../public-data-from-modeling.sql.gz
|
|
@ -1,6 +1,6 @@
|
|||
yarn run --silent mysqldump --no-data openneo_impress closet_hangers closet_lists \
|
||||
colors items item_translations modeling_logs parents_swf_assets pet_types \
|
||||
pet_states species swf_assets users zones \
|
||||
colors items modeling_logs parents_swf_assets pet_types pet_states species \
|
||||
swf_assets users zones \
|
||||
| \
|
||||
sed 's/ AUTO_INCREMENT=[0-9]*//g' \
|
||||
> $(dirname $0)/../schema-for-impress.sql \
|
||||
|
|
|
@ -7,7 +7,6 @@ GRANT SELECT ON colors TO impress2020;
|
|||
GRANT SELECT ON donation_features TO impress2020;
|
||||
GRANT SELECT ON donations TO impress2020;
|
||||
GRANT SELECT ON items TO impress2020;
|
||||
GRANT SELECT ON item_translations TO impress2020;
|
||||
GRANT SELECT ON modeling_logs TO impress2020;
|
||||
GRANT SELECT ON parents_swf_assets TO impress2020;
|
||||
GRANT SELECT ON pet_types TO impress2020;
|
||||
|
@ -18,7 +17,6 @@ GRANT SELECT ON zones TO impress2020;
|
|||
|
||||
-- Public data tables: write. Used in modeling and support tools.
|
||||
GRANT INSERT, UPDATE ON items TO impress2020;
|
||||
GRANT INSERT, UPDATE ON item_translations TO impress2020;
|
||||
GRANT INSERT, UPDATE, DELETE ON parents_swf_assets TO impress2020;
|
||||
GRANT INSERT, UPDATE ON pet_types TO impress2020;
|
||||
GRANT INSERT, UPDATE ON pet_states TO impress2020;
|
||||
|
|
|
@ -316,15 +316,15 @@ const typeDefs = gql`
|
|||
|
||||
const resolvers = {
|
||||
Item: {
|
||||
name: async ({ id, name }, _, { itemTranslationLoader }) => {
|
||||
name: async ({ id, name }, _, { itemLoader }) => {
|
||||
if (name) return name;
|
||||
const translation = await itemTranslationLoader.load(id);
|
||||
return translation.name;
|
||||
const item = await itemLoader.load(id);
|
||||
return item.name;
|
||||
},
|
||||
description: async ({ id, description }, _, { itemTranslationLoader }) => {
|
||||
description: async ({ id, description }, _, { itemLoader }) => {
|
||||
if (description) return description;
|
||||
const translation = await itemTranslationLoader.load(id);
|
||||
return translation.description;
|
||||
const item = await itemLoader.load(id);
|
||||
return item.description;
|
||||
},
|
||||
thumbnailUrl: async ({ id, thumbnailUrl }, _, { itemLoader }) => {
|
||||
if (thumbnailUrl) return thumbnailUrl;
|
||||
|
@ -340,15 +340,9 @@ const resolvers = {
|
|||
const item = await itemLoader.load(id);
|
||||
return isNC(item);
|
||||
},
|
||||
isPb: async ({ id }, _, { itemTranslationLoader }) => {
|
||||
const translation = await itemTranslationLoader.load(id);
|
||||
if (!translation) {
|
||||
console.warn(
|
||||
`Item.isPb: Translation not found for item ${id}. Returning false.`,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
return translation.description.includes(
|
||||
isPb: async ({ id }, _, { itemLoader }) => {
|
||||
const item = await itemLoader.load(id);
|
||||
return item.description.includes(
|
||||
"This item is part of a deluxe paint brush set!",
|
||||
);
|
||||
},
|
||||
|
@ -360,20 +354,14 @@ const resolvers = {
|
|||
// This feature is deprecated, so now we just always return unknown value.
|
||||
return null;
|
||||
},
|
||||
ncTradeValueText: async (
|
||||
{ id },
|
||||
_,
|
||||
{ itemLoader, itemTranslationLoader },
|
||||
) => {
|
||||
ncTradeValueText: async ({ id }, _, { itemLoader }) => {
|
||||
// Skip this lookup for non-NC items, as a perf optimization.
|
||||
const item = await itemLoader.load(id);
|
||||
if (!isNC(item)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the item name, which is how we look things up in ~owls.
|
||||
const itemTranslation = await itemTranslationLoader.load(id);
|
||||
let itemName = itemTranslation.name;
|
||||
let itemName = item.name;
|
||||
|
||||
// HACK: The name "Butterfly Dress" is used for two different items.
|
||||
// Here's what ~owls does to distinguish!
|
||||
|
|
|
@ -104,7 +104,7 @@ const resolvers = {
|
|||
setManualSpecialColor: async (
|
||||
_,
|
||||
{ itemId, colorId, supportSecret },
|
||||
{ itemLoader, itemTranslationLoader, colorLoader, db },
|
||||
{ itemLoader, colorLoader, db },
|
||||
) => {
|
||||
assertSupportSecretOrThrow(supportSecret);
|
||||
|
||||
|
@ -125,8 +125,7 @@ const resolvers = {
|
|||
|
||||
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||
try {
|
||||
const [itemTranslation, oldColor, newColor] = await Promise.all([
|
||||
itemTranslationLoader.load(itemId),
|
||||
const [oldColor, newColor] = await Promise.all([
|
||||
oldItem.manualSpecialColorId
|
||||
? colorLoader.load(oldItem.manualSpecialColorId)
|
||||
: Promise.resolve(null),
|
||||
|
@ -142,7 +141,7 @@ const resolvers = {
|
|||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${oldItem.name}`,
|
||||
thumbnail: {
|
||||
url: oldItem.thumbnailUrl,
|
||||
height: 80,
|
||||
|
@ -172,7 +171,7 @@ const resolvers = {
|
|||
setItemExplicitlyBodySpecific: async (
|
||||
_,
|
||||
{ itemId, explicitlyBodySpecific, supportSecret },
|
||||
{ itemLoader, itemTranslationLoader, db },
|
||||
{ itemLoader, db },
|
||||
) => {
|
||||
assertSupportSecretOrThrow(supportSecret);
|
||||
|
||||
|
@ -193,7 +192,6 @@ const resolvers = {
|
|||
|
||||
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||
try {
|
||||
const itemTranslation = await itemTranslationLoader.load(itemId);
|
||||
const oldRuleName = oldItem.explicitlyBodySpecific
|
||||
? "Body specific"
|
||||
: "Auto-detect";
|
||||
|
@ -203,7 +201,7 @@ const resolvers = {
|
|||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${oldItem.name}`,
|
||||
thumbnail: {
|
||||
url: oldItem.thumbnailUrl,
|
||||
height: 80,
|
||||
|
@ -233,7 +231,7 @@ const resolvers = {
|
|||
setItemIsManuallyNc: async (
|
||||
_,
|
||||
{ itemId, isManuallyNc, supportSecret },
|
||||
{ itemLoader, itemTranslationLoader, db },
|
||||
{ itemLoader, db },
|
||||
) => {
|
||||
assertSupportSecretOrThrow(supportSecret);
|
||||
|
||||
|
@ -254,7 +252,6 @@ const resolvers = {
|
|||
|
||||
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||
try {
|
||||
const itemTranslation = await itemTranslationLoader.load(itemId);
|
||||
const oldRuleName = oldItem.isManuallyNc
|
||||
? "Manually set: Yes"
|
||||
: "Auto-detect";
|
||||
|
@ -264,7 +261,7 @@ const resolvers = {
|
|||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${oldItem.name}`,
|
||||
thumbnail: {
|
||||
url: oldItem.thumbnailUrl,
|
||||
height: 80,
|
||||
|
@ -294,7 +291,7 @@ const resolvers = {
|
|||
setLayerBodyId: async (
|
||||
_,
|
||||
{ layerId, bodyId, supportSecret },
|
||||
{ itemLoader, itemTranslationLoader, swfAssetLoader, zoneLoader, db },
|
||||
{ itemLoader, swfAssetLoader, zoneLoader, db },
|
||||
) => {
|
||||
assertSupportSecretOrThrow(supportSecret);
|
||||
|
||||
|
@ -338,19 +335,17 @@ const resolvers = {
|
|||
)
|
||||
.then(([rows]) => normalizeRow(rows[0]).parentId);
|
||||
|
||||
const [item, itemTranslation, zone, oldBodyName, newBodyName] =
|
||||
await Promise.all([
|
||||
itemLoader.load(itemId),
|
||||
itemTranslationLoader.load(itemId),
|
||||
zoneLoader.load(oldSwfAsset.zoneId),
|
||||
loadBodyName(oldSwfAsset.bodyId, db),
|
||||
loadBodyName(bodyId, db),
|
||||
]);
|
||||
const [item, zone, oldBodyName, newBodyName] = await Promise.all([
|
||||
itemLoader.load(itemId),
|
||||
zoneLoader.load(oldSwfAsset.zoneId),
|
||||
loadBodyName(oldSwfAsset.bodyId, db),
|
||||
loadBodyName(bodyId, db),
|
||||
]);
|
||||
|
||||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${item.name}`,
|
||||
thumbnail: {
|
||||
url: item.thumbnailUrl,
|
||||
height: 80,
|
||||
|
@ -384,7 +379,6 @@ const resolvers = {
|
|||
{ layerId, knownGlitches, supportSecret },
|
||||
{
|
||||
itemLoader,
|
||||
itemTranslationLoader,
|
||||
swfAssetLoader,
|
||||
zoneLoader,
|
||||
petStateLoader,
|
||||
|
@ -439,16 +433,15 @@ const resolvers = {
|
|||
.then(([rows]) => normalizeRow(rows[0]));
|
||||
|
||||
if (parentType === "Item") {
|
||||
const [item, itemTranslation, zone] = await Promise.all([
|
||||
const [item, zone] = await Promise.all([
|
||||
itemLoader.load(parentId),
|
||||
itemTranslationLoader.load(parentId),
|
||||
zoneLoader.load(oldSwfAsset.zoneId),
|
||||
]);
|
||||
|
||||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${item.name}`,
|
||||
thumbnail: {
|
||||
url: item.thumbnailUrl,
|
||||
height: 80,
|
||||
|
@ -523,7 +516,7 @@ const resolvers = {
|
|||
bulkAddLayersToItem: async (
|
||||
_,
|
||||
{ itemId, entries, supportSecret },
|
||||
{ itemLoader, itemTranslationLoader, db },
|
||||
{ itemLoader, db },
|
||||
) => {
|
||||
assertSupportSecretOrThrow(supportSecret);
|
||||
|
||||
|
@ -562,12 +555,10 @@ const resolvers = {
|
|||
|
||||
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||
try {
|
||||
const itemTranslation = await itemTranslationLoader.load(itemId);
|
||||
|
||||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${item.name}`,
|
||||
thumbnail: {
|
||||
url: item.thumbnailUrl,
|
||||
height: 80,
|
||||
|
@ -597,7 +588,7 @@ const resolvers = {
|
|||
removeLayerFromItem: async (
|
||||
_,
|
||||
{ layerId, itemId, supportSecret },
|
||||
{ itemLoader, itemTranslationLoader, swfAssetLoader, zoneLoader, db },
|
||||
{ itemLoader, swfAssetLoader, zoneLoader, db },
|
||||
) => {
|
||||
assertSupportSecretOrThrow(supportSecret);
|
||||
|
||||
|
@ -620,9 +611,8 @@ const resolvers = {
|
|||
|
||||
if (process.env["SUPPORT_TOOLS_DISCORD_WEBHOOK_URL"]) {
|
||||
try {
|
||||
const [item, itemTranslation, zone, bodyName] = await Promise.all([
|
||||
const [item, zone, bodyName] = await Promise.all([
|
||||
itemLoader.load(itemId),
|
||||
itemTranslationLoader.load(itemId),
|
||||
zoneLoader.load(oldSwfAsset.zoneId),
|
||||
loadBodyName(oldSwfAsset.bodyId, db),
|
||||
]);
|
||||
|
@ -630,7 +620,7 @@ const resolvers = {
|
|||
await logToDiscord({
|
||||
embeds: [
|
||||
{
|
||||
title: `🛠 ${itemTranslation.name}`,
|
||||
title: `🛠 ${item.name}`,
|
||||
thumbnail: {
|
||||
url: item.thumbnailUrl,
|
||||
height: 80,
|
||||
|
|
Loading…
Reference in a new issue