|
|
@@ -0,0 +1,36 @@
|
|
|
+/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
|
+
|
|
|
+import mongoose, {
|
|
|
+ Schema, Model, Document,
|
|
|
+} from 'mongoose';
|
|
|
+
|
|
|
+import { getOrCreateModel } from '@growi/core';
|
|
|
+import loggerFactory from '../../utils/logger';
|
|
|
+import { INamedQuery, SearchDelegatorName } from '../../interfaces/named-query';
|
|
|
+
|
|
|
+const logger = loggerFactory('growi:models:named-query');
|
|
|
+
|
|
|
+export interface NamedQueryDocument extends INamedQuery, Document {}
|
|
|
+
|
|
|
+export type NamedQueryModel = Model<NamedQueryDocument>
|
|
|
+
|
|
|
+const ObjectId = mongoose.Schema.Types.ObjectId;
|
|
|
+
|
|
|
+const schema = new Schema<NamedQueryDocument, NamedQueryModel>({
|
|
|
+ name: { type: String, required: true, unique: true },
|
|
|
+ aliasOf: { type: String },
|
|
|
+ delegatorName: { type: String, enum: SearchDelegatorName },
|
|
|
+ creator: {
|
|
|
+ type: ObjectId, ref: 'User', index: true, default: null,
|
|
|
+ },
|
|
|
+});
|
|
|
+
|
|
|
+schema.pre('validate', async function(this, next) {
|
|
|
+ if (this.aliasOf == null && this.delegatorName == null) {
|
|
|
+ throw Error('Either of aliasOf and delegatorNameName must not be null.');
|
|
|
+ }
|
|
|
+
|
|
|
+ next();
|
|
|
+});
|
|
|
+
|
|
|
+export default getOrCreateModel<NamedQueryDocument, NamedQueryModel>('NamedQuery', schema);
|