From 2ac7fa4fd6d8e35462e2ba36c53e00f37ee33bf7 Mon Sep 17 00:00:00 2001 From: Raman Shekhawat Date: Fri, 4 Oct 2024 16:01:43 +0530 Subject: [PATCH] delete token traits via worker --- src/job-handlers/delete-traits.ts | 29 +++++++++++++++++++ src/job-handlers/worker.ts | 2 ++ src/jobs/delete-traits.ts | 20 +++++++++++++ .../resolvers/delete_token_traits.ts | 17 ++--------- 4 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 src/job-handlers/delete-traits.ts create mode 100644 src/jobs/delete-traits.ts diff --git a/src/job-handlers/delete-traits.ts b/src/job-handlers/delete-traits.ts new file mode 100644 index 000000000..4a2f884a0 --- /dev/null +++ b/src/job-handlers/delete-traits.ts @@ -0,0 +1,29 @@ +import Queue from 'bull' +import connection from '../connection' +import { JobData } from '../jobs/delete-traits' + +export default async (job: Queue.Job, done: Queue.DoneCallback) => { + if (!connection.isInitialized) { + await connection.initialize().catch((err) => { + throw err + }) + } + + const em = connection.manager + + await em.query( + ` + DELETE FROM trait_token WHERE token_id = $1 + `, + [job.data.id] + ) + + await em.query( + ` + DELETE FROM token_rarity WHERE token_id = $1 + `, + [job.data.id] + ) + + done() +} diff --git a/src/job-handlers/worker.ts b/src/job-handlers/worker.ts index 7f8cabab4..2780978e1 100644 --- a/src/job-handlers/worker.ts +++ b/src/job-handlers/worker.ts @@ -12,6 +12,7 @@ import { traitsQueue } from '../jobs/compute-traits' import { fetchCollectionExtraQueue } from '../jobs/fetch-collection-extra' import { invalidateExpiredListings } from '../jobs/invalidate-expired-listings' import { rarityQueue } from '../jobs/rarity-ranker' +import { deleteTraitsQueue } from '../jobs/delete-traits' async function main() { if (!connection.isInitialized) { @@ -35,6 +36,7 @@ async function main() { fetchBalanceQueue.process(5, `${__dirname}/fetch-balance.js`) fetchCollectionExtraQueue.process(5, `${__dirname}/fetch-collection-extra.js`) invalidateExpiredListings.process(1, `${__dirname}/invalidate-expired-listings.js`) + deleteTraitsQueue.process(1, `${__dirname}/delete-traits.js`) traitsQueue.on('global:failed', (job, err) => { throwError(`traitsQueue:Job ${job.id} failed with error: ${err.message}`, 'warning') diff --git a/src/jobs/delete-traits.ts b/src/jobs/delete-traits.ts new file mode 100644 index 000000000..0400febdc --- /dev/null +++ b/src/jobs/delete-traits.ts @@ -0,0 +1,20 @@ +import Queue from 'bull' +import { redisConfig } from './common' + +export type JobData = { id: string } + +export const deleteTraitsQueue = new Queue('deleteTraits', { + defaultJobOptions: { removeOnComplete: true }, + redis: redisConfig, + settings: { + maxStalledCount: 1, + }, +}) + +export const deleteTokenTraits = async (id: string) => { + deleteTraitsQueue.add({ id }).catch(() => { + // eslint-disable-next-line no-console + console.log('Closing connection as Redis is not available') + deleteTraitsQueue.close(true) + }) +} diff --git a/src/server-extension/resolvers/delete_token_traits.ts b/src/server-extension/resolvers/delete_token_traits.ts index d90bffa16..bb2f171ab 100644 --- a/src/server-extension/resolvers/delete_token_traits.ts +++ b/src/server-extension/resolvers/delete_token_traits.ts @@ -2,6 +2,7 @@ import { Query, Resolver, Arg } from 'type-graphql' import 'reflect-metadata' import { EntityManager } from 'typeorm' +import { deleteTokenTraits } from '../../jobs/delete-traits' @Resolver() export class DeleteTokenTraitsResolver { @@ -14,21 +15,7 @@ export class DeleteTokenTraitsResolver { }) tokenId: string ): Promise { - const manager = await this.tx() - - await manager.query( - ` - DELETE FROM trait_token WHERE token_id = $1 - `, - [tokenId] - ) - - await manager.query( - ` - DELETE FROM token_rarity WHERE token_id = $1 - `, - [tokenId] - ) + await deleteTokenTraits(tokenId) return true }