user.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import EventEmitter from 'events';
  2. import { type IUserHasId, pagePathUtils } from '@growi/core';
  3. import loggerFactory from '~/utils/logger';
  4. const logger = loggerFactory('growi:events:user');
  5. class UserEvent extends EventEmitter {
  6. crowi: any;
  7. // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
  8. constructor(crowi: any) {
  9. super();
  10. this.crowi = crowi;
  11. }
  12. async onActivated(user: IUserHasId): Promise<void> {
  13. if (this.crowi.pageService === null) {
  14. logger.warn('crowi pageService is null');
  15. return;
  16. }
  17. const Page = this.crowi.model('Page');
  18. const userHomePagePath = pagePathUtils.userHomepagePath(user.username);
  19. // TODO: Delete user arg.
  20. // see: https://redmine.weseek.co.jp/issues/124326
  21. let page = await Page.findByPath(userHomePagePath, user);
  22. if (page !== null && page.creator.toString() !== user._id.toString()) {
  23. await this.crowi.pageService.deleteCompletelyUserHomeBySystem(user, userHomePagePath);
  24. page = null;
  25. }
  26. if (page == null) {
  27. const body = `# ${user.username}\nThis is ${user.username}'s page`;
  28. try {
  29. await this.crowi.pageService.create(userHomePagePath, body, user, {});
  30. logger.debug('User page created', page);
  31. }
  32. catch (err) {
  33. logger.error('Failed to create user page', err);
  34. }
  35. }
  36. }
  37. }
  38. export default UserEvent;