/* 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 const ObjectId = mongoose.Schema.Types.ObjectId; const schema = new Schema({ 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('NamedQuery', schema);