浏览代码

fix(auth): passing transition timestamp

Karol Sójko 1 年之前
父节点
当前提交
c164bde847

+ 20 - 4
packages/auth/bin/transition.ts

@@ -11,6 +11,7 @@ import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
 import { DomainEventFactoryInterface } from '../src/Domain/Event/DomainEventFactoryInterface'
 import { UserRepositoryInterface } from '../src/Domain/User/UserRepositoryInterface'
 import { TransitionStatusRepositoryInterface } from '../src/Domain/Transition/TransitionStatusRepositoryInterface'
+import { TimerInterface } from '@standardnotes/time'
 
 const inputArgs = process.argv.slice(2)
 const startDateString = inputArgs[0]
@@ -22,19 +23,25 @@ const requestTransition = async (
   logger: Logger,
   domainEventFactory: DomainEventFactoryInterface,
   domainEventPublisher: DomainEventPublisherInterface,
+  timer: TimerInterface,
 ): Promise<void> => {
   const startDate = new Date(startDateString)
   const endDate = new Date(endDateString)
 
   const users = await userRepository.findAllCreatedBetween(startDate, endDate)
 
-  logger.info(`Found ${users.length} users created between ${startDateString} and ${endDateString}`)
+  const timestamp = timer.getTimestampInMicroseconds()
+
+  logger.info(
+    `[TRANSITION ${timestamp}] Found ${users.length} users created between ${startDateString} and ${endDateString}`,
+  )
 
   let usersTriggered = 0
   for (const user of users) {
     const transitionRequestedEvent = domainEventFactory.createTransitionRequestedEvent({
       userUuid: user.uuid,
       type: 'items',
+      timestamp,
     })
 
     usersTriggered += 1
@@ -43,18 +50,19 @@ const requestTransition = async (
   }
 
   logger.info(
-    `Triggered transition for ${usersTriggered} users created between ${startDateString} and ${endDateString}`,
+    `[TRANSITION ${timestamp}] Triggered transition for ${usersTriggered} users created between ${startDateString} and ${endDateString}`,
   )
 
   const revisionStatuses = await transitionStatusRepository.getStatuses('revisions')
   const failedStatuses = revisionStatuses.filter((status) => status.status === 'FAILED')
 
-  logger.info(`Found ${failedStatuses.length} failed revision transitions`)
+  logger.info(`[TRANSITION ${timestamp}] Found ${failedStatuses.length} failed revision transitions`)
 
   for (const status of failedStatuses) {
     const transitionRequestedEvent = domainEventFactory.createTransitionRequestedEvent({
       userUuid: status.userUuid,
       type: 'revisions',
+      timestamp,
     })
 
     await domainEventPublisher.publish(transitionRequestedEvent)
@@ -78,9 +86,17 @@ void container.load().then((container) => {
   const transitionStatusRepository: TransitionStatusRepositoryInterface = container.get(
     TYPES.Auth_TransitionStatusRepository,
   )
+  const timer = container.get<TimerInterface>(TYPES.Auth_Timer)
 
   Promise.resolve(
-    requestTransition(userRepository, transitionStatusRepository, logger, domainEventFactory, domainEventPublisher),
+    requestTransition(
+      userRepository,
+      transitionStatusRepository,
+      logger,
+      domainEventFactory,
+      domainEventPublisher,
+      timer,
+    ),
   )
     .then(() => {
       logger.info(`Finished transition request for users created between ${startDateString} and ${endDateString}`)

+ 6 - 5
packages/auth/src/Domain/Event/DomainEventFactory.ts

@@ -33,7 +33,11 @@ import { DomainEventFactoryInterface } from './DomainEventFactoryInterface'
 export class DomainEventFactory implements DomainEventFactoryInterface {
   constructor(@inject(TYPES.Auth_Timer) private timer: TimerInterface) {}
 
-  createTransitionRequestedEvent(dto: { userUuid: string; type: 'items' | 'revisions' }): TransitionRequestedEvent {
+  createTransitionRequestedEvent(dto: {
+    userUuid: string
+    type: 'items' | 'revisions'
+    timestamp: number
+  }): TransitionRequestedEvent {
     return {
       type: 'TRANSITION_REQUESTED',
       createdAt: this.timer.getUTCDate(),
@@ -44,10 +48,7 @@ export class DomainEventFactory implements DomainEventFactoryInterface {
         },
         origin: DomainEventService.Auth,
       },
-      payload: {
-        timestamp: this.timer.getTimestampInMicroseconds(),
-        ...dto,
-      },
+      payload: dto,
     }
   }
 

+ 5 - 1
packages/auth/src/Domain/Event/DomainEventFactoryInterface.ts

@@ -90,5 +90,9 @@ export interface DomainEventFactoryInterface {
   }): StatisticPersistenceRequestedEvent
   createSessionCreatedEvent(dto: { userUuid: string }): SessionCreatedEvent
   createSessionRefreshedEvent(dto: { userUuid: string }): SessionRefreshedEvent
-  createTransitionRequestedEvent(dto: { userUuid: string; type: 'items' | 'revisions' }): TransitionRequestedEvent
+  createTransitionRequestedEvent(dto: {
+    userUuid: string
+    type: 'items' | 'revisions'
+    timestamp: number
+  }): TransitionRequestedEvent
 }

+ 23 - 17
packages/auth/src/Domain/UseCase/UpdateTransitionStatus/UpdateTransitionStatus.ts

@@ -30,23 +30,29 @@ export class UpdateTransitionStatus implements UseCaseInterface<void> {
       await this.roleService.addRoleToUser(userUuid, RoleName.create(RoleName.NAMES.TransitionUser).getValue())
     }
 
-    const itemStatuses = await this.transitionStatusRepository.getStatuses('items')
-    const itemsStartedStatusesCount = itemStatuses.filter((status) => status.status === 'STARTED').length
-    const itemsInProgressStatusesCount = itemStatuses.filter((status) => status.status === 'IN_PROGRESS').length
-    const itemsFailedStatusesCount = itemStatuses.filter((status) => status.status === 'FAILED').length
-
-    this.logger.info(
-      `[TRANSITION ${dto.transitionTimestamp}] Items transition statuses: ${itemsStartedStatusesCount} started, ${itemsInProgressStatusesCount} in progress, ${itemsFailedStatusesCount} failed`,
-    )
-
-    const revisionStatuses = await this.transitionStatusRepository.getStatuses('revisions')
-    const revisionsStartedStatusesCount = revisionStatuses.filter((status) => status.status === 'STARTED').length
-    const revisionsInProgressStatusesCount = revisionStatuses.filter((status) => status.status === 'IN_PROGRESS').length
-    const revisionsFailedStatusesCount = revisionStatuses.filter((status) => status.status === 'FAILED').length
-
-    this.logger.info(
-      `[TRANSITION ${dto.transitionTimestamp}] Revisions transition statuses: ${revisionsStartedStatusesCount} started, ${revisionsInProgressStatusesCount} in progress, ${revisionsFailedStatusesCount} failed`,
-    )
+    if (dto.transitionType === 'items') {
+      const itemStatuses = await this.transitionStatusRepository.getStatuses('items')
+      const itemsStartedStatusesCount = itemStatuses.filter((status) => status.status === 'STARTED').length
+      const itemsInProgressStatusesCount = itemStatuses.filter((status) => status.status === 'IN_PROGRESS').length
+      const itemsFailedStatusesCount = itemStatuses.filter((status) => status.status === 'FAILED').length
+
+      this.logger.info(
+        `[TRANSITION ${dto.transitionTimestamp}] Items transition statuses: ${itemsStartedStatusesCount} started, ${itemsInProgressStatusesCount} in progress, ${itemsFailedStatusesCount} failed`,
+      )
+    }
+
+    if (dto.transitionType === 'revisions') {
+      const revisionStatuses = await this.transitionStatusRepository.getStatuses('revisions')
+      const revisionsStartedStatusesCount = revisionStatuses.filter((status) => status.status === 'STARTED').length
+      const revisionsInProgressStatusesCount = revisionStatuses.filter(
+        (status) => status.status === 'IN_PROGRESS',
+      ).length
+      const revisionsFailedStatusesCount = revisionStatuses.filter((status) => status.status === 'FAILED').length
+
+      this.logger.info(
+        `[TRANSITION ${dto.transitionTimestamp}] Revisions transition statuses: ${revisionsStartedStatusesCount} started, ${revisionsInProgressStatusesCount} in progress, ${revisionsFailedStatusesCount} failed`,
+      )
+    }
 
     return Result.ok()
   }