Просмотр исходного кода

reorganize GlobalNotificationSetting

Yuki Takei 2 месяцев назад
Родитель
Сommit
edfb0f03e8

+ 0 - 42
apps/app/src/server/models/GlobalNotificationSetting.ts

@@ -1,42 +0,0 @@
-import type { Model } from 'mongoose';
-import mongoose from 'mongoose';
-
-import type Crowi from '~/server/crowi';
-
-import {
-  class as GlobalNotificationSettingClass,
-  type GlobalNotificationSettingModel,
-  schema as GlobalNotificationSettingSchema,
-  type IGlobalNotificationSetting,
-} from './GlobalNotificationSetting/index';
-
-/**
- * global notifcation event master
- */
-export const GlobalNotificationSettingEvent = {
-  PAGE_CREATE: 'pageCreate',
-  PAGE_EDIT: 'pageEdit',
-  PAGE_DELETE: 'pageDelete',
-  PAGE_MOVE: 'pageMove',
-  PAGE_LIKE: 'pageLike',
-  COMMENT: 'comment',
-} as const;
-
-/**
- * global notifcation type master
- */
-export const GlobalNotificationSettingType = {
-  MAIL: 'mail',
-  SLACK: 'slack',
-} as const;
-
-const factory = (crowi: Crowi): GlobalNotificationSettingModel => {
-  GlobalNotificationSettingClass.crowi = crowi;
-  GlobalNotificationSettingSchema.loadClass(GlobalNotificationSettingClass);
-  return mongoose.model<
-    IGlobalNotificationSetting,
-    GlobalNotificationSettingModel
-  >('GlobalNotificationSetting', GlobalNotificationSettingSchema);
-};
-
-export default factory;

+ 7 - 12
apps/app/src/server/models/GlobalNotificationSetting/GlobalNotificationMailSetting.ts

@@ -1,23 +1,18 @@
-import type { Model } from 'mongoose';
 import mongoose from 'mongoose';
 
 import type Crowi from '~/server/crowi';
 
-import { GlobalNotificationSettingType } from '../GlobalNotificationSetting';
+import { GlobalNotificationSettingType } from './consts';
 import {
   class as GlobalNotificationSettingClass,
-  type GlobalNotificationSettingModel,
   schema as GlobalNotificationSettingSchema,
-  type IGlobalNotificationSetting,
 } from './index';
-
-export interface IGlobalNotificationMailSetting
-  extends IGlobalNotificationSetting {
-  toEmail: string;
-}
-
-export type GlobalNotificationMailSettingModel =
-  Model<IGlobalNotificationMailSetting> & GlobalNotificationSettingModel;
+import type {
+  GlobalNotificationMailSettingModel,
+  GlobalNotificationSettingModel,
+  IGlobalNotificationMailSetting,
+  IGlobalNotificationSetting,
+} from './types';
 
 const factory = (crowi: Crowi): GlobalNotificationMailSettingModel => {
   GlobalNotificationSettingClass.crowi = crowi;

+ 7 - 12
apps/app/src/server/models/GlobalNotificationSetting/GlobalNotificationSlackSetting.ts

@@ -1,23 +1,18 @@
-import type { Model } from 'mongoose';
 import mongoose from 'mongoose';
 
 import type Crowi from '~/server/crowi';
 
-import { GlobalNotificationSettingType } from '../GlobalNotificationSetting';
+import { GlobalNotificationSettingType } from './consts';
 import {
   class as GlobalNotificationSettingClass,
-  type GlobalNotificationSettingModel,
   schema as GlobalNotificationSettingSchema,
-  type IGlobalNotificationSetting,
 } from './index';
-
-export interface IGlobalNotificationSlackSetting
-  extends IGlobalNotificationSetting {
-  slackChannels: string;
-}
-
-export type GlobalNotificationSlackSettingModel =
-  Model<IGlobalNotificationSlackSetting> & GlobalNotificationSettingModel;
+import type {
+  GlobalNotificationSettingModel,
+  GlobalNotificationSlackSettingModel,
+  IGlobalNotificationSetting,
+  IGlobalNotificationSlackSetting,
+} from './types';
 
 const factory = (crowi: Crowi): GlobalNotificationSlackSettingModel => {
   GlobalNotificationSettingClass.crowi = crowi;

+ 3 - 3
apps/app/src/server/models/GlobalNotificationSetting/consts.ts

@@ -8,12 +8,12 @@ export const GlobalNotificationSettingEvent = {
   PAGE_MOVE: 'pageMove',
   PAGE_LIKE: 'pageLike',
   COMMENT: 'comment',
-};
+} as const;
 
 /**
  * global notifcation type master
  */
-export const GlobalNotificationSettingEventType = {
+export const GlobalNotificationSettingType = {
   MAIL: 'mail',
   SLACK: 'slack',
-};
+} as const;

+ 32 - 21
apps/app/src/server/models/GlobalNotificationSetting/index.ts

@@ -1,30 +1,14 @@
 import nodePath from 'node:path';
 import { pathUtils } from '@growi/core/dist/utils';
-import type { HydratedDocument, Model } from 'mongoose';
 import mongoose from 'mongoose';
 
 import type Crowi from '~/server/crowi';
 
-export interface IGlobalNotificationSetting {
-  isEnabled: boolean;
-  triggerPath: string;
-  triggerEvents: string[];
-}
-
-export type GlobalNotificationSettingDocument =
-  HydratedDocument<IGlobalNotificationSetting>;
-
-export interface GlobalNotificationSettingModel
-  extends Model<IGlobalNotificationSetting> {
-  enable(id: string): Promise<GlobalNotificationSettingDocument>;
-  disable(id: string): Promise<GlobalNotificationSettingDocument>;
-  findAll(): Promise<GlobalNotificationSettingDocument[]>;
-  findSettingByPathAndEvent(
-    event: string,
-    path: string,
-    type: string,
-  ): Promise<GlobalNotificationSettingDocument[]>;
-}
+import type {
+  GlobalNotificationSettingDocument,
+  GlobalNotificationSettingModel,
+  IGlobalNotificationSetting,
+} from './types';
 
 /**
  * parent schema for GlobalNotificationSetting model
@@ -159,6 +143,33 @@ class GlobalNotificationSetting {
   }
 }
 
+const factory = (crowi: Crowi): GlobalNotificationSettingModel => {
+  GlobalNotificationSetting.crowi = crowi;
+  globalNotificationSettingSchema.loadClass(GlobalNotificationSetting);
+  return mongoose.model<
+    IGlobalNotificationSetting,
+    GlobalNotificationSettingModel
+  >('GlobalNotificationSetting', globalNotificationSettingSchema);
+};
+
+export default factory;
+
+// Re-export types and constants for external use
+export {
+  GlobalNotificationSettingEvent,
+  GlobalNotificationSettingType,
+} from './consts';
+export type {
+  GlobalNotificationMailSettingModel,
+  GlobalNotificationSettingDocument,
+  GlobalNotificationSettingModel,
+  GlobalNotificationSlackSettingModel,
+  IGlobalNotificationMailSetting,
+  IGlobalNotificationSetting,
+  IGlobalNotificationSlackSetting,
+} from './types';
+
+// Internal use only
 export {
   GlobalNotificationSetting as class,
   globalNotificationSettingSchema as schema,

+ 51 - 0
apps/app/src/server/models/GlobalNotificationSetting/types.d.ts

@@ -0,0 +1,51 @@
+import type { HydratedDocument, Model } from 'mongoose';
+
+import type Crowi from '~/server/crowi';
+
+export interface IGlobalNotificationSetting {
+  isEnabled: boolean;
+  triggerPath: string;
+  triggerEvents: string[];
+}
+
+export type GlobalNotificationSettingDocument =
+  HydratedDocument<IGlobalNotificationSetting>;
+
+export interface GlobalNotificationSettingModel
+  extends Model<IGlobalNotificationSetting> {
+  enable(id: string): Promise<GlobalNotificationSettingDocument>;
+  disable(id: string): Promise<GlobalNotificationSettingDocument>;
+  findAll(): Promise<GlobalNotificationSettingDocument[]>;
+  findSettingByPathAndEvent(
+    event: string,
+    path: string,
+    type: string,
+  ): Promise<GlobalNotificationSettingDocument[]>;
+}
+
+export interface IGlobalNotificationMailSetting
+  extends IGlobalNotificationSetting {
+  toEmail: string;
+}
+
+export type GlobalNotificationMailSettingModel =
+  Model<IGlobalNotificationMailSetting> & GlobalNotificationSettingModel;
+
+export interface IGlobalNotificationSlackSetting
+  extends IGlobalNotificationSetting {
+  slackChannels: string;
+}
+
+export type GlobalNotificationSlackSettingModel =
+  Model<IGlobalNotificationSlackSetting> & GlobalNotificationSettingModel;
+
+/**
+ * GlobalNotificationSetting Class
+ * @class GlobalNotificationSetting
+ */
+export declare class GlobalNotificationSetting {
+  static crowi: Crowi;
+  crowi: Crowi;
+
+  constructor(crowi: Crowi);
+}