setup-models.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import type { Model } from 'mongoose';
  2. import loggerFactory from '~/utils/logger';
  3. import type Crowi from '.';
  4. const logger = loggerFactory('growi:crowi:setup-models');
  5. export type ModelsMapDependentOnCrowi = {
  6. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  7. [modelName: string]: Model<any>,
  8. }
  9. export const setupModelsDependentOnCrowi = async(crowi: Crowi): Promise<ModelsMapDependentOnCrowi> => {
  10. const modelsMap: ModelsMapDependentOnCrowi = {};
  11. const modelsDependsOnCrowi = {
  12. Page: (await import('../models/page')).default,
  13. User: (await import('../models/user')).default,
  14. Bookmark: (await import('../models/bookmark')).default,
  15. GlobalNotificationSetting: (await import('../models/GlobalNotificationSetting')).default,
  16. GlobalNotificationMailSetting: (await import('../models/GlobalNotificationSetting/GlobalNotificationMailSetting')).default,
  17. GlobalNotificationSlackSetting: (await import('../models/GlobalNotificationSetting/GlobalNotificationSlackSetting')).default,
  18. SlackAppIntegration: (await import('../models/slack-app-integration')).default,
  19. };
  20. Object.keys(modelsDependsOnCrowi).forEach((modelName) => {
  21. const factory = modelsDependsOnCrowi[modelName];
  22. if (!(factory instanceof Function)) {
  23. logger.warn(`modelsDependsOnCrowi['${modelName}'] is not a function. skipped.`);
  24. return;
  25. }
  26. modelsMap[modelName] = factory(crowi);
  27. });
  28. return modelsMap;
  29. };
  30. export const setupIndependentModels = async(): Promise<void> => {
  31. await Promise.all([
  32. import('~/features/comment/server/models'),
  33. import('~/features/external-user-group/server/models/external-user-group-relation'),
  34. import('~/features/external-user-group/server/models/external-user-group'),
  35. import('~/features/growi-plugin/server/models'),
  36. import('../models/activity'),
  37. import('../models/attachment'),
  38. import('../models/bookmark-folder'),
  39. import('../models/config'),
  40. import('../models/editor-settings'),
  41. import('../models/external-account'),
  42. import('../models/in-app-notification-settings'),
  43. import('../models/in-app-notification'),
  44. import('../models/named-query'),
  45. import('../models/page-operation'),
  46. import('../models/page-redirect'),
  47. import('../models/page-tag-relation'),
  48. import('../models/password-reset-order'),
  49. import('../models/revision'),
  50. import('../models/share-link'),
  51. import('../models/subscription'),
  52. import('../models/tag'),
  53. import('../models/transfer-key'),
  54. import('../models/update-post'),
  55. import('../models/user-group-relation'),
  56. import('../models/user-group'),
  57. import('../models/user-registration-order'),
  58. import('../models/user-ui-settings'),
  59. ]);
  60. };