|
@ -11,7 +11,7 @@ const mongoose = require('mongoose'); |
|
|
const Sticker = mongoose.model('Sticker'); |
|
|
const Sticker = mongoose.model('Sticker'); |
|
|
const User = mongoose.model('User'); |
|
|
const User = mongoose.model('User'); |
|
|
|
|
|
|
|
|
const { SiteService, SiteError, SiteAsync } = require('../../lib/site-lib'); |
|
|
const { SiteService, SiteError } = require('../../lib/site-lib'); |
|
|
|
|
|
|
|
|
const MAX_CHANNEL_STICKERS = 50; |
|
|
const MAX_CHANNEL_STICKERS = 50; |
|
|
const MAX_USER_STICKERS = 10; |
|
|
const MAX_USER_STICKERS = 10; |
|
@ -144,18 +144,42 @@ class StickerService extends SiteService { |
|
|
await Sticker.updateOne({ _id: sticker._id }, { $set: { status } }); |
|
|
await Sticker.updateOne({ _id: sticker._id }, { $set: { status } }); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Fetch and populate an Array of Sticker documents matching the input slugs. |
|
|
|
|
|
* |
|
|
|
|
|
* The returned Array may be smaller than the input Array (or empty) if some |
|
|
|
|
|
* or none of the stickers have been deleted or simply don't exist. |
|
|
|
|
|
* |
|
|
|
|
|
* @param {Array} slugs an Array of sticker slugs |
|
|
|
|
|
* @returns Array of populated matching Sticker documents |
|
|
|
|
|
*/ |
|
|
async resolveStickerSlugs (slugs) { |
|
|
async resolveStickerSlugs (slugs) { |
|
|
const stickers = [ ]; |
|
|
const stickers = await Sticker |
|
|
await SiteAsync.each(slugs, async (slug) => { |
|
|
.find({ slug: { $in: slugs } }) |
|
|
const sticker = await Sticker.findOne({ slug: slug }); |
|
|
.populate(this.populateSticker) |
|
|
if (!sticker) { |
|
|
.lean(); |
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
stickers.push(sticker); |
|
|
|
|
|
}); |
|
|
|
|
|
return stickers; |
|
|
return stickers; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* Convert an array of sticker slugs to an array of sticker _id values. This |
|
|
|
|
|
* is used during chat message ingest where the whole populated sticker just |
|
|
|
|
|
* isn't needed and is all discarded. |
|
|
|
|
|
* |
|
|
|
|
|
* The returned Array may be smaller than the input Array (or empty) if some |
|
|
|
|
|
* or none of the stickers have been deleted or simply don't exist. |
|
|
|
|
|
* |
|
|
|
|
|
* @param {Array} slugs an Array of sticker slugs |
|
|
|
|
|
* @returns an Array of sticker IDs |
|
|
|
|
|
*/ |
|
|
|
|
|
async resolveStickerSlugIds (slugs) { |
|
|
|
|
|
const stickers = await Sticker |
|
|
|
|
|
.find({ slug: { $in: slugs } }) |
|
|
|
|
|
.select('_id') |
|
|
|
|
|
.lean(); |
|
|
|
|
|
return stickers.map((sticker) => sticker._id); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
async removeSticker (sticker) { |
|
|
async removeSticker (sticker) { |
|
|
const stickerId = sticker._id; |
|
|
const stickerId = sticker._id; |
|
|
this.log.info('creating sticker delete job', { stickerId }); |
|
|
this.log.info('creating sticker delete job', { stickerId }); |
|
@ -208,7 +232,7 @@ class StickerService extends SiteService { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
module.exports = { |
|
|
module.exports = { |
|
|
logId: 'sticker', |
|
|
logId: 'svc:sticker', |
|
|
index: 'sticker', |
|
|
index: 'sticker', |
|
|
className: 'StickerService', |
|
|
className: 'StickerService', |
|
|
create: (dtp) => { return new StickerService(dtp); }, |
|
|
create: (dtp) => { return new StickerService(dtp); }, |
|
|