fix: #13153, follower and following collections to use generateCollection helper

This commit is contained in:
Julian Lam
2025-05-06 12:09:33 -04:00
parent 7f59238d3a
commit a2de7aaecf

View File

@@ -6,6 +6,7 @@ const winston = require('winston');
const meta = require('../../meta'); const meta = require('../../meta');
const user = require('../../user'); const user = require('../../user');
const activitypub = require('../../activitypub'); const activitypub = require('../../activitypub');
const utils = require('../../utils');
const helpers = require('../helpers'); const helpers = require('../helpers');
const Controller = module.exports; const Controller = module.exports;
@@ -60,71 +61,49 @@ Controller.fetch = async (req, res, next) => {
Controller.getFollowing = async (req, res) => { Controller.getFollowing = async (req, res) => {
const { followingCount, followingRemoteCount } = await user.getUserFields(req.params.uid, ['followingCount', 'followingRemoteCount']); const { followingCount, followingRemoteCount } = await user.getUserFields(req.params.uid, ['followingCount', 'followingRemoteCount']);
const totalItems = parseInt(followingCount || 0, 10) + parseInt(followingRemoteCount || 0, 10); const totalItems = parseInt(followingCount || 0, 10) + parseInt(followingRemoteCount || 0, 10);
let orderedItems;
let next = (totalItems && `${nconf.get('url')}/uid/${req.params.uid}/following?page=`) || null;
if (totalItems) { const count = totalItems;
if (req.query.page) { const collection = await activitypub.helpers.generateCollection({
const page = parseInt(req.query.page, 10) || 1; method: user.getFollowing.bind(null, req.params.uid),
const resultsPerPage = 50; count,
const start = Math.max(0, page - 1) * resultsPerPage; perPage: 50,
const stop = start + resultsPerPage - 1; page: req.query.page,
url: `${nconf.get('url')}/uid/${req.params.uid}/following`,
orderedItems = await user.getFollowing(req.params.uid, start, stop);
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
if (stop < totalItems - 1) {
next = `${next}${page + 1}`;
} else {
next = null;
}
} else {
orderedItems = [];
next = `${next}1`;
}
}
res.status(200).json({
'@context': 'https://www.w3.org/ns/activitystreams',
type: 'OrderedCollection',
totalItems,
orderedItems,
next,
}); });
collection.orderedItems = collection.orderedItems.map(({ uid }) => {
if (utils.isNumber(uid)) {
return `${nconf.get('url')}/uid/${uid}`;
}
return uid;
});
res.status(200).json(collection);
}; };
Controller.getFollowers = async (req, res) => { Controller.getFollowers = async (req, res) => {
const { followerCount, followerRemoteCount } = await user.getUserFields(req.params.uid, ['followerCount', 'followerRemoteCount']); const { followerCount, followerRemoteCount } = await user.getUserFields(req.params.uid, ['followerCount', 'followerRemoteCount']);
const totalItems = parseInt(followerCount || 0, 10) + parseInt(followerRemoteCount || 0, 10); const totalItems = parseInt(followerCount || 0, 10) + parseInt(followerRemoteCount || 0, 10);
let orderedItems = [];
let next = (totalItems && `${nconf.get('url')}/uid/${req.params.uid}/followers?page=`) || null;
if (totalItems) { const count = totalItems;
if (req.query.page) { const collection = await activitypub.helpers.generateCollection({
const page = parseInt(req.query.page, 10) || 1; method: user.getFollowers.bind(null, req.params.uid),
const resultsPerPage = 50; count,
const start = Math.max(0, page - 1) * resultsPerPage; perPage: 50,
const stop = start + resultsPerPage - 1; page: req.query.page,
url: `${nconf.get('url')}/uid/${req.params.uid}/followers`,
orderedItems = await user.getFollowers(req.params.uid, start, stop);
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
if (stop < totalItems - 1) {
next = `${next}${page + 1}`;
} else {
next = null;
}
} else {
orderedItems = [];
next = `${next}1`;
}
}
res.status(200).json({
'@context': 'https://www.w3.org/ns/activitystreams',
type: 'OrderedCollection',
totalItems,
orderedItems,
next,
}); });
collection.orderedItems = collection.orderedItems.map(({ uid }) => {
if (utils.isNumber(uid)) {
return `${nconf.get('url')}/uid/${uid}`;
}
return uid;
});
res.status(200).json(collection);
}; };
Controller.getOutbox = async (req, res) => { Controller.getOutbox = async (req, res) => {