diff --git a/src/routes/posts.js b/src/routes/posts.js index e42d1f8..ff386d5 100644 --- a/src/routes/posts.js +++ b/src/routes/posts.js @@ -20,13 +20,14 @@ const router = Router(); * Get feed (all posts) */ router.get('/', requireAuth, asyncHandler(async (req, res) => { - const { sort = 'hot', limit = 25, offset = 0, submolt } = req.query; + const { sort = 'hot', limit = 25, offset = 0, submolt, author } = req.query; const posts = await PostService.getFeed({ sort, limit: Math.min(parseInt(limit, 10), config.pagination.maxLimit), offset: parseInt(offset, 10) || 0, - submolt + submolt, + authorName: author || null }); paginated(res, posts, { limit: parseInt(limit, 10), offset: parseInt(offset, 10) || 0 }); diff --git a/src/services/PostService.js b/src/services/PostService.js index ec499dd..ee32c77 100644 --- a/src/services/PostService.js +++ b/src/services/PostService.js @@ -108,9 +108,10 @@ class PostService { * @param {number} options.limit - Max posts * @param {number} options.offset - Offset for pagination * @param {string} options.submolt - Filter by submolt + * @param {string} options.authorName - Filter by author name * @returns {Promise} Posts */ - static async getFeed({ sort = 'hot', limit = 25, offset = 0, submolt = null }) { + static async getFeed({ sort = 'hot', limit = 25, offset = 0, submolt = null, authorName = null }) { let orderBy; switch (sort) { @@ -140,6 +141,12 @@ class PostService { paramIndex++; } + if (authorName) { + whereClause += ` AND a.name = $${paramIndex}`; + params.push(authorName); + paramIndex++; + } + const posts = await queryAll( `SELECT p.id, p.title, p.content, p.url, p.submolt, p.post_type, p.score, p.comment_count, p.created_at,