mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 02:55:58 +01:00 
			
		
		
		
	fix: controversial posts/bests posts not showing anything
fix upgrade script so posts with negative votes are stored, a post can have 10 upvotes and 2 downvotes fix missing negative votes checks remove unnecessary pids flters since the cids are only already filtered by topics:read
This commit is contained in:
		| @@ -176,7 +176,7 @@ module.exports = function (Categories) { | |||||||
| 				bulkRemove.push([`cid:${oldCid}:uid:${post.uid}:pids`, post.pid]); | 				bulkRemove.push([`cid:${oldCid}:uid:${post.uid}:pids`, post.pid]); | ||||||
| 				bulkRemove.push([`cid:${oldCid}:uid:${post.uid}:pids:votes`, post.pid]); | 				bulkRemove.push([`cid:${oldCid}:uid:${post.uid}:pids:votes`, post.pid]); | ||||||
| 				bulkAdd.push([`cid:${cid}:uid:${post.uid}:pids`, post.timestamp, post.pid]); | 				bulkAdd.push([`cid:${cid}:uid:${post.uid}:pids`, post.timestamp, post.pid]); | ||||||
| 				if (post.votes > 0) { | 				if (post.votes > 0 || post.votes < 0) { | ||||||
| 					bulkAdd.push([`cid:${cid}:uid:${post.uid}:pids:votes`, post.votes, post.pid]); | 					bulkAdd.push([`cid:${cid}:uid:${post.uid}:pids:votes`, post.votes, post.pid]); | ||||||
| 				} | 				} | ||||||
| 			}); | 			}); | ||||||
|   | |||||||
| @@ -57,8 +57,7 @@ const templateToData = { | |||||||
| 			return cids.map(c => `cid:${c}:uid:${userData.uid}:pids:votes`); | 			return cids.map(c => `cid:${c}:uid:${userData.uid}:pids:votes`); | ||||||
| 		}, | 		}, | ||||||
| 		getTopics: async (sets, req, start, stop) => { | 		getTopics: async (sets, req, start, stop) => { | ||||||
| 			let pids = await db.getSortedSetRevRangeByScore(sets, start, stop, '+inf', '1'); | 			const pids = await db.getSortedSetRevRangeByScore(sets, start, stop - start + 1, '+inf', 1); | ||||||
| 			pids = await privileges.posts.filter('topics:read', pids, req.uid); |  | ||||||
| 			const postObjs = await posts.getPostSummaryByPids(pids, req.uid, { stripTags: false }); | 			const postObjs = await posts.getPostSummaryByPids(pids, req.uid, { stripTags: false }); | ||||||
| 			return { posts: postObjs, nextStart: stop + 1 }; | 			return { posts: postObjs, nextStart: stop + 1 }; | ||||||
| 		}, | 		}, | ||||||
| @@ -72,8 +71,7 @@ const templateToData = { | |||||||
| 			return cids.map(c => `cid:${c}:uid:${userData.uid}:pids:votes`); | 			return cids.map(c => `cid:${c}:uid:${userData.uid}:pids:votes`); | ||||||
| 		}, | 		}, | ||||||
| 		getTopics: async (sets, req, start, stop) => { | 		getTopics: async (sets, req, start, stop) => { | ||||||
| 			let pids = await db.getSortedSetRangeByScore(sets, start, stop, '-inf', '-1'); | 			const pids = await db.getSortedSetRangeByScore(sets, start, stop - start + 1, '-inf', -1); | ||||||
| 			pids = await privileges.posts.filter('topics:read', pids, req.uid); |  | ||||||
| 			const postObjs = await posts.getPostSummaryByPids(pids, req.uid, { stripTags: false }); | 			const postObjs = await posts.getPostSummaryByPids(pids, req.uid, { stripTags: false }); | ||||||
| 			return { posts: postObjs, nextStart: stop + 1 }; | 			return { posts: postObjs, nextStart: stop + 1 }; | ||||||
| 		}, | 		}, | ||||||
|   | |||||||
| @@ -158,7 +158,7 @@ module.exports = function (Posts) { | |||||||
|  |  | ||||||
| 			bulkAdd.push([`uid:${toUid}:posts`, post.timestamp, post.pid]); | 			bulkAdd.push([`uid:${toUid}:posts`, post.timestamp, post.pid]); | ||||||
| 			bulkAdd.push([`cid:${post.cid}:uid:${toUid}:pids`, post.timestamp, post.pid]); | 			bulkAdd.push([`cid:${post.cid}:uid:${toUid}:pids`, post.timestamp, post.pid]); | ||||||
| 			if (post.votes > 0) { | 			if (post.votes > 0 || post.votes < 0) { | ||||||
| 				bulkAdd.push([`cid:${post.cid}:uid:${toUid}:pids:votes`, post.votes, post.pid]); | 				bulkAdd.push([`cid:${post.cid}:uid:${toUid}:pids:votes`, post.votes, post.pid]); | ||||||
| 			} | 			} | ||||||
| 			postsByUser[post.uid] = postsByUser[post.uid] || []; | 			postsByUser[post.uid] = postsByUser[post.uid] || []; | ||||||
|   | |||||||
| @@ -146,7 +146,7 @@ module.exports = function (Topics) { | |||||||
| 			db.sortedSetAdd(`cid:${topicData[1].cid}:pids`, postData.timestamp, postData.pid), | 			db.sortedSetAdd(`cid:${topicData[1].cid}:pids`, postData.timestamp, postData.pid), | ||||||
| 			db.sortedSetAdd(`cid:${topicData[1].cid}:uid:${postData.uid}:pids`, postData.timestamp, postData.pid), | 			db.sortedSetAdd(`cid:${topicData[1].cid}:uid:${postData.uid}:pids`, postData.timestamp, postData.pid), | ||||||
| 		]; | 		]; | ||||||
| 		if (postData.votes > 0) { | 		if (postData.votes > 0 || postData.votes < 0) { | ||||||
| 			tasks.push(db.sortedSetAdd(`cid:${topicData[1].cid}:uid:${postData.uid}:pids:votes`, postData.votes, postData.pid)); | 			tasks.push(db.sortedSetAdd(`cid:${topicData[1].cid}:uid:${postData.uid}:pids:votes`, postData.votes, postData.pid)); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,25 +10,19 @@ module.exports = { | |||||||
| 		const posts = require('../../posts'); | 		const posts = require('../../posts'); | ||||||
| 		const { progress } = this; | 		const { progress } = this; | ||||||
|  |  | ||||||
| 		await batch.processSortedSet('posts:pid', async (ids) => { | 		await batch.processSortedSet('posts:pid', async (pids) => { | ||||||
| 			const postData = await posts.getPostsFields(ids, ['uid', 'downvotes']); | 			const postData = await posts.getPostsFields(pids, ['pid', 'uid', 'upvotes', 'downvotes']); | ||||||
| 			const cids = await posts.getCidsByPids(ids); | 			const cids = await posts.getCidsByPids(pids); | ||||||
|  |  | ||||||
| 			const promises = ids.reduce((memo, pid, idx) => { | 			const bulkAdd = []; | ||||||
| 				const { uid, downvotes } = postData[idx]; | 			postData.forEach((post, index) => { | ||||||
| 				const cid = cids[idx]; | 				if (post.votes > 0 || post.votes < 0) { | ||||||
|  | 					const cid = cids[index]; | ||||||
| 				if (!downvotes) { | 					bulkAdd.push([`cid:${cid}:uid:${post.uid}:pids:votes`, post.votes, post.pid]); | ||||||
| 					progress.incr(); |  | ||||||
| 					return memo; |  | ||||||
| 				} | 				} | ||||||
|  | 			}); | ||||||
| 				memo.push(db.sortedSetAdd(`cid:${cid}:uid:${uid}:pids:votes`, -downvotes, pid)); | 			await db.sortedSetAddBulk(bulkAdd); | ||||||
| 				return memo; | 			progress.incr(postData.length); | ||||||
| 			}, []); |  | ||||||
|  |  | ||||||
| 			await Promise.all(promises); |  | ||||||
| 			progress.incr(promises.length); |  | ||||||
| 		}, { | 		}, { | ||||||
| 			progress, | 			progress, | ||||||
| 		}); | 		}); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user