share-link.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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 ObjectId = mongoose.Schema.Types.ObjectId;
  17. const schema = new Schema<ShareLinkDocument, ShareLinkModel>({
  18. relatedPage: {
  19. type: ObjectId,
  20. ref: 'Page',
  21. required: true,
  22. index: true,
  23. },
  24. expiredAt: { type: Date },
  25. description: { type: String },
  26. }, {
  27. timestamps: { createdAt: true, updatedAt: false },
  28. });
  29. schema.plugin(mongoosePaginate);
  30. schema.plugin(uniqueValidator);
  31. schema.methods.isExpired = function() {
  32. if (this.expiredAt == null) {
  33. return false;
  34. }
  35. return this.expiredAt.getTime() < new Date().getTime();
  36. };
  37. export default getOrCreateModel<ShareLinkDocument, ShareLinkModel>('ShareLink', schema);