From faf7eff43ee0d3f42137d1e932cb2229c21c5266 Mon Sep 17 00:00:00 2001 From: "l1.media" Date: Wed, 22 Oct 2025 15:18:47 +0200 Subject: [PATCH 1/6] Flush Benefit removals immediately --- src/mappings/token/utils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mappings/token/utils.ts b/src/mappings/token/utils.ts index 32c5f8a9c..2e9fb9acd 100644 --- a/src/mappings/token/utils.ts +++ b/src/mappings/token/utils.ts @@ -244,12 +244,13 @@ export async function processTokenMetadata( token.description = metadata.description } - // remove all current bnefits + // remove all current benefits const existingBenefit = await overlay .getRepository(Benefit) .getManyByRelation('tokenId', token.id) if (existingBenefit !== undefined) { overlay.getRepository(Benefit).remove(...existingBenefit) + await overlay.updateDatabase() } if (isSet(metadata.benefits)) { From 96613928b47f84d8cb5b0977a2b892aae2e94699 Mon Sep 17 00:00:00 2001 From: "l1.media" Date: Fri, 31 Oct 2025 15:01:01 +0100 Subject: [PATCH 2/6] Update db after every removal --- src/mappings/content/commentsAndReactions.ts | 2 ++ src/mappings/content/metadata.ts | 3 +++ src/mappings/content/utils.ts | 2 ++ src/mappings/storage/index.ts | 10 ++++++++++ src/mappings/storage/utils.ts | 3 +++ src/mappings/token/utils.ts | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/src/mappings/content/commentsAndReactions.ts b/src/mappings/content/commentsAndReactions.ts index d59ebf696..d9d075aa0 100644 --- a/src/mappings/content/commentsAndReactions.ts +++ b/src/mappings/content/commentsAndReactions.ts @@ -218,6 +218,7 @@ async function processVideoReaction( --previousReactionTypeCounter.count // remove reaction videoReactionRepository.remove(existingReaction) + await overlay.updateDatabase() return } // otherwise... @@ -370,6 +371,7 @@ export async function processReactCommentMessage( --comment.reactionsCount // remove reaction commentReactionRepository.remove(existingReaction) + await overlay.updateDatabase() } else { // new reaction const id = commentReactionEntityId({ memberId, commentId, reactionId }) diff --git a/src/mappings/content/metadata.ts b/src/mappings/content/metadata.ts index 67be7fa95..6ceca876f 100644 --- a/src/mappings/content/metadata.ts +++ b/src/mappings/content/metadata.ts @@ -261,6 +261,7 @@ async function processVideoLicense( // license is meant to be unset/removed if (video.licenseId) { licenseRepository.remove(video.licenseId) + await overlay.updateDatabase() } video.licenseId = null } @@ -278,6 +279,7 @@ async function processVideoSubtitles( const currentSubtitles = await subtitlesRepository.getManyByRelation('videoId', video.id) dataObjectRepository.remove(...currentSubtitles.flatMap((s) => (s.assetId ? [s.assetId] : []))) subtitlesRepository.remove(...currentSubtitles) + await overlay.updateDatabase() for (const subtitleMeta of subtitlesMeta) { const subtitleId = `${video.id}-${subtitleMeta.type}-${subtitleMeta.language}` const subtitle = subtitlesRepository.new({ @@ -524,6 +526,7 @@ export async function processBanOrUnbanMemberFromChannelMessage( // unban member from channel if (option === BanOrUnbanMemberFromChannel.Option.UNBAN) { overlay.getRepository(BannedMember).remove(`${channel.id}-${member.id}`) + await overlay.updateDatabase() } // event processing diff --git a/src/mappings/content/utils.ts b/src/mappings/content/utils.ts index 122831238..43047b74e 100644 --- a/src/mappings/content/utils.ts +++ b/src/mappings/content/utils.ts @@ -169,6 +169,7 @@ export async function deleteChannel(overlay: EntityManagerOverlay, channelId: bi overlay.getRepository(BannedMember).remove(...bannedMembers) overlay.getRepository(Channel).remove(channelId.toString()) + await overlay.updateDatabase() // delete channel related notifications } @@ -204,6 +205,7 @@ export async function deleteVideo(overlay: EntityManagerOverlay, videoId: bigint } subtitlesRepository.remove(...subtitles) videoRepository.remove(video) + await overlay.updateDatabase() } export async function processNft( diff --git a/src/mappings/storage/index.ts b/src/mappings/storage/index.ts index 8c22655af..2697cfff8 100644 --- a/src/mappings/storage/index.ts +++ b/src/mappings/storage/index.ts @@ -144,6 +144,7 @@ export async function processStorageBucketOperatorRemovedEvent({ .getByIdOrFail(bucketId.toString()) storageBucket.operatorStatus = new StorageBucketOperatorStatusMissing() overlay.getRepository(StorageBucketOperatorMetadataEntity).remove(storageBucket.id) + await overlay.updateDatabase() } export async function processStorageBucketsUpdatedForBagEvent({ @@ -156,6 +157,7 @@ export async function processStorageBucketsUpdatedForBagEvent({ overlay .getRepository(StorageBucketBag) .remove(...removedBuckets.map((bucketId) => storageBucketBagData(bucketId, bagId))) + await overlay.updateDatabase() addedBuckets.forEach((bucketId) => overlay.getRepository(StorageBucketBag).new(storageBucketBagData(bucketId, bagId)) ) @@ -193,6 +195,7 @@ export async function processStorageBucketDeletedEvent({ // There should be already no bags assigned - enforced by the runtime overlay.getRepository(StorageBucketOperatorMetadataEntity).remove(bucketId.toString()) overlay.getRepository(StorageBucket).remove(bucketId.toString()) + await overlay.updateDatabase() } // DYNAMIC BAG EVENTS @@ -253,6 +256,7 @@ export async function processDynamicBagDeletedEvent({ overlay.getRepository(DistributionBucketBag).remove(...bagDistributionBucketRelations) await deleteDataObjects(overlay, objects) overlay.getRepository(StorageBag).remove(dynBagId) + await overlay.updateDatabase() } // // DATA OBJECT EVENTS @@ -298,6 +302,7 @@ export async function processDataObjectsUpdatedEvent({ uploadedObjectIds ) await deleteDataObjectsByIds(overlay, objectsToRemoveIds) + await overlay.updateDatabase() } export async function processPendingDataObjectsAcceptedEvent({ @@ -366,6 +371,7 @@ export async function processDistributionBucketFamilyDeletedEvent({ }: EventHandlerContext<'Storage.DistributionBucketFamilyDeleted'>): Promise { overlay.getRepository(DistributionBucketFamilyMetadataEntity).remove(familyId.toString()) overlay.getRepository(DistributionBucketFamily).remove(familyId.toString()) + await overlay.updateDatabase() } // DISTRIBUTION BUCKET EVENTS @@ -403,6 +409,7 @@ export async function processDistributionBucketDeletedEvent({ }: EventHandlerContext<'Storage.DistributionBucketDeleted'>): Promise { // Operators and bags need to be empty (enforced by runtime) overlay.getRepository(DistributionBucket).remove(distributionBucketId(bucketId)) + await overlay.updateDatabase() } export async function processDistributionBucketsUpdatedForBagEvent({ @@ -423,6 +430,7 @@ export async function processDistributionBucketsUpdatedForBagEvent({ ) ) ) + await overlay.updateDatabase() addedBucketsIndices.forEach((index) => overlay.getRepository(DistributionBucketBag).new( distributionBucketBagData( @@ -473,6 +481,7 @@ export async function processDistributionBucketInvitationCancelledEvent({ overlay .getRepository(DistributionBucketOperator) .remove(distributionOperatorId(bucketId, workerId)) + await overlay.updateDatabase() } export async function processDistributionBucketInvitationAcceptedEvent({ @@ -510,4 +519,5 @@ export async function processDistributionBucketOperatorRemovedEvent({ }, }: EventHandlerContext<'Storage.DistributionBucketOperatorRemoved'>): Promise { await removeDistributionBucketOperator(overlay, distributionOperatorId(bucketId, workerId)) + await overlay.updateDatabase() } diff --git a/src/mappings/storage/utils.ts b/src/mappings/storage/utils.ts index 67c56c59c..8669ba0fa 100644 --- a/src/mappings/storage/utils.ts +++ b/src/mappings/storage/utils.ts @@ -174,6 +174,7 @@ export async function removeDistributionBucketOperator( ) { overlay.getRepository(DistributionBucketOperator).remove(operatorId) overlay.getRepository(DistributionBucketOperatorMetadata).remove(operatorId) + //await overlay.updateDatabase() } export async function getOrCreateBag( @@ -201,6 +202,7 @@ export async function deleteDataObjects( ) { overlay.getRepository(StorageDataObject).remove(...objects) await Promise.all(objects.map((o) => unsetAssetRelations(overlay, o))) + //await overlay.updateDatabase() } export async function deleteDataObjectsByIds(overlay: EntityManagerOverlay, ids: bigint[]) { @@ -209,4 +211,5 @@ export async function deleteDataObjectsByIds(overlay: EntityManagerOverlay, ids: ids.map((id) => dataObjectRepository.getByIdOrFail(id.toString())) ) await deleteDataObjects(overlay, objects) + //await overlay.updateDatabase() } diff --git a/src/mappings/token/utils.ts b/src/mappings/token/utils.ts index 2e9fb9acd..36dcb80e3 100644 --- a/src/mappings/token/utils.ts +++ b/src/mappings/token/utils.ts @@ -36,6 +36,7 @@ export async function removeVesting(overlay: EntityManagerOverlay, vestedAccount const vestedAccountRepository = overlay.getRepository(VestedAccount) const vestedAccountToRemove = await vestedAccountRepository.getByIdOrFail(vestedAccountId) vestedAccountRepository.remove(vestedAccountToRemove) + await overlay.updateDatabase() } export class VestingScheduleData { @@ -89,6 +90,7 @@ export async function burnFromVesting( } if (vesting.totalVestingAmount <= tallyBurnedAmount) { await removeVesting(overlay, vesting.id) + await overlay.updateDatabase() tallyBurnedAmount -= vesting.totalVestingAmount } else { vesting.totalVestingAmount -= tallyBurnedAmount @@ -303,6 +305,7 @@ export async function processTokenMetadata( } if (oldTrailer) { trailerVideoRepository.remove(oldTrailer) + await overlay.updateDatabase() } const id = overlay.getRepository(TrailerVideo).getNewEntityId() @@ -317,6 +320,7 @@ export async function processTokenMetadata( const oldTrailer = await trailerVideoRepository.getOneByRelation('tokenId', token.id) if (oldTrailer) { trailerVideoRepository.remove(oldTrailer) + await overlay.updateDatabase() } } } From 599c168d0bb88e0d4ccda69f60868d86aedca2fa Mon Sep 17 00:00:00 2001 From: "l1.media" Date: Sat, 1 Nov 2025 16:42:30 +0100 Subject: [PATCH 3/6] -storage --- src/mappings/storage/index.ts | 10 ---------- src/mappings/storage/utils.ts | 3 --- 2 files changed, 13 deletions(-) diff --git a/src/mappings/storage/index.ts b/src/mappings/storage/index.ts index 2697cfff8..8c22655af 100644 --- a/src/mappings/storage/index.ts +++ b/src/mappings/storage/index.ts @@ -144,7 +144,6 @@ export async function processStorageBucketOperatorRemovedEvent({ .getByIdOrFail(bucketId.toString()) storageBucket.operatorStatus = new StorageBucketOperatorStatusMissing() overlay.getRepository(StorageBucketOperatorMetadataEntity).remove(storageBucket.id) - await overlay.updateDatabase() } export async function processStorageBucketsUpdatedForBagEvent({ @@ -157,7 +156,6 @@ export async function processStorageBucketsUpdatedForBagEvent({ overlay .getRepository(StorageBucketBag) .remove(...removedBuckets.map((bucketId) => storageBucketBagData(bucketId, bagId))) - await overlay.updateDatabase() addedBuckets.forEach((bucketId) => overlay.getRepository(StorageBucketBag).new(storageBucketBagData(bucketId, bagId)) ) @@ -195,7 +193,6 @@ export async function processStorageBucketDeletedEvent({ // There should be already no bags assigned - enforced by the runtime overlay.getRepository(StorageBucketOperatorMetadataEntity).remove(bucketId.toString()) overlay.getRepository(StorageBucket).remove(bucketId.toString()) - await overlay.updateDatabase() } // DYNAMIC BAG EVENTS @@ -256,7 +253,6 @@ export async function processDynamicBagDeletedEvent({ overlay.getRepository(DistributionBucketBag).remove(...bagDistributionBucketRelations) await deleteDataObjects(overlay, objects) overlay.getRepository(StorageBag).remove(dynBagId) - await overlay.updateDatabase() } // // DATA OBJECT EVENTS @@ -302,7 +298,6 @@ export async function processDataObjectsUpdatedEvent({ uploadedObjectIds ) await deleteDataObjectsByIds(overlay, objectsToRemoveIds) - await overlay.updateDatabase() } export async function processPendingDataObjectsAcceptedEvent({ @@ -371,7 +366,6 @@ export async function processDistributionBucketFamilyDeletedEvent({ }: EventHandlerContext<'Storage.DistributionBucketFamilyDeleted'>): Promise { overlay.getRepository(DistributionBucketFamilyMetadataEntity).remove(familyId.toString()) overlay.getRepository(DistributionBucketFamily).remove(familyId.toString()) - await overlay.updateDatabase() } // DISTRIBUTION BUCKET EVENTS @@ -409,7 +403,6 @@ export async function processDistributionBucketDeletedEvent({ }: EventHandlerContext<'Storage.DistributionBucketDeleted'>): Promise { // Operators and bags need to be empty (enforced by runtime) overlay.getRepository(DistributionBucket).remove(distributionBucketId(bucketId)) - await overlay.updateDatabase() } export async function processDistributionBucketsUpdatedForBagEvent({ @@ -430,7 +423,6 @@ export async function processDistributionBucketsUpdatedForBagEvent({ ) ) ) - await overlay.updateDatabase() addedBucketsIndices.forEach((index) => overlay.getRepository(DistributionBucketBag).new( distributionBucketBagData( @@ -481,7 +473,6 @@ export async function processDistributionBucketInvitationCancelledEvent({ overlay .getRepository(DistributionBucketOperator) .remove(distributionOperatorId(bucketId, workerId)) - await overlay.updateDatabase() } export async function processDistributionBucketInvitationAcceptedEvent({ @@ -519,5 +510,4 @@ export async function processDistributionBucketOperatorRemovedEvent({ }, }: EventHandlerContext<'Storage.DistributionBucketOperatorRemoved'>): Promise { await removeDistributionBucketOperator(overlay, distributionOperatorId(bucketId, workerId)) - await overlay.updateDatabase() } diff --git a/src/mappings/storage/utils.ts b/src/mappings/storage/utils.ts index 8669ba0fa..67c56c59c 100644 --- a/src/mappings/storage/utils.ts +++ b/src/mappings/storage/utils.ts @@ -174,7 +174,6 @@ export async function removeDistributionBucketOperator( ) { overlay.getRepository(DistributionBucketOperator).remove(operatorId) overlay.getRepository(DistributionBucketOperatorMetadata).remove(operatorId) - //await overlay.updateDatabase() } export async function getOrCreateBag( @@ -202,7 +201,6 @@ export async function deleteDataObjects( ) { overlay.getRepository(StorageDataObject).remove(...objects) await Promise.all(objects.map((o) => unsetAssetRelations(overlay, o))) - //await overlay.updateDatabase() } export async function deleteDataObjectsByIds(overlay: EntityManagerOverlay, ids: bigint[]) { @@ -211,5 +209,4 @@ export async function deleteDataObjectsByIds(overlay: EntityManagerOverlay, ids: ids.map((id) => dataObjectRepository.getByIdOrFail(id.toString())) ) await deleteDataObjects(overlay, objects) - //await overlay.updateDatabase() } From 0b71c8711b52df7301bb1a6e58557380f018cedc Mon Sep 17 00:00:00 2001 From: "l1.media" Date: Sat, 1 Nov 2025 16:52:29 +0100 Subject: [PATCH 4/6] -vesting --- src/mappings/token/utils.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mappings/token/utils.ts b/src/mappings/token/utils.ts index 36dcb80e3..f528b2925 100644 --- a/src/mappings/token/utils.ts +++ b/src/mappings/token/utils.ts @@ -36,7 +36,6 @@ export async function removeVesting(overlay: EntityManagerOverlay, vestedAccount const vestedAccountRepository = overlay.getRepository(VestedAccount) const vestedAccountToRemove = await vestedAccountRepository.getByIdOrFail(vestedAccountId) vestedAccountRepository.remove(vestedAccountToRemove) - await overlay.updateDatabase() } export class VestingScheduleData { @@ -90,7 +89,6 @@ export async function burnFromVesting( } if (vesting.totalVestingAmount <= tallyBurnedAmount) { await removeVesting(overlay, vesting.id) - await overlay.updateDatabase() tallyBurnedAmount -= vesting.totalVestingAmount } else { vesting.totalVestingAmount -= tallyBurnedAmount From 2ad927c93d1856a710ebdf0ee6aee088ef60fd59 Mon Sep 17 00:00:00 2001 From: "l1.media" Date: Sat, 1 Nov 2025 16:52:48 +0100 Subject: [PATCH 5/6] -metadata --- src/mappings/content/metadata.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/mappings/content/metadata.ts b/src/mappings/content/metadata.ts index 6ceca876f..67be7fa95 100644 --- a/src/mappings/content/metadata.ts +++ b/src/mappings/content/metadata.ts @@ -261,7 +261,6 @@ async function processVideoLicense( // license is meant to be unset/removed if (video.licenseId) { licenseRepository.remove(video.licenseId) - await overlay.updateDatabase() } video.licenseId = null } @@ -279,7 +278,6 @@ async function processVideoSubtitles( const currentSubtitles = await subtitlesRepository.getManyByRelation('videoId', video.id) dataObjectRepository.remove(...currentSubtitles.flatMap((s) => (s.assetId ? [s.assetId] : []))) subtitlesRepository.remove(...currentSubtitles) - await overlay.updateDatabase() for (const subtitleMeta of subtitlesMeta) { const subtitleId = `${video.id}-${subtitleMeta.type}-${subtitleMeta.language}` const subtitle = subtitlesRepository.new({ @@ -526,7 +524,6 @@ export async function processBanOrUnbanMemberFromChannelMessage( // unban member from channel if (option === BanOrUnbanMemberFromChannel.Option.UNBAN) { overlay.getRepository(BannedMember).remove(`${channel.id}-${member.id}`) - await overlay.updateDatabase() } // event processing From e105bdccbe3180c4e204ef409eb21cd7347a8703 Mon Sep 17 00:00:00 2001 From: "l1.media" Date: Sat, 1 Nov 2025 17:03:11 +0100 Subject: [PATCH 6/6] lint --- src/mappings/token/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mappings/token/utils.ts b/src/mappings/token/utils.ts index f528b2925..f53be3533 100644 --- a/src/mappings/token/utils.ts +++ b/src/mappings/token/utils.ts @@ -303,7 +303,7 @@ export async function processTokenMetadata( } if (oldTrailer) { trailerVideoRepository.remove(oldTrailer) - await overlay.updateDatabase() + await overlay.updateDatabase() } const id = overlay.getRepository(TrailerVideo).getNewEntityId()