feat: release v1.0.0
This commit is contained in:
@@ -18,18 +18,46 @@ WITH paginated_posts AS (
|
||||
updated_at
|
||||
FROM posts
|
||||
ORDER BY sort DESC, published_at DESC, id DESC
|
||||
LIMIT $1 OFFSET $2)
|
||||
LIMIT $1 OFFSET $2
|
||||
)
|
||||
-- 第二步:用这极少量的记录去进行 JOIN
|
||||
SELECT p.*,
|
||||
f.file_path AS cover,
|
||||
c.name AS category_name,
|
||||
c.id AS category_id,
|
||||
COALESCE(ps.view, 0) AS view
|
||||
COALESCE(ps.view, 0) AS view,
|
||||
COALESCE(
|
||||
jsonb_agg(
|
||||
jsonb_build_object(
|
||||
'id', t.id,
|
||||
'name', t.name,
|
||||
'code', t.code
|
||||
)
|
||||
ORDER BY t.sort DESC, t.id
|
||||
) FILTER (WHERE t.id IS NOT NULL),
|
||||
'[]'::jsonb
|
||||
) AS tags
|
||||
FROM paginated_posts p
|
||||
LEFT JOIN files f ON f.id = p.cover_id
|
||||
LEFT JOIN post_category pc ON pc.post_id = p.id
|
||||
LEFT JOIN categories c ON c.id = pc.category_id
|
||||
LEFT JOIN post_stats ps ON ps.post_id = p.id
|
||||
LEFT JOIN post_tag pt ON pt.post_id = p.id
|
||||
LEFT JOIN tags t ON t.id = pt.tag_id
|
||||
GROUP BY p.id,
|
||||
p.title,
|
||||
p.cover_id,
|
||||
p.slug,
|
||||
p.summary,
|
||||
p.status,
|
||||
p.sort,
|
||||
p.published_at,
|
||||
p.created_at,
|
||||
p.updated_at,
|
||||
f.file_path,
|
||||
c.name,
|
||||
c.id,
|
||||
ps.view
|
||||
ORDER BY p.sort DESC, p.published_at DESC, p.id DESC;
|
||||
|
||||
-- name: CountPosts :one
|
||||
@@ -40,12 +68,21 @@ FROM posts;
|
||||
SELECT p.*,
|
||||
f.file_path AS cover,
|
||||
c.name AS category_name,
|
||||
c.id AS category_id
|
||||
c.id AS category_id,
|
||||
COALESCE(
|
||||
array_agg(pt.tag_id ORDER BY pt.tag_id) FILTER (WHERE pt.tag_id IS NOT NULL),
|
||||
ARRAY[]::integer[]
|
||||
) AS tags
|
||||
FROM posts p
|
||||
LEFT JOIN files f ON f.id = p.cover_id
|
||||
LEFT JOIN post_category pc ON pc.post_id = p.id
|
||||
LEFT JOIN categories c ON c.id = pc.category_id
|
||||
LEFT JOIN post_tag pt ON pt.post_id = p.id
|
||||
WHERE p.id = $1
|
||||
GROUP BY p.id,
|
||||
f.file_path,
|
||||
c.name,
|
||||
c.id
|
||||
LIMIT 1;
|
||||
|
||||
-- name: UpdatePost :execrows
|
||||
@@ -98,12 +135,36 @@ SELECT p.*,
|
||||
f.file_path AS cover,
|
||||
c.name AS category_name,
|
||||
c.id AS category_id,
|
||||
COALESCE(ps.view, 0) AS view
|
||||
COALESCE(ps.view, 0) AS view,
|
||||
COALESCE(
|
||||
jsonb_agg(
|
||||
jsonb_build_object(
|
||||
'id', t.id,
|
||||
'name', t.name,
|
||||
'code', t.code
|
||||
)
|
||||
ORDER BY t.sort DESC, t.id
|
||||
) FILTER (WHERE t.id IS NOT NULL),
|
||||
'[]'::jsonb
|
||||
) AS tags
|
||||
FROM paginated_posts p
|
||||
LEFT JOIN files f ON f.id = p.cover_id
|
||||
LEFT JOIN post_category pc ON pc.post_id = p.id
|
||||
LEFT JOIN categories c ON c.id = pc.category_id
|
||||
LEFT JOIN post_stats ps ON ps.post_id = p.id
|
||||
LEFT JOIN post_tag pt ON pt.post_id = p.id
|
||||
LEFT JOIN tags t ON t.id = pt.tag_id
|
||||
GROUP BY p.id,
|
||||
p.title,
|
||||
p.cover_id,
|
||||
p.slug,
|
||||
p.summary,
|
||||
p.sort,
|
||||
p.published_at,
|
||||
f.file_path,
|
||||
c.name,
|
||||
c.id,
|
||||
ps.view
|
||||
ORDER BY p.sort DESC, p.published_at DESC, p.id DESC;
|
||||
|
||||
-- name: CountPublishedPosts :one
|
||||
@@ -142,4 +203,6 @@ FROM
|
||||
AND p.published_at < NOW()
|
||||
GROUP BY
|
||||
c.id,
|
||||
c.name;
|
||||
c.sort,
|
||||
c.name
|
||||
ORDER BY c.sort DESC, c.id;
|
||||
Reference in New Issue
Block a user