From eee00951d05eceb6ded1f916687f877320e807e4 Mon Sep 17 00:00:00 2001 From: Razzmatazz Date: Wed, 1 Jan 2025 17:11:44 -0600 Subject: [PATCH] split info into handbook kv --- datasources/handbook.mjs | 90 +++++++++++++++++++++++++++++++++++ datasources/index.mjs | 2 + datasources/items.mjs | 89 +--------------------------------- resolvers/hideoutResolver.mjs | 2 +- resolvers/itemResolver.mjs | 62 ++++++++++++++---------- resolvers/taskResolver.mjs | 4 +- schema-static.mjs | 1 + 7 files changed, 134 insertions(+), 116 deletions(-) create mode 100644 datasources/handbook.mjs diff --git a/datasources/handbook.mjs b/datasources/handbook.mjs new file mode 100644 index 00000000..3cc184a3 --- /dev/null +++ b/datasources/handbook.mjs @@ -0,0 +1,90 @@ +import WorkerKV from '../utils/worker-kv.mjs'; + +class HandbookAPI extends WorkerKV { + constructor(dataSource) { + super('handbook_data', dataSource); + //this.gameModes.push('pve'); + } + + async getCategory(context, info, id) { + const { cache } = await this.getCache(context, info); + return cache.ItemCategory[id] || cache.HandbookCategory[id]; + } + + async getTopCategory(context, info, id) { + const cat = await this.getCategory(context, info, id); + if (cat && cat.parent_id) return this.getTopCategory(context, info, cat.parent_id); + return cat; + } + + async getCategories(context, info) { + const { cache } = await this.getCache(context, info); + if (!cache) { + return Promise.reject(new Error('Item cache is empty')); + } + const categories = []; + for (const id in cache.ItemCategory) { + categories.push(cache.ItemCategory[id]); + } + return categories; + } + + async getCategoriesEnum(context, info) { + const cats = await this.getCategories(context, info); + const map = {}; + for (const id in cats) { + map[cats[id].enumName] = cats[id]; + } + return map; + } + + async getHandbookCategory(context, info, id) { + const { cache } = await this.getCache(context, info); + return cache.HandbookCategory[id]; + } + + async getHandbookCategories(context, info) { + const { cache } = await this.getCache(context, info); + if (!cache) { + return Promise.reject(new Error('Item cache is empty')); + } + return Object.values(cache.HandbookCategory); + } + + async getArmorMaterials(context, info) { + const { cache } = await this.getCache(context, info); + return Object.values(cache.ArmorMaterial).sort(); + } + + async getArmorMaterial(context, info, matKey) { + const { cache } = await this.getCache(context, info); + return cache.ArmorMaterial[matKey]; + } + + async getMasterings(context, info) { + const { cache } = await this.getCache(context, info); + return cache.Mastering; + } + + async getMastering(context, info, mastId) { + const { cache } = await this.getCache(context, info); + return cache.Mastering.find(m => m.id === mastId); + } + + async getSkills(context, info) { + const { cache } = await this.getCache(context, info); + return cache.Skill; + } + + async getSkill(context, info, skillId) { + const { cache } = await this.getCache(context, info); + return cache.Skill.find(s => s.id === skillId); + } + + async getPlayerLevels(context, info) { + const { cache } = await this.getCache(context, info); + return cache.PlayerLevel; + } +} + +export default HandbookAPI; diff --git a/datasources/index.mjs b/datasources/index.mjs index 3a7886d9..0b236f36 100644 --- a/datasources/index.mjs +++ b/datasources/index.mjs @@ -1,5 +1,6 @@ import BartersAPI from './barters.mjs'; import CraftsAPI from './crafts.mjs'; +import HandbookAPI from './handbook.mjs'; import HideoutAPI from './hideout.mjs'; import HistoricalPricesAPI from './historical-prices.mjs'; import ArchivedPricesAPI from './archived-prices.mjs'; @@ -23,6 +24,7 @@ class DataSource { this.worker = { barter: new BartersAPI(this), craft: new CraftsAPI(this), + handbook: new HandbookAPI(this), hideout: new HideoutAPI(this), historicalPrice: new HistoricalPricesAPI(this), archivedPrice: new ArchivedPricesAPI(this), diff --git a/datasources/items.mjs b/datasources/items.mjs index aa6522d8..d8554e1c 100644 --- a/datasources/items.mjs +++ b/datasources/items.mjs @@ -170,7 +170,7 @@ class ItemsAPI extends WorkerKV { if (!items) { items = Object.values(cache.Item); } - const categories = (await this.getCategories(context, info)).filter(cat => names.includes(cat.enumName)); + const categories = (await context.data.worker.handbook.getCategories(context, info)).filter(cat => names.includes(cat.enumName)); return items.filter((item) => { return item.categories.some(catId => categories.some(cat => cat.id === catId)); }); @@ -181,7 +181,7 @@ class ItemsAPI extends WorkerKV { if (!items) { items = Object.values(cache.Item); } - const categories = (await this.getHandbookCategories(context, info)).filter(cat => names.includes(cat.enumName)); + const categories = (await context.data.worker.handbook.getHandbookCategories(context, info)).filter(cat => names.includes(cat.enumName)); return items.filter((item) => { return item.handbookCategories.some(catId => categories.some(cat => cat.id === catId)); }); @@ -216,86 +216,11 @@ class ItemsAPI extends WorkerKV { }); } - async getCategory(context, info, id) { - const { cache } = await this.getCache(context, info); - return cache.ItemCategory[id] || cache.HandbookCategory[id]; - } - - async getTopCategory(context, info, id) { - const cat = await this.getCategory(context, info, id); - if (cat && cat.parent_id) return this.getTopCategory(context, info, cat.parent_id); - return cat; - } - - async getCategories(context, info) { - const { cache } = await this.getCache(context, info); - if (!cache) { - return Promise.reject(new Error('Item cache is empty')); - } - const categories = []; - for (const id in cache.ItemCategory) { - categories.push(cache.ItemCategory[id]); - } - return categories; - } - - async getCategoriesEnum(context, info) { - const cats = await this.getCategories(context, info); - const map = {}; - for (const id in cats) { - map[cats[id].enumName] = cats[id]; - } - return map; - } - - async getHandbookCategory(context, info, id) { - const { cache } = await this.getCache(context, info); - return cache.HandbookCategory[id]; - } - - async getHandbookCategories(context, info) { - const { cache } = await this.getCache(context, info); - if (!cache) { - return Promise.reject(new Error('Item cache is empty')); - } - return Object.values(cache.HandbookCategory); - } - async getFleaMarket(context, info) { const { cache } = await this.getCache(context, info); return cache.FleaMarket; } - async getArmorMaterials(context, info) { - const { cache } = await this.getCache(context, info); - return Object.values(cache.ArmorMaterial).sort(); - } - - async getArmorMaterial(context, info, matKey) { - const { cache } = await this.getCache(context, info); - return cache.ArmorMaterial[matKey]; - } - - async getMasterings(context, info) { - const { cache } = await this.getCache(context, info); - return cache.Mastering; - } - - async getMastering(context, info, mastId) { - const { cache } = await this.getCache(context, info); - return cache.Mastering.find(m => m.id === mastId); - } - - async getSkills(context, info) { - const { cache } = await this.getCache(context, info); - return cache.Skill; - } - - async getSkill(context, info, skillId) { - const { cache } = await this.getCache(context, info); - return cache.Skill.find(s => s.id === skillId); - } - async getAmmoList(context, info) { const allAmmo = await this.getItemsByBsgCategoryId(context, info, '5485a8684bdc2da71d8b4567').then(ammoItems => { // ignore bb @@ -308,16 +233,6 @@ class ItemsAPI extends WorkerKV { }; }); } - - async getPlayerLevels(context, info) { - const { cache } = await this.getCache(context, info); - return cache.PlayerLevel; - } - - async getTypes(context, info) { - const { cache } = await this.getCache(context, info); - return cache.ItemType; - } } export default ItemsAPI; diff --git a/resolvers/hideoutResolver.mjs b/resolvers/hideoutResolver.mjs index 7fc0429b..f5c65589 100644 --- a/resolvers/hideoutResolver.mjs +++ b/resolvers/hideoutResolver.mjs @@ -50,7 +50,7 @@ export default { return context.data.worker.hideout.getLocale(data.name, context, info); }, skill(data, args, context, info) { - return context.data.worker.item.getSkill(context, info, data.name); + return context.data.worker.handbook.getSkill(context, info, data.name); }, }, HideoutModule: { diff --git a/resolvers/itemResolver.mjs b/resolvers/itemResolver.mjs index dcc6c900..e1123d6f 100644 --- a/resolvers/itemResolver.mjs +++ b/resolvers/itemResolver.mjs @@ -53,10 +53,10 @@ export default { return context.util.paginate(items, args); }, itemCategories(obj, args, context, info) { - return context.util.paginate(context.data.worker.item.getCategories(context, info), args); + return context.util.paginate(context.data.worker.handbook.getCategories(context, info), args); }, handbookCategories(obj, args, context, info) { - return context.util.paginate(context.data.worker.item.getHandbookCategories(context, info), args); + return context.util.paginate(context.data.worker.handbook.getHandbookCategories(context, info), args); }, itemsByIDs(obj, args, context, info) { return context.data.worker.item.getItemsByIDs(context, info, args.ids, false); @@ -73,6 +73,16 @@ export default { itemsByBsgCategoryId(obj, args, context, info) { return context.data.worker.item.getItemsByBsgCategoryId(context, info, args.bsgCategoryId); }, + async itemPrices(obj, args, context, info) { + const [ + historical, + archived, + ] = await Promise.all([ + context.data.worker.historicalPrice.getByItemId(context, info, args.id, 30), + context.data.worker.archivedPrice.getByItemId(context, info, args.id), + ]); + return context.util.paginate([...archived, ...historical], args); + }, historicalItemPrices(obj, args, context, info) { return context.util.paginate(context.data.worker.historicalPrice.getByItemId(context, info, args.id, args.days), args); }, @@ -80,19 +90,19 @@ export default { return context.util.paginate(context.data.worker.archivedPrice.getByItemId(context, info, args.id), args); }, armorMaterials(obj, args, context, info) { - return context.data.worker.item.getArmorMaterials(context, info); + return context.data.worker.handbook.getArmorMaterials(context, info); }, fleaMarket(obj, args, context, info) { return context.data.worker.item.getFleaMarket(context, info); }, mastering(obj, args, context, info) { - return context.data.worker.item.getMasterings(context, info); + return context.data.worker.handbook.getMasterings(context, info); }, playerLevels(obj, args, context, info) { - return context.data.worker.item.getPlayerLevels(context, info); + return context.data.worker.handbook.getPlayerLevels(context, info); }, skills(obj, args, context, info) { - return context.data.worker.item.getSkills(context, info); + return context.data.worker.handbook.getSkills(context, info); }, }, Item: { @@ -113,25 +123,25 @@ export default { ]; }, bsgCategory(data, args, context, info) { - if (data.bsgCategoryId) return context.data.worker.item.getCategory(context, info, data.bsgCategoryId); + if (data.bsgCategoryId) return context.data.worker.handbook.getCategory(context, info, data.bsgCategoryId); return null; }, category(data, args, context, info) { - if (data.bsgCategoryId) return context.data.worker.item.getCategory(context, info, data.bsgCategoryId); + if (data.bsgCategoryId) return context.data.worker.handbook.getCategory(context, info, data.bsgCategoryId); return null; }, categoryTop(data, args, context, info) { - if (data.bsgCategoryId) return context.data.worker.item.getTopCategory(context, info, data.bsgCategoryId); + if (data.bsgCategoryId) return context.data.worker.handbook.getTopCategory(context, info, data.bsgCategoryId); return null; }, categories(data, args, context, info) { return data.categories.map(id => { - return context.data.worker.item.getCategory(context, info, id); + return context.data.worker.handbook.getCategory(context, info, id); }); }, handbookCategories(data, args, context, info) { return data.handbookCategories.map(id => { - return context.data.worker.item.getCategory(context, info, id); + return context.data.worker.handbook.getCategory(context, info, id); }); }, async conflictingItems(data, args, context, info) { @@ -232,7 +242,7 @@ export default { return context.data.worker.item.getLocale(data.zones, context, info); }, material(data, args, context, info) { - return context.data.worker.item.getArmorMaterial(context, info, data.armor_material_id); + return context.data.worker.handbook.getArmorMaterial(context, info, data.armor_material_id); }, }, ItemArmorSlotOpen: { @@ -259,25 +269,25 @@ export default { }, ItemCategory: { name(data, args, context, info) { - return context.data.worker.item.getLocale(data.name, context, info); + return context.data.worker.handbook.getLocale(data.name, context, info); }, parent(data, args, context, info) { - if (data.parent_id) return context.data.worker.item.getCategory(context, info, data.parent_id); + if (data.parent_id) return context.data.worker.handbook.getCategory(context, info, data.parent_id); return null; }, children(data, args, context, info) { - return data.child_ids.map(id => context.data.worker.item.getCategory(context, info, id)); + return data.child_ids.map(id => context.data.worker.handbook.getCategory(context, info, id)); } }, ItemFilters: { allowedCategories(data, args, context, info) { - return data.allowedCategories.map(id => context.data.worker.item.getCategory(context, info, id)); + return data.allowedCategories.map(id => context.data.worker.handbook.getCategory(context, info, id)); }, allowedItems(data, args, context, info) { return data.allowedItems.map(id => context.data.worker.item.getItem(context, info, id)); }, excludedCategories(data, args, context, info) { - return data.excludedCategories.map(id => context.data.worker.item.getCategory(context, info, id)); + return data.excludedCategories.map(id => context.data.worker.handbook.getCategory(context, info, id)); }, excludedItems(data, args, context, info) { return data.excludedItems.map(id => context.data.worker.item.getItem(context, info, id)); @@ -299,7 +309,7 @@ export default { return context.data.worker.item.getLocale(data.armorType, context, info); }, material(data, args, context, info) { - return context.data.worker.item.getArmorMaterial(context, info, data.armor_material_id); + return context.data.worker.handbook.getArmorMaterial(context, info, data.armor_material_id); }, zones(data, args, context, info) { return context.data.worker.item.getLocale(data.zones, context, info); @@ -307,7 +317,7 @@ export default { }, ItemPropertiesArmorAttachment: { material(data, args, context, info) { - return context.data.worker.item.getArmorMaterial(context, info, data.armor_material_id); + return context.data.worker.handbook.getArmorMaterial(context, info, data.armor_material_id); }, headZones(data, args, context, info) { return context.data.worker.item.getLocale(data.headZones, context, info); @@ -326,7 +336,7 @@ export default { return context.data.worker.item.getLocale(data.armorType, context, info); }, material(data, args, context, info) { - return context.data.worker.item.getArmorMaterial(context, info, data.armor_material_id); + return context.data.worker.handbook.getArmorMaterial(context, info, data.armor_material_id); }, zones(data, args, context, info) { return context.data.worker.item.getLocale(data.zones, context, info); @@ -337,7 +347,7 @@ export default { }, ItemPropertiesGlasses: { material(data, args, context, info) { - return context.data.worker.item.getArmorMaterial(context, info, data.armor_material_id); + return context.data.worker.handbook.getArmorMaterial(context, info, data.armor_material_id); }, }, ItemPropertiesHelmet: { @@ -345,7 +355,7 @@ export default { return context.data.worker.item.getLocale(data.armorType, context, info); }, material(data, args, context, info) { - return context.data.worker.item.getArmorMaterial(context, info, data.armor_material_id); + return context.data.worker.handbook.getArmorMaterial(context, info, data.armor_material_id); }, headZones(data, args, context, info) { return context.data.worker.item.getLocale(data.headZones, context, info); @@ -396,7 +406,7 @@ export default { }, ArmorMaterial: { name(data, args, context, info) { - return context.data.worker.item.getLocale(data.name, context, info); + return context.data.worker.handbook.getLocale(data.name, context, info); } }, FleaMarket: { @@ -419,7 +429,7 @@ export default { }, Skill: { name(data, args, context, info) { - return context.data.worker.item.getLocale(data.name, context, info); + return context.data.worker.handbook.getLocale(data.name, context, info); } }, StimEffect: { @@ -427,10 +437,10 @@ export default { return context.data.worker.item.getLocale(data.type, context, info); }, skill(data, args, context, info) { - return context.data.worker.item.getSkill(context, info, data.skillName); + return context.data.worker.handbook.getSkill(context, info, data.skillName); }, skillName(data, args, context, info) { - return context.data.worker.item.getLocale(data.skillName, context, info); + return context.data.worker.handbook.getLocale(data.skillName, context, info); } }, Vendor: { diff --git a/resolvers/taskResolver.mjs b/resolvers/taskResolver.mjs index 11428097..ca9bedee 100644 --- a/resolvers/taskResolver.mjs +++ b/resolvers/taskResolver.mjs @@ -61,7 +61,7 @@ export default { }, SkillLevel: { skill(data, args, context, info) { - return context.data.worker.item.getSkill(context, info, data.name); + return context.data.worker.handbook.getSkill(context, info, data.name); }, name(data, args, context, info) { return context.data.worker.task.getLocale(data.name, context, info); @@ -155,7 +155,7 @@ export default { }, containsCategory(data, args, context, info) { return data.containsCategory.map((cat) => { - return context.data.worker.item.getCategory(context, info, cat.id); + return context.data.worker.handbook.getCategory(context, info, cat.id); }); }, containsOne(data, args, context, info) { diff --git a/schema-static.mjs b/schema-static.mjs index ba3e4def..79495359 100644 --- a/schema-static.mjs +++ b/schema-static.mjs @@ -1383,6 +1383,7 @@ type Query { historicalItemPrices(id: ID!, days: Int, lang: LanguageCode, gameMode: GameMode, limit: Int, offset: Int): [historicalPricePoint]! item(id: ID, normalizedName: String, lang: LanguageCode, gameMode: GameMode): Item items(ids: [ID], name: String, names: [String], type: ItemType, types: [ItemType], categoryNames: [ItemCategoryName], handbookCategoryNames: [HandbookCategoryName] bsgCategoryId: String, bsgCategoryIds: [String], bsgCategory: String, lang: LanguageCode, gameMode: GameMode, limit: Int, offset: Int): [Item]! + itemPrices(id: ID!, limit: Int, offset: Int): [historicalPricePoint]! itemCategories(lang: LanguageCode, limit: Int, offset: Int): [ItemCategory]! goonReports(lang: LanguageCode, gameMode: GameMode, limit: Int, ofset: Int): [GoonReport]! handbookCategories(lang: LanguageCode, limit: Int, offset: Int): [ItemCategory]!