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