Render reply trees with permission-aware inline controls, and move hunt, profile, voting, submission, and hiding flows to post storage.
This commit is contained in:
@@ -44,6 +44,16 @@ FROM thread
|
||||
JOIN users u ON u.id = thread.author_id
|
||||
ORDER BY thread.created_at, thread.id;
|
||||
|
||||
-- name: GetRootPostVoteSummary :one
|
||||
SELECT
|
||||
COALESCE(SUM(value), 0)::bigint AS score,
|
||||
COALESCE(
|
||||
MAX(value) FILTER (WHERE user_id = sqlc.arg(viewer_id)),
|
||||
0
|
||||
)::bigint AS user_vote
|
||||
FROM post_votes
|
||||
WHERE post_id = sqlc.arg(root_id);
|
||||
|
||||
-- name: UpdatePost :execrows
|
||||
UPDATE posts
|
||||
SET
|
||||
@@ -51,6 +61,14 @@ SET
|
||||
updated_at = sqlc.arg(updated_at)
|
||||
WHERE id = sqlc.arg(id);
|
||||
|
||||
-- name: UpdateRootPostState :execrows
|
||||
UPDATE posts
|
||||
SET
|
||||
post_state = sqlc.arg(post_state),
|
||||
updated_at = sqlc.arg(updated_at)
|
||||
WHERE id = sqlc.arg(id)
|
||||
AND parent_id IS NULL;
|
||||
|
||||
-- name: ListRootPosts :many
|
||||
WITH RECURSIVE roots AS (
|
||||
SELECT p.*
|
||||
@@ -100,6 +118,46 @@ LEFT JOIN post_votes viewer_vote
|
||||
ORDER BY score DESC, roots.created_at, roots.id
|
||||
LIMIT sqlc.arg(row_limit);
|
||||
|
||||
-- name: ListRootPostsByAuthor :many
|
||||
SELECT
|
||||
p.id, p.parent_id, p.author_id,
|
||||
u.name AS author_name, u.role AS author_role,
|
||||
p.title, p.body, p.city, p.post_date,
|
||||
p.post_state, p.created_at, p.updated_at
|
||||
FROM posts p
|
||||
JOIN users u ON u.id = p.author_id
|
||||
WHERE p.parent_id IS NULL
|
||||
AND p.author_id = sqlc.arg(author_id)
|
||||
AND p.post_state <> sqlc.arg(hidden_state)
|
||||
ORDER BY p.created_at DESC, p.id DESC
|
||||
LIMIT sqlc.arg(row_limit);
|
||||
|
||||
-- name: ListRootPostsAnsweredBy :many
|
||||
WITH RECURSIVE ancestors AS (
|
||||
SELECT p.id, p.parent_id
|
||||
FROM posts p
|
||||
WHERE p.author_id = sqlc.arg(admin_id)
|
||||
AND p.parent_id IS NOT NULL
|
||||
|
||||
UNION
|
||||
|
||||
SELECT parent.id, parent.parent_id
|
||||
FROM posts parent
|
||||
JOIN ancestors child ON child.parent_id = parent.id
|
||||
)
|
||||
SELECT DISTINCT
|
||||
root.id, root.parent_id, root.author_id,
|
||||
u.name AS author_name, u.role AS author_role,
|
||||
root.title, root.body, root.city, root.post_date,
|
||||
root.post_state, root.created_at, root.updated_at
|
||||
FROM posts root
|
||||
JOIN ancestors ON ancestors.id = root.id
|
||||
JOIN users u ON u.id = root.author_id
|
||||
WHERE root.parent_id IS NULL
|
||||
AND root.post_state <> sqlc.arg(hidden_state)
|
||||
ORDER BY root.created_at DESC, root.id DESC
|
||||
LIMIT sqlc.arg(row_limit);
|
||||
|
||||
-- name: PostIsVisibleRoot :one
|
||||
SELECT EXISTS(
|
||||
SELECT 1
|
||||
|
||||
Reference in New Issue
Block a user