share-link.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import mongoose, { Schema } from 'mongoose';
  2. import type {
  3. Document, Model,
  4. } from 'mongoose';
  5. import mongoosePaginate from 'mongoose-paginate-v2';
  6. import uniqueValidator from 'mongoose-unique-validator';
  7. import type { IShareLink } from '~/interfaces/share-link';
  8. import { getOrCreateModel } from '../util/mongoose-utils';
  9. export interface ShareLinkDocument extends IShareLink, Document {
  10. isExpired: () => boolean,
  11. }
  12. export type ShareLinkModel = Model<ShareLinkDocument>;
  13. /*
  14. * define schema
  15. */
  16. const schema = new Schema<ShareLinkDocument, ShareLinkModel>({
  17. relatedPage: {
  18. type: Schema.Types.ObjectId,
  19. ref: 'Page',
  20. required: true,
  21. index: true,
  22. },
  23. expiredAt: { type: Date },
  24. description: { type: String },
  25. }, {
  26. timestamps: { createdAt: true, updatedAt: false },
  27. });
  28. schema.plugin(mongoosePaginate);
  29. schema.plugin(uniqueValidator);
  30. schema.methods.isExpired = function() {
  31. if (this.expiredAt == null) {
  32. return false;
  33. }
  34. return this.expiredAt.getTime() < new Date().getTime();
  35. };
  36. export default getOrCreateModel<ShareLinkDocument, ShareLinkModel>('ShareLink', schema);