diff --git a/packages/app/src/models/user/index.js b/packages/app/src/models/user/index.js index f1a2f8be..ec5ca6a4 100755 --- a/packages/app/src/models/user/index.js +++ b/packages/app/src/models/user/index.js @@ -146,6 +146,44 @@ export default class User { return data } + static async getUserFollowers({ + user_id, + username, + limit = 20, + offset = 0, + }) { + if (!User.bridge) { + return false + } + + // if user_id or username is not provided, set with current user + if (!user_id && !username) { + const token = await Session.decodedToken() + + if (token) { + username = token.username + } else { + throw new Error("username or user_id is required") + } + } + + // TODO: if user_id is not provided, get it from username + if (!user_id) { + + } + + const { data } = await app.api.customRequest("main", { + method: "GET", + url: `/user/${user_id}/followers`, + params: { + limit, + offset, + } + }) + + return data + } + static async getConnectedUsersFollowing() { if (!User.bridge) { return false diff --git a/packages/server/src/controllers/FollowerController/index.js b/packages/server/src/controllers/FollowerController/index.js index b13aad12..34805c41 100644 --- a/packages/server/src/controllers/FollowerController/index.js +++ b/packages/server/src/controllers/FollowerController/index.js @@ -149,6 +149,29 @@ export default class FollowerController extends Controller { } get = { + "/user/:user_id/followers": async (req, res) => { + const { limit = 30, offset } = req.query + + let followers = [] + + const follows = await UserFollow.find({ + to: req.params.user_id, + }) + .limit(limit) + .skip(offset) + + for await (const follow of follows) { + const user = await User.findById(follow.user_id) + + if (!user) { + continue + } + + followers.push(user.toObject()) + } + + return res.json(followers) + }, "/followers": Schematized({ required: ["user_id"], select: ["user_id"],