From 3aba1e061b6d6084265c92c28a756c8a5ae2c9ac Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Tue, 13 Sep 2022 11:50:14 -0700 Subject: [PATCH] feat(NSFW): Adding hook for handling NSFW flags from users --- src/adapters/localdb/models/offer.js | 2 ++ src/controllers/rest-api/p2wdb/controller.js | 11 ++++++ src/use-cases/offer/index.js | 35 ++++++++++++++++++-- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/adapters/localdb/models/offer.js b/src/adapters/localdb/models/offer.js index 45b2107..0879f7b 100644 --- a/src/adapters/localdb/models/offer.js +++ b/src/adapters/localdb/models/offer.js @@ -28,6 +28,8 @@ const Offer = new mongoose.Schema({ globalTimestamp: { type: String }, localTimestamp: { type: String }, displayCategory: { type: String }, + nsfw: { type: Boolean, default: false }, + flags: { type: Array }, // SWaP Protocol Properties lokadId: { type: String }, diff --git a/src/controllers/rest-api/p2wdb/controller.js b/src/controllers/rest-api/p2wdb/controller.js index dfbcdff..c532f2a 100644 --- a/src/controllers/rest-api/p2wdb/controller.js +++ b/src/controllers/rest-api/p2wdb/controller.js @@ -45,12 +45,23 @@ class P2WDBRESTControllerLib { const counterOffer = ctx.request.body await _this.useCases.offer.acceptCounterOffer(counterOffer) + + // } else if (dataType.includes('offer')) { // Detect and handle new Offers console.log('offer data detected') const offerObj = ctx.request.body await _this.useCases.offer.createOffer(offerObj) + + // + } else if (dataType.includes('flag')) { + // Detect and handle data generated by users flagging NSFW Offers. + const flagData = ctx.request.body + console.log('Flag type data received: ', flagData) + + // const p2wdbHash = flagData.p2wdbHash + await _this.useCases.offer.flagOffer(flagData) } else { console.log('Could not route P2WDB webhook data.') } diff --git a/src/use-cases/offer/index.js b/src/use-cases/offer/index.js index 6875f0c..2593b5e 100644 --- a/src/use-cases/offer/index.js +++ b/src/use-cases/offer/index.js @@ -160,9 +160,12 @@ class OfferUseCases { } } - async listNftOffers (page = 0) { + async listNftOffers (page = 0, nsfw = false) { try { - const data = await this.OfferModel.find({ displayCategory: { $ne: 'fungible' } }) + const data = await this.OfferModel.find({ + displayCategory: { $ne: 'fungible' }, + nsfw + }) // Sort entries so newest entries show first. .sort('-timestamp') // Skip to the start of the selected page. @@ -507,6 +510,34 @@ class OfferUseCases { throw err } } + + async flagOffer (flagData) { + console.log(`flagData: ${JSON.stringify(flagData, null, 2)}`) + + const p2wdbHash = flagData.data.p2wdbHash + + // Get the offer from the database. + const offer = await this.findOfferByHash(p2wdbHash) + console.log(`Flagging this offer: ${JSON.stringify(offer, null, 2)}`) + + if (!offer) { + throw new Error(`Offer ${p2wdbHash} not found in the database.`) + } + + // Add the raw flag data to the database model. + offer.flags.push(flagData) + + // If flag count is 3 or more, mark the Offer as NSFW + const flagCnt = offer.flags.length + if (flagCnt >= 3) { + offer.nsfw = true + } + + // Save the updated offer data to the database. + await offer.save() + + return true + } } module.exports = OfferUseCases