transition.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'reflect-metadata'
  2. import { Logger } from 'winston'
  3. import * as dayjs from 'dayjs'
  4. import * as utc from 'dayjs/plugin/utc'
  5. import { ContainerConfigLoader } from '../src/Bootstrap/Container'
  6. import TYPES from '../src/Bootstrap/Types'
  7. import { Env } from '../src/Bootstrap/Env'
  8. import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
  9. import { DomainEventFactoryInterface } from '../src/Domain/Event/DomainEventFactoryInterface'
  10. import { UserRepositoryInterface } from '../src/Domain/User/UserRepositoryInterface'
  11. const inputArgs = process.argv.slice(2)
  12. const startDateString = inputArgs[0]
  13. const endDateString = inputArgs[1]
  14. const requestTransition = async (
  15. userRepository: UserRepositoryInterface,
  16. logger: Logger,
  17. domainEventFactory: DomainEventFactoryInterface,
  18. domainEventPublisher: DomainEventPublisherInterface,
  19. ): Promise<void> => {
  20. const startDate = new Date(startDateString)
  21. const endDate = new Date(endDateString)
  22. const users = await userRepository.findAllCreatedBetween(startDate, endDate)
  23. logger.info(`Found ${users.length} users created between ${startDateString} and ${endDateString}`)
  24. for (const user of users) {
  25. const transitionRequestedEvent = domainEventFactory.createTransitionRequestedEvent({ userUuid: user.uuid })
  26. await domainEventPublisher.publish(transitionRequestedEvent)
  27. }
  28. }
  29. const container = new ContainerConfigLoader('worker')
  30. void container.load().then((container) => {
  31. dayjs.extend(utc)
  32. const env: Env = new Env()
  33. env.load()
  34. const logger: Logger = container.get(TYPES.Auth_Logger)
  35. logger.info(`Starting transition request for users created between ${startDateString} and ${endDateString}`)
  36. const userRepository: UserRepositoryInterface = container.get(TYPES.Auth_UserRepository)
  37. const domainEventFactory: DomainEventFactoryInterface = container.get(TYPES.Auth_DomainEventFactory)
  38. const domainEventPublisher: DomainEventPublisherInterface = container.get(TYPES.Auth_DomainEventPublisher)
  39. Promise.resolve(requestTransition(userRepository, logger, domainEventFactory, domainEventPublisher))
  40. .then(() => {
  41. logger.info(`Finished transition request for users created between ${startDateString} and ${endDateString}`)
  42. process.exit(0)
  43. })
  44. .catch((error) => {
  45. logger.error(
  46. `Error while requesting transition for users created between ${startDateString} and ${endDateString}: ${error}`,
  47. )
  48. process.exit(1)
  49. })
  50. })