external-user-group-relation.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { Schema, Model, Document } from 'mongoose';
  2. import { getOrCreateModel } from '../../../../server/util/mongoose-utils';
  3. import { IExternalUserGroupRelation } from '../../interfaces/external-user-group';
  4. export interface ExternalUserGroupRelationDocument extends IExternalUserGroupRelation, Document {}
  5. export interface ExternalUserGroupRelationModel extends Model<ExternalUserGroupRelationDocument> {
  6. [x:string]: any, // for old methods
  7. }
  8. const schema = new Schema<ExternalUserGroupRelationDocument, ExternalUserGroupRelationModel>({
  9. relatedGroup: { type: Schema.Types.ObjectId, ref: 'ExternalUserGroup', required: true },
  10. relatedUser: { type: Schema.Types.ObjectId, ref: 'User', required: true },
  11. }, {
  12. timestamps: { createdAt: true, updatedAt: false },
  13. });
  14. schema.statics.findOrCreateRelation = function(userGroup, user) {
  15. return this.updateOne({
  16. relatedGroup: { $eq: userGroup.id },
  17. relatedUser: { $eq: user.id },
  18. }, {}, { upsert: true });
  19. };
  20. schema.statics.createRelations = async function(userGroupIds, user) {
  21. const documentsToInsert = userGroupIds.map((groupId) => {
  22. return {
  23. relatedGroup: groupId,
  24. relatedUser: user._id,
  25. };
  26. });
  27. return this.insertMany(documentsToInsert);
  28. };
  29. /**
  30. * remove all relation for ExternalUserGroup
  31. *
  32. * @static
  33. * @param {ExternalUserGroup} userGroup related group for remove
  34. * @returns {Promise<any>}
  35. */
  36. schema.statics.removeAllByUserGroups = function(groupsToDelete) {
  37. if (!Array.isArray(groupsToDelete)) {
  38. throw Error('groupsToDelete must be an array.');
  39. }
  40. return this.deleteMany({ relatedGroup: { $in: groupsToDelete } });
  41. };
  42. export default getOrCreateModel<ExternalUserGroupRelationDocument, ExternalUserGroupRelationModel>('ExternalUserGroupRelation', schema);