import type { Model, Document } from 'mongoose'; import { Schema } from 'mongoose'; import type { ObjectIdLike } from '~/server/interfaces/mongoose-utils'; import UserGroupRelation from '~/server/models/user-group-relation'; import { getOrCreateModel } from '../../../../server/util/mongoose-utils'; import type { IExternalUserGroupRelation } from '../../interfaces/external-user-group'; import type { ExternalUserGroupDocument } from './external-user-group'; export interface ExternalUserGroupRelationDocument extends IExternalUserGroupRelation, Document {} export interface ExternalUserGroupRelationModel extends Model { [x:string]: any, // for old methods PAGE_ITEMS: 50, removeAllByUserGroups: (groupsToDelete: ExternalUserGroupDocument[]) => Promise, findAllUserIdsForUserGroups: (userGroupIds: ObjectIdLike[]) => Promise, findGroupsWithDescendantsByGroupAndUser: (group: ExternalUserGroupDocument, user) => Promise, countByGroupIdsAndUser: (userGroupIds: ObjectIdLike[], userData) => Promise findAllGroupsForUser: (user) => Promise findAllUserGroupIdsRelatedToUser: (user) => Promise } const schema = new Schema({ relatedGroup: { type: Schema.Types.ObjectId, ref: 'ExternalUserGroup', required: true }, relatedUser: { type: Schema.Types.ObjectId, ref: 'User', required: true }, }, { timestamps: { createdAt: true, updatedAt: false }, }); schema.statics.createRelations = UserGroupRelation.createRelations; schema.statics.removeAllByUserGroups = UserGroupRelation.removeAllByUserGroups; schema.statics.findAllRelation = UserGroupRelation.findAllRelation; schema.statics.removeAllInvalidRelations = UserGroupRelation.removeAllInvalidRelations; schema.statics.findGroupsWithDescendantsByGroupAndUser = UserGroupRelation.findGroupsWithDescendantsByGroupAndUser; schema.statics.countByGroupIdsAndUser = UserGroupRelation.countByGroupIdsAndUser; schema.statics.findAllUserIdsForUserGroups = UserGroupRelation.findAllUserIdsForUserGroups; schema.statics.findAllUserGroupIdsRelatedToUser = UserGroupRelation.findAllUserGroupIdsRelatedToUser; schema.statics.findAllGroupsForUser = UserGroupRelation.findAllGroupsForUser; export default getOrCreateModel('ExternalUserGroupRelation', schema);