Browse Source

fix: cleanup revision requests

Karol Sójko 1 year ago
parent
commit
7e8d7f6874

+ 0 - 71
packages/auth/bin/revisions_cleanup.ts

@@ -1,71 +0,0 @@
-import 'reflect-metadata'
-
-import { Logger } from 'winston'
-
-import { ContainerConfigLoader } from '../src/Bootstrap/Container'
-import TYPES from '../src/Bootstrap/Types'
-import { Env } from '../src/Bootstrap/Env'
-import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
-import { DomainEventFactoryInterface } from '../src/Domain/Event/DomainEventFactoryInterface'
-import { UserSubscriptionRepositoryInterface } from '../src/Domain/Subscription/UserSubscriptionRepositoryInterface'
-import { SubscriptionPlanName } from '@standardnotes/domain-core'
-
-const requestCleanup = async (
-  userSubscriptionRepository: UserSubscriptionRepositoryInterface,
-  domainEventFactory: DomainEventFactoryInterface,
-  domainEventPublisher: DomainEventPublisherInterface,
-): Promise<void> => {
-  const proSubscriptionPlan = SubscriptionPlanName.create(SubscriptionPlanName.NAMES.ProPlan).getValue()
-  const plusSubscriptionPlan = SubscriptionPlanName.create(SubscriptionPlanName.NAMES.PlusPlan).getValue()
-
-  const totalSubscriptions = await userSubscriptionRepository.countByPlanName([
-    proSubscriptionPlan,
-    plusSubscriptionPlan,
-  ])
-
-  const limitPerPage = 100
-  const numberOfPages = Math.ceil(totalSubscriptions / limitPerPage)
-  for (let i = 0; i < numberOfPages; i++) {
-    const subscriptions = await userSubscriptionRepository.findByPlanName(
-      [proSubscriptionPlan, plusSubscriptionPlan],
-      i * limitPerPage,
-      limitPerPage,
-    )
-
-    for (const subscription of subscriptions) {
-      await domainEventPublisher.publish(
-        domainEventFactory.createRevisionsCleanupRequestedEvent({
-          userUuid: subscription.userUuid,
-        }),
-      )
-    }
-  }
-}
-
-const container = new ContainerConfigLoader('worker')
-void container.load().then((container) => {
-  const env: Env = new Env()
-  env.load()
-
-  const logger: Logger = container.get(TYPES.Auth_Logger)
-
-  logger.info('Starting revisions cleanup triggering...')
-
-  const domainEventFactory = container.get<DomainEventFactoryInterface>(TYPES.Auth_DomainEventFactory)
-  const domainEventPublisher = container.get<DomainEventPublisherInterface>(TYPES.Auth_DomainEventPublisher)
-  const userSubscriptionRepository = container.get<UserSubscriptionRepositoryInterface>(
-    TYPES.Auth_UserSubscriptionRepository,
-  )
-
-  Promise.resolve(requestCleanup(userSubscriptionRepository, domainEventFactory, domainEventPublisher))
-    .then(() => {
-      logger.info('Finished revisions cleanup triggering')
-
-      process.exit(0)
-    })
-    .catch((error) => {
-      logger.error(`Failed to trigger revisions cleanup: ${(error as Error).message}`)
-
-      process.exit(1)
-    })
-})

+ 0 - 11
packages/auth/docker/entrypoint-revisions-cleanup.js

@@ -1,11 +0,0 @@
-'use strict'
-
-const path = require('path')
-
-const pnp = require(path.normalize(path.resolve(__dirname, '../../..', '.pnp.cjs'))).setup()
-
-const index = require(path.normalize(path.resolve(__dirname, '../dist/bin/revisions_cleanup.js')))
-
-Object.defineProperty(exports, '__esModule', { value: true })
-
-exports.default = index

+ 0 - 4
packages/auth/docker/entrypoint.sh

@@ -44,10 +44,6 @@ case "$COMMAND" in
     exec node docker/entrypoint-delete-accounts.js $FILE_NAME $MODE
     exec node docker/entrypoint-delete-accounts.js $FILE_NAME $MODE
     ;;
     ;;
 
 
-  'revisions-cleanup' )
-    exec node docker/entrypoint-revisions-cleanup.js
-    ;;
-
    * )
    * )
     echo "[Docker] Unknown command"
     echo "[Docker] Unknown command"
     ;;
     ;;

+ 0 - 17
packages/auth/src/Domain/Event/DomainEventFactory.ts

@@ -22,7 +22,6 @@ import {
   SessionRefreshedEvent,
   SessionRefreshedEvent,
   AccountDeletionVerificationRequestedEvent,
   AccountDeletionVerificationRequestedEvent,
   FileQuotaRecalculationRequestedEvent,
   FileQuotaRecalculationRequestedEvent,
-  RevisionsCleanupRequestedEvent,
 } from '@standardnotes/domain-events'
 } from '@standardnotes/domain-events'
 import { Predicate, PredicateVerificationResult } from '@standardnotes/predicates'
 import { Predicate, PredicateVerificationResult } from '@standardnotes/predicates'
 import { TimerInterface } from '@standardnotes/time'
 import { TimerInterface } from '@standardnotes/time'
@@ -35,22 +34,6 @@ import { KeyParamsData } from '@standardnotes/responses'
 @injectable()
 @injectable()
 export class DomainEventFactory implements DomainEventFactoryInterface {
 export class DomainEventFactory implements DomainEventFactoryInterface {
   constructor(@inject(TYPES.Auth_Timer) private timer: TimerInterface) {}
   constructor(@inject(TYPES.Auth_Timer) private timer: TimerInterface) {}
-
-  createRevisionsCleanupRequestedEvent(dto: { userUuid: string }): RevisionsCleanupRequestedEvent {
-    return {
-      type: 'REVISIONS_CLEANUP_REQUESTED',
-      createdAt: this.timer.getUTCDate(),
-      meta: {
-        correlation: {
-          userIdentifier: dto.userUuid,
-          userIdentifierType: 'uuid',
-        },
-        origin: DomainEventService.Auth,
-      },
-      payload: dto,
-    }
-  }
-
   createFileQuotaRecalculationRequestedEvent(dto: { userUuid: string }): FileQuotaRecalculationRequestedEvent {
   createFileQuotaRecalculationRequestedEvent(dto: { userUuid: string }): FileQuotaRecalculationRequestedEvent {
     return {
     return {
       type: 'FILE_QUOTA_RECALCULATION_REQUESTED',
       type: 'FILE_QUOTA_RECALCULATION_REQUESTED',

+ 0 - 2
packages/auth/src/Domain/Event/DomainEventFactoryInterface.ts

@@ -20,13 +20,11 @@ import {
   SessionRefreshedEvent,
   SessionRefreshedEvent,
   AccountDeletionVerificationRequestedEvent,
   AccountDeletionVerificationRequestedEvent,
   FileQuotaRecalculationRequestedEvent,
   FileQuotaRecalculationRequestedEvent,
-  RevisionsCleanupRequestedEvent,
 } from '@standardnotes/domain-events'
 } from '@standardnotes/domain-events'
 import { InviteeIdentifierType } from '../SharedSubscription/InviteeIdentifierType'
 import { InviteeIdentifierType } from '../SharedSubscription/InviteeIdentifierType'
 import { KeyParamsData } from '@standardnotes/responses'
 import { KeyParamsData } from '@standardnotes/responses'
 
 
 export interface DomainEventFactoryInterface {
 export interface DomainEventFactoryInterface {
-  createRevisionsCleanupRequestedEvent(dto: { userUuid: string }): RevisionsCleanupRequestedEvent
   createFileQuotaRecalculationRequestedEvent(dto: { userUuid: string }): FileQuotaRecalculationRequestedEvent
   createFileQuotaRecalculationRequestedEvent(dto: { userUuid: string }): FileQuotaRecalculationRequestedEvent
   createWebSocketMessageRequestedEvent(dto: { userUuid: string; message: JSONString }): WebSocketMessageRequestedEvent
   createWebSocketMessageRequestedEvent(dto: { userUuid: string; message: JSONString }): WebSocketMessageRequestedEvent
   createEmailRequestedEvent(dto: {
   createEmailRequestedEvent(dto: {

+ 0 - 7
packages/domain-events/src/Domain/Event/RevisionsCleanupRequestedEvent.ts

@@ -1,7 +0,0 @@
-import { DomainEventInterface } from './DomainEventInterface'
-import { RevisionsCleanupRequestedEventPayload } from './RevisionsCleanupRequestedEventPayload'
-
-export interface RevisionsCleanupRequestedEvent extends DomainEventInterface {
-  type: 'REVISIONS_CLEANUP_REQUESTED'
-  payload: RevisionsCleanupRequestedEventPayload
-}

+ 0 - 3
packages/domain-events/src/Domain/Event/RevisionsCleanupRequestedEventPayload.ts

@@ -1,3 +0,0 @@
-export interface RevisionsCleanupRequestedEventPayload {
-  userUuid: string
-}

+ 0 - 2
packages/domain-events/src/Domain/index.ts

@@ -72,8 +72,6 @@ export * from './Event/PredicateVerifiedEvent'
 export * from './Event/PredicateVerifiedEventPayload'
 export * from './Event/PredicateVerifiedEventPayload'
 export * from './Event/RefundProcessedEvent'
 export * from './Event/RefundProcessedEvent'
 export * from './Event/RefundProcessedEventPayload'
 export * from './Event/RefundProcessedEventPayload'
-export * from './Event/RevisionsCleanupRequestedEvent'
-export * from './Event/RevisionsCleanupRequestedEventPayload'
 export * from './Event/RevisionsCopyRequestedEvent'
 export * from './Event/RevisionsCopyRequestedEvent'
 export * from './Event/RevisionsCopyRequestedEventPayload'
 export * from './Event/RevisionsCopyRequestedEventPayload'
 export * from './Event/SessionCreatedEvent'
 export * from './Event/SessionCreatedEvent'

+ 0 - 12
packages/syncing-server/src/Bootstrap/Container.ts

@@ -162,7 +162,6 @@ import { SyncResponse } from '@standardnotes/grpc'
 import { SyncResponseGRPCMapper } from '../Mapping/gRPC/SyncResponseGRPCMapper'
 import { SyncResponseGRPCMapper } from '../Mapping/gRPC/SyncResponseGRPCMapper'
 import { AccountDeletionVerificationRequestedEventHandler } from '../Domain/Handler/AccountDeletionVerificationRequestedEventHandler'
 import { AccountDeletionVerificationRequestedEventHandler } from '../Domain/Handler/AccountDeletionVerificationRequestedEventHandler'
 import { SendEventToClients } from '../Domain/UseCase/Syncing/SendEventToClients/SendEventToClients'
 import { SendEventToClients } from '../Domain/UseCase/Syncing/SendEventToClients/SendEventToClients'
-import { RevisionsCleanupRequestedEventHandler } from '../Domain/Handler/RevisionsCleanupRequestedEventHandler'
 
 
 export class ContainerConfigLoader {
 export class ContainerConfigLoader {
   private readonly DEFAULT_CONTENT_SIZE_TRANSFER_LIMIT = 10_000_000
   private readonly DEFAULT_CONTENT_SIZE_TRANSFER_LIMIT = 10_000_000
@@ -981,16 +980,6 @@ export class ContainerConfigLoader {
           container.get<Logger>(TYPES.Sync_Logger),
           container.get<Logger>(TYPES.Sync_Logger),
         ),
         ),
       )
       )
-    container
-      .bind<RevisionsCleanupRequestedEventHandler>(TYPES.Sync_RevisionsCleanupRequestedEventHandler)
-      .toConstantValue(
-        new RevisionsCleanupRequestedEventHandler(
-          container.get<ItemRepositoryInterface>(TYPES.Sync_SQLItemRepository),
-          container.get<DomainEventFactoryInterface>(TYPES.Sync_DomainEventFactory),
-          container.get<DomainEventPublisherInterface>(TYPES.Sync_DomainEventPublisher),
-          container.get<Logger>(TYPES.Sync_Logger),
-        ),
-      )
 
 
     // Services
     // Services
     container.bind<ContentDecoderInterface>(TYPES.Sync_ContentDecoder).toDynamicValue(() => new ContentDecoder())
     container.bind<ContentDecoderInterface>(TYPES.Sync_ContentDecoder).toDynamicValue(() => new ContentDecoder())
@@ -1019,7 +1008,6 @@ export class ContainerConfigLoader {
         'SHARED_VAULT_REMOVED',
         'SHARED_VAULT_REMOVED',
         container.get<SharedVaultRemovedEventHandler>(TYPES.Sync_SharedVaultRemovedEventHandler),
         container.get<SharedVaultRemovedEventHandler>(TYPES.Sync_SharedVaultRemovedEventHandler),
       ],
       ],
-      ['REVISIONS_CLEANUP_REQUESTED', container.get(TYPES.Sync_RevisionsCleanupRequestedEventHandler)],
     ])
     ])
     if (!isConfiguredForHomeServer) {
     if (!isConfiguredForHomeServer) {
       container
       container

+ 0 - 1
packages/syncing-server/src/Bootstrap/Types.ts

@@ -97,7 +97,6 @@ const TYPES = {
   Sync_SharedVaultFileUploadedEventHandler: Symbol.for('Sync_SharedVaultFileUploadedEventHandler'),
   Sync_SharedVaultFileUploadedEventHandler: Symbol.for('Sync_SharedVaultFileUploadedEventHandler'),
   Sync_SharedVaultFileMovedEventHandler: Symbol.for('Sync_SharedVaultFileMovedEventHandler'),
   Sync_SharedVaultFileMovedEventHandler: Symbol.for('Sync_SharedVaultFileMovedEventHandler'),
   Sync_SharedVaultRemovedEventHandler: Symbol.for('Sync_SharedVaultRemovedEventHandler'),
   Sync_SharedVaultRemovedEventHandler: Symbol.for('Sync_SharedVaultRemovedEventHandler'),
-  Sync_RevisionsCleanupRequestedEventHandler: Symbol.for('Sync_RevisionsCleanupRequestedEventHandler'),
   // Services
   // Services
   Sync_ContentDecoder: Symbol.for('Sync_ContentDecoder'),
   Sync_ContentDecoder: Symbol.for('Sync_ContentDecoder'),
   Sync_DomainEventPublisher: Symbol.for('Sync_DomainEventPublisher'),
   Sync_DomainEventPublisher: Symbol.for('Sync_DomainEventPublisher'),

+ 0 - 56
packages/syncing-server/src/Domain/Handler/RevisionsCleanupRequestedEventHandler.ts

@@ -1,56 +0,0 @@
-import {
-  RevisionsCleanupRequestedEvent,
-  DomainEventHandlerInterface,
-  DomainEventPublisherInterface,
-} from '@standardnotes/domain-events'
-
-import { Logger } from 'winston'
-import { ItemRepositoryInterface } from '../Item/ItemRepositoryInterface'
-import { DomainEventFactoryInterface } from '../Event/DomainEventFactoryInterface'
-
-export class RevisionsCleanupRequestedEventHandler implements DomainEventHandlerInterface {
-  constructor(
-    private itemRepository: ItemRepositoryInterface,
-    private domainEventFactory: DomainEventFactoryInterface,
-    private domainEventPublisher: DomainEventPublisherInterface,
-    private logger: Logger,
-  ) {}
-
-  async handle(event: RevisionsCleanupRequestedEvent): Promise<void> {
-    const totalDeletedItems = await this.itemRepository.countAll({
-      userUuid: event.payload.userUuid,
-      deleted: true,
-    })
-
-    this.logger.info(`Found ${totalDeletedItems} deleted items`, {
-      userId: event.payload.userUuid,
-    })
-
-    const limitPerPage = 100
-    const numberOfPages = Math.ceil(totalDeletedItems / limitPerPage)
-
-    for (let i = 0; i < numberOfPages; i++) {
-      const items = await this.itemRepository.findAll({
-        userUuid: event.payload.userUuid,
-        deleted: true,
-        offset: i * limitPerPage,
-        limit: limitPerPage,
-        sortOrder: 'ASC',
-        sortBy: 'created_at_timestamp',
-      })
-
-      for (const item of items) {
-        await this.domainEventPublisher.publish(
-          this.domainEventFactory.createItemDeletedEvent({
-            itemUuid: item.id.toString(),
-            userUuid: item.props.userUuid.value,
-          }),
-        )
-      }
-    }
-
-    this.logger.info(`Finished processing ${totalDeletedItems} deleted items`, {
-      userId: event.payload.userUuid,
-    })
-  }
-}