Publisher.js 991 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. const { ObjectId } = require('mongodb')
  2. const PublisherModel = require('../../../../app/src/models/Publisher').Publisher
  3. const { callbackifyClass } = require('@overleaf/promise-utils')
  4. let count = parseInt(Math.random() * 999999)
  5. class PromisifiedPublisher {
  6. constructor(options = {}) {
  7. this.slug = options.slug || `publisher-slug-${count}`
  8. this.managerIds = []
  9. count += 1
  10. }
  11. async ensureExists() {
  12. const filter = { slug: this.slug }
  13. const options = { upsert: true, new: true, setDefaultsOnInsert: true }
  14. const publisher = await PublisherModel.findOneAndUpdate(
  15. filter,
  16. {},
  17. options
  18. ).exec()
  19. this._id = publisher._id
  20. }
  21. async setManagerIds(managerIds) {
  22. return await PublisherModel.findOneAndUpdate(
  23. { _id: new ObjectId(this._id) },
  24. { managerIds }
  25. ).exec()
  26. }
  27. }
  28. const Publisher = callbackifyClass(PromisifiedPublisher)
  29. Publisher.promises = class extends PromisifiedPublisher {}
  30. module.exports = Publisher