feat: returning following and follower collections upon request

This commit is contained in:
Julian Lam
2024-02-01 16:53:47 -05:00
parent 607c4623c7
commit ae042ce39e

View File

@@ -11,19 +11,29 @@ Controller.actors = require('./actors');
Controller.topics = require('./topics'); Controller.topics = require('./topics');
Controller.getFollowing = async (req, res) => { Controller.getFollowing = async (req, res) => {
const { followingCount: totalItems } = await user.getUserFields(req.params.uid, ['followingCount']); const { followingCount, followingRemoteCount } = await user.getUserFields(req.params.uid, ['followingCount', 'followingRemoteCount']);
const totalItems = parseInt(followingCount || 0, 10) + parseInt(followingRemoteCount || 0, 10);
let orderedItems; let orderedItems;
let next = (totalItems && `${nconf.get('url')}/uid/${req.params.uid}/following?page=`) || null;
if (req.query.page) { if (totalItems) {
const page = parseInt(req.query.page, 10) || 1; if (req.query.page) {
const resultsPerPage = 50; const page = parseInt(req.query.page, 10) || 1;
const start = Math.max(0, page - 1) * resultsPerPage; const resultsPerPage = 50;
const stop = start + resultsPerPage - 1; const start = Math.max(0, page - 1) * resultsPerPage;
const stop = start + resultsPerPage - 1;
orderedItems = await user.getFollowing(req.params.uid, start, stop); orderedItems = await user.getFollowing(req.params.uid, start, stop);
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`); orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
} else { if (stop < totalItems - 1) {
orderedItems = []; next = `${next}${page + 1}`;
} else {
next = null;
}
} else {
orderedItems = [];
next = `${next}1`;
}
} }
res.status(200).json({ res.status(200).json({
@@ -31,24 +41,34 @@ Controller.getFollowing = async (req, res) => {
type: 'OrderedCollection', type: 'OrderedCollection',
totalItems, totalItems,
orderedItems, orderedItems,
// next, todo... next,
}); });
}; };
Controller.getFollowers = async (req, res) => { Controller.getFollowers = async (req, res) => {
const { followerCount: totalItems } = await user.getUserFields(req.params.uid, ['followerCount']); const { followerCount, followerRemoteCount } = await user.getUserFields(req.params.uid, ['followerCount', 'followerRemoteCount']);
let orderedItems; 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 (req.query.page) { if (totalItems) {
const page = parseInt(req.query.page, 10) || 1; if (req.query.page) {
const resultsPerPage = 50; const page = parseInt(req.query.page, 10) || 1;
const start = Math.max(0, page - 1) * resultsPerPage; const resultsPerPage = 50;
const stop = start + resultsPerPage - 1; const start = Math.max(0, page - 1) * resultsPerPage;
const stop = start + resultsPerPage - 1;
orderedItems = await user.getFollowers(req.params.uid, start, stop); orderedItems = await user.getFollowers(req.params.uid, start, stop);
orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`); orderedItems = orderedItems.map(({ userslug }) => `${nconf.get('url')}/user/${userslug}`);
} else { if (stop < totalItems - 1) {
orderedItems = []; next = `${next}${page + 1}`;
} else {
next = null;
}
} else {
orderedItems = [];
next = `${next}1`;
}
} }
res.status(200).json({ res.status(200).json({
@@ -56,7 +76,7 @@ Controller.getFollowers = async (req, res) => {
type: 'OrderedCollection', type: 'OrderedCollection',
totalItems, totalItems,
orderedItems, orderedItems,
// next, todo... next,
}); });
}; };