From e53fadb63feb07218f5cd43edef24b6bd51e4acb Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Wed, 25 Jan 2023 14:37:29 -0800 Subject: [PATCH] Expose last index time in graph --- .../api/graphql/resolvers/ClassicSkinResolver.ts | 8 ++++++++ .../skin-database/api/graphql/schema.graphql | 6 ++++++ packages/skin-database/data/SkinModel.ts | 4 ++++ packages/skin-database/data/skins.ts | 16 ++++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/packages/skin-database/api/graphql/resolvers/ClassicSkinResolver.ts b/packages/skin-database/api/graphql/resolvers/ClassicSkinResolver.ts index 37dab4be..1109c125 100644 --- a/packages/skin-database/api/graphql/resolvers/ClassicSkinResolver.ts +++ b/packages/skin-database/api/graphql/resolvers/ClassicSkinResolver.ts @@ -35,4 +35,12 @@ export default class ClassicSkinResolver const reviews = await this._model.getReviews(); return reviews.map((row) => new ReviewResolver(row)); } + async last_algolia_index_update_date() { + const updates = await this._model.getAlgoliaIndexUpdates(1); + if (updates.length < 1) { + return null; + } + const update = updates[0]; + return new Date(update.update_timestamp * 1000).toISOString(); + } } diff --git a/packages/skin-database/api/graphql/schema.graphql b/packages/skin-database/api/graphql/schema.graphql index f97665f4..b8f47ab7 100644 --- a/packages/skin-database/api/graphql/schema.graphql +++ b/packages/skin-database/api/graphql/schema.graphql @@ -221,6 +221,12 @@ type ClassicSkin implements Skin & Node { reivew page, or via the Discord bot. """ reviews: [Review] + + """ + The date on which this skin was last updated in the Algolia search index. + Given in simplified extended ISO format (ISO 8601). + """ + last_algolia_index_update_date: String } """ diff --git a/packages/skin-database/data/SkinModel.ts b/packages/skin-database/data/SkinModel.ts index 7c5c2dee..ef3824f3 100644 --- a/packages/skin-database/data/SkinModel.ts +++ b/packages/skin-database/data/SkinModel.ts @@ -370,6 +370,10 @@ export default class SkinModel { ); } + async getAlgoliaIndexUpdates(limit?: number): Promise { + return Skins.searchIndexUpdatesForSkin(this.getMd5(), limit); + } + async withScreenshotTempFile( cb: (file: string) => Promise ): Promise { diff --git a/packages/skin-database/data/skins.ts b/packages/skin-database/data/skins.ts index d2346e6e..61438daf 100644 --- a/packages/skin-database/data/skins.ts +++ b/packages/skin-database/data/skins.ts @@ -342,6 +342,22 @@ export async function getSkinsToShoot(limit: number): Promise { return results.map((row) => row.md5); } +export async function searchIndexUpdatesForSkin( + md5: string, + limit?: number +): Promise< + Array<{ skin_md5: string; update_timestamp: number; field: string }> +> { + let query = knex("algolia_field_updates") + .where({ skin_md5: md5 }) + .orderBy("update_timestamp", "desc"); + + if (limit != null) { + query = query.limit(limit); + } + return query.select(); +} + export async function recordSearchIndexUpdates( md5: string, fields: string[]