mirror of
https://github.com/standardnotes/server
synced 2026-07-14 00:01:54 -04:00
62 lines
2.2 KiB
TypeScript
62 lines
2.2 KiB
TypeScript
import {
|
|
DomainEventHandlerInterface,
|
|
DomainEventPublisherInterface,
|
|
TransitionStatusUpdatedEvent,
|
|
} from '@standardnotes/domain-events'
|
|
import { Logger } from 'winston'
|
|
import { DomainEventFactoryInterface } from '../Event/DomainEventFactoryInterface'
|
|
import { TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser } from '../UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser'
|
|
|
|
export class TransitionStatusUpdatedEventHandler implements DomainEventHandlerInterface {
|
|
constructor(
|
|
private transitionRevisionsFromPrimaryToSecondaryDatabaseForUser: TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser,
|
|
private domainEventPublisher: DomainEventPublisherInterface,
|
|
private domainEventFactory: DomainEventFactoryInterface,
|
|
private logger: Logger,
|
|
) {}
|
|
|
|
async handle(event: TransitionStatusUpdatedEvent): Promise<void> {
|
|
if (event.payload.status === 'STARTED' && event.payload.transitionType === 'items') {
|
|
await this.domainEventPublisher.publish(
|
|
this.domainEventFactory.createTransitionStatusUpdatedEvent({
|
|
userUuid: event.payload.userUuid,
|
|
status: 'STARTED',
|
|
transitionType: 'revisions',
|
|
}),
|
|
)
|
|
|
|
return
|
|
}
|
|
|
|
if (event.payload.status === 'STARTED' && event.payload.transitionType === 'revisions') {
|
|
const result = await this.transitionRevisionsFromPrimaryToSecondaryDatabaseForUser.execute({
|
|
userUuid: event.payload.userUuid,
|
|
})
|
|
|
|
if (result.isFailed()) {
|
|
this.logger.error(`Failed to transition revisions for user ${event.payload.userUuid}: ${result.getError()}`)
|
|
|
|
await this.domainEventPublisher.publish(
|
|
this.domainEventFactory.createTransitionStatusUpdatedEvent({
|
|
userUuid: event.payload.userUuid,
|
|
status: 'FAILED',
|
|
transitionType: 'revisions',
|
|
}),
|
|
)
|
|
|
|
return
|
|
}
|
|
|
|
await this.domainEventPublisher.publish(
|
|
this.domainEventFactory.createTransitionStatusUpdatedEvent({
|
|
userUuid: event.payload.userUuid,
|
|
status: 'FINISHED',
|
|
transitionType: 'revisions',
|
|
}),
|
|
)
|
|
|
|
return
|
|
}
|
|
}
|
|
}
|