Skip to content

Commit

Permalink
refactor expanded post query and replies query
Browse files Browse the repository at this point in the history
  • Loading branch information
NasihNazeem authored and Dennull committed Jan 12, 2025
1 parent 6a52cb2 commit 654cfb4
Showing 1 changed file with 74 additions and 29 deletions.
103 changes: 74 additions & 29 deletions models/PostModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,49 +135,92 @@ const getPost = `
post_replies_reposts AS (
SELECT
"parentPostId",
COUNT(*)::INT AS "numberOfReplies",
COUNT(CASE WHEN "isRepost" = TRUE THEN 1 END) AS "numberOfReposts"
COUNT(CASE WHEN "isRepost" = FALSE AND "isQuotePost" = FALSE THEN 1 END)::INT AS "numberOfReplies",
COUNT(CASE WHEN "isRepost" = TRUE THEN 1 END)::INT AS "numberOfReposts"
FROM post
WHERE "parentPostId" IS NOT NULL
AND deleted = FALSE
GROUP BY "parentPostId"
)
),
post_metrics AS (
SELECT
p."postId",
COALESCE(l."numberOfLikes", 0) AS "numberOfLikes",
COALESCE(r."numberOfReplies", 0) AS "numberOfReplies",
COALESCE(r."numberOfReposts", 0) AS "numberOfReposts"
FROM post AS p
LEFT JOIN post_likes AS l ON p."postId" = l."postId"
LEFT JOIN post_replies_reposts AS r ON p."postId" = r."parentPostId"
WHERE p.deleted = FALSE
)
SELECT
p."postId",
u.username,
u."displayName",
p."parentPostId",
u.username AS "repostedUsername",
u."displayName" AS "repostedDisplayName",
COALESCE(p_parent."textContent", p."textContent") AS "textContent",
COALESCE(up.username, u.username) AS username,
COALESCE(up."displayName", u."displayName") AS "displayName",
u."userId",
p."textContent",
p.timestamp,
p."editedTimestamp",
EXISTS (
SELECT 1
FROM liked_post li
WHERE li."userId" = $1
AND li."postId" = p."postId"
LIMIT 1
) AS "isLikedByCurrentUser",
CASE
WHEN EXISTS (
SELECT 1
FROM follow WHERE "followerUserId" = $1
AND "followedUserId" = u."userId"
)
THEN TRUE
ELSE FALSE
END AS "followStatus",
COALESCE(l."numberOfLikes",0) AS "numberOfLikes",
COALESCE(r."numberOfReplies", 0) AS "numberOfReplies",
COALESCE(r."numberOfReposts", 0) AS "numberOfReposts"
p."isRepost",
p."isQuotePost",
EXISTS (
SELECT 1
FROM liked_post li
WHERE li."userId" = $1
AND li."postId" = COALESCE(p."parentPostId", p."postId")
LIMIT 1
) AS "isLikedByCurrentUser",
EXISTS (
SELECT 1
FROM post rp
WHERE (rp."parentPostId" = p."postId" OR rp."parentPostId" = p."parentPostId")
AND rp."isRepost" = TRUE
AND rp."userId" = $1
AND rp."deleted" = FALSE
LIMIT 1
) AS "isRepostedByCurrentUser",
COALESCE(
CASE
WHEN p."isRepost" = TRUE THEN pm."numberOfLikes"
ELSE lm."numberOfLikes"
END, 0
) AS "numberOfLikes",
COALESCE(
CASE
WHEN p."isRepost" = TRUE THEN pm."numberOfReplies"
ELSE lm."numberOfReplies"
END, 0
) AS "numberOfReplies",
COALESCE(
CASE
WHEN p."isRepost" = TRUE THEN pm."numberOfReposts"
ELSE lm."numberOfReposts"
END, 0
) AS "numberOfReposts"
FROM post AS p
LEFT JOIN post_metrics AS lm
ON p."postId" = lm."postId"
LEFT JOIN post_metrics AS pm
ON p."parentPostId" = pm."postId"
LEFT JOIN post AS p_parent
ON p."parentPostId" = p_parent."postId"
LEFT JOIN app_user AS up
ON p_parent."userId" = up."userId"
LEFT JOIN post_likes AS l
ON p."postId" = l."postId"
LEFT JOIN post_replies_reposts AS r
ON p."postId" = r."parentPostId"
INNER JOIN app_user AS u
ON p."userId" = u."userId"
WHERE p."postId" = $2
AND p."deleted" = FALSE;
AND p."deleted" = FALSE
AND (
p."parentPostId" IS NULL
OR (p."isRepost" = TRUE OR p."isQuotePost" = TRUE)
);
`;

const getReplies = `
Expand All @@ -192,7 +235,7 @@ const getReplies = `
post_replies_reposts AS (
SELECT
"parentPostId",
COUNT(*)::INT AS "numberOfReplies",
COUNT(CASE WHEN "isRepost" = FALSE AND "isQuotePost" = FALSE THEN 1 END)::INT AS "numberOfReplies",
COUNT(CASE WHEN "isRepost" = TRUE THEN 1 END) AS "numberOfReposts"
FROM post
WHERE "parentPostId" IS NOT NULL
Expand Down Expand Up @@ -226,8 +269,10 @@ const getReplies = `
INNER JOIN app_user AS u
ON p."userId" = u."userId"
WHERE p."parentPostId" = $2
AND p."deleted" = FALSE
WHERE p."deleted" = FALSE
AND p."parentPostId" = $2
AND p."isRepost" = FALSE
AND p."isQuotePost" = FALSE
ORDER BY "numberOfLikes" DESC, "timestamp" DESC;
`;

Expand Down

0 comments on commit 654cfb4

Please sign in to comment.