external-user-group-relation.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { Schema, Model, Document } from 'mongoose';
  2. import { IExternalUserGroupRelation } from '~/interfaces/external-user-group';
  3. import { getOrCreateModel } from '../util/mongoose-utils';
  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. export default getOrCreateModel<ExternalUserGroupRelationDocument, ExternalUserGroupRelationModel>('ExternalUserGroupRelation', schema);