feat: release v1.0.0
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
-- name: CreateCategory :exec
|
||||
INSERT INTO categories(name, code)
|
||||
VALUES ($1, $2);
|
||||
INSERT INTO categories(name, code, sort)
|
||||
VALUES ($1, $2, $3);
|
||||
|
||||
-- name: ListCategories :many
|
||||
SELECT *
|
||||
FROM categories
|
||||
ORDER BY id LIMIT $1
|
||||
OFFSET $2;
|
||||
ORDER BY sort DESC, id
|
||||
LIMIT $1 OFFSET $2;
|
||||
|
||||
-- name: CountCategories :one
|
||||
SELECT COUNT(*)
|
||||
@@ -14,17 +14,14 @@ FROM categories;
|
||||
|
||||
-- name: ListAllCategories :many
|
||||
SELECT *
|
||||
FROM categories;
|
||||
|
||||
-- name: GetCategoryById :one
|
||||
SELECT *
|
||||
FROM categories
|
||||
WHERE id = $1;
|
||||
ORDER BY sort DESC, id;
|
||||
|
||||
-- name: UpdateCategory :execrows
|
||||
UPDATE categories
|
||||
SET name = coalesce(sqlc.narg('name'), name),
|
||||
code = coalesce(sqlc.narg('code'), code)
|
||||
code = coalesce(sqlc.narg('code'), code),
|
||||
sort = coalesce(sqlc.narg('sort'), sort)
|
||||
WHERE id = sqlc.arg('id');
|
||||
|
||||
-- name: DeleteCategory :execrows
|
||||
@@ -36,7 +33,12 @@ WHERE id = $1;
|
||||
INSERT INTO post_category(post_id, category_id)
|
||||
VALUES ($1, $2);
|
||||
|
||||
-- name: DeletePostCategory :exec
|
||||
-- name: DeletePostCategoryByPostID :exec
|
||||
DELETE
|
||||
FROM post_category
|
||||
WHERE post_id = $1;
|
||||
WHERE post_id = $1;
|
||||
|
||||
-- name: DeletePostCategoryByCategoryID :exec
|
||||
DELETE
|
||||
FROM post_category
|
||||
WHERE category_id = $1;
|
||||
@@ -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;
|
||||
@@ -6,12 +6,16 @@ RETURNING id;
|
||||
-- name: GetSysApis :many
|
||||
SELECT *
|
||||
FROM sys_apis
|
||||
WHERE (sqlc.arg('group_name')::text = '' OR group_name ILIKE '%' || sqlc.arg('group_name') || '%')
|
||||
AND (sqlc.arg('method')::text = '' OR method = sqlc.arg('method'))
|
||||
ORDER BY id
|
||||
LIMIT $1 OFFSET $2;
|
||||
|
||||
-- name: CountSysApis :one
|
||||
SELECT COUNT(*)
|
||||
FROM sys_apis;
|
||||
FROM sys_apis
|
||||
WHERE (sqlc.arg('group_name')::text = '' OR group_name ILIKE '%' || sqlc.arg('group_name') || '%')
|
||||
AND (sqlc.arg('method')::text = '' OR method = sqlc.arg('method'));
|
||||
|
||||
-- name: GetSysApiByID :one
|
||||
SELECT *
|
||||
@@ -41,13 +45,6 @@ DELETE
|
||||
FROM sys_api_permission
|
||||
WHERE api_id = $1;
|
||||
|
||||
-- name: DeleteSysPermissionBySysApiID :exec
|
||||
DELETE
|
||||
FROM sys_permissions
|
||||
WHERE id IN (SELECT permission_id
|
||||
FROM sys_api_permission
|
||||
WHERE api_id = $1);
|
||||
|
||||
-- name: GetSysApiGroupNames :many
|
||||
SELECT DISTINCT group_name
|
||||
FROM sys_apis;
|
||||
@@ -38,7 +38,7 @@ SET name = coalesce(sqlc.narg('name'), name),
|
||||
hidden = coalesce(sqlc.narg('hidden'), hidden),
|
||||
sort = coalesce(sqlc.narg('sort'), sort),
|
||||
status = coalesce(sqlc.narg('status'), status),
|
||||
icon = coalesce(sqlc.narg('icon'), status),
|
||||
icon = CASE WHEN @update_icon::boolean THEN @icon ELSE icon END,
|
||||
parent_id = CASE WHEN @update_parent_id::boolean THEN @parent_id ELSE parent_id END
|
||||
WHERE id = sqlc.arg('id');
|
||||
|
||||
@@ -12,3 +12,12 @@ DELETE
|
||||
FROM sys_permissions
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: GetSysPermissionIDBySysApiID :one
|
||||
SELECT permission_id
|
||||
FROM sys_api_permission
|
||||
WHERE api_id = $1;
|
||||
|
||||
-- name: GetSysPermissionIDBySysMenuID :one
|
||||
SELECT permission_id
|
||||
FROM sys_menu_permission
|
||||
WHERE menu_id = $1;
|
||||
@@ -1,6 +1,6 @@
|
||||
-- name: CreateSysRole :exec
|
||||
INSERT INTO sys_roles (name, code)
|
||||
VALUES ($1, $2);
|
||||
INSERT INTO sys_roles (name, code, status)
|
||||
VALUES ($1, $2, $3);
|
||||
|
||||
-- name: ListSysRoles :many
|
||||
SELECT *
|
||||
@@ -28,7 +28,8 @@ SELECT EXISTS(SELECT 1
|
||||
|
||||
-- name: UpdateSysRole :execrows
|
||||
UPDATE sys_roles
|
||||
SET name = coalesce(sqlc.narg('name'), name)
|
||||
SET name = coalesce(sqlc.narg('name'), name),
|
||||
status = coalesce(sqlc.narg('status'), status)
|
||||
WHERE id = sqlc.arg('id');
|
||||
|
||||
-- name: DeleteSysRole :execrows
|
||||
@@ -68,9 +69,24 @@ FROM sys_role_permission rp
|
||||
JOIN sys_apis a ON a.id = ap.api_id
|
||||
WHERE rp.role_id = $1;
|
||||
|
||||
-- name: DeleteSysRolePermission :exec
|
||||
-- name: DeleteSysRolePermissionByType :exec
|
||||
DELETE
|
||||
FROM sys_role_permission rp USING sys_permissions p
|
||||
WHERE rp.permission_id = p.id
|
||||
AND p."type" = $2
|
||||
AND rp.role_id = $1;
|
||||
AND rp.role_id = $1
|
||||
AND p."type" = $2;
|
||||
|
||||
-- name: DeleteSysRolePermissionByRoleID :exec
|
||||
DELETE
|
||||
FROM sys_role_permission
|
||||
WHERE role_id = $1;
|
||||
|
||||
-- name: DeleteSysRolePermissionByPermissionID :exec
|
||||
DELETE
|
||||
FROM sys_role_permission
|
||||
WHERE permission_id = $1;
|
||||
|
||||
-- name: DeleteSysUserRoleByRoleID :exec
|
||||
DELETE
|
||||
FROM sys_user_role
|
||||
WHERE role_id = $1;
|
||||
@@ -1,12 +1,20 @@
|
||||
-- name: CreateSysUser :exec
|
||||
INSERT INTO sys_users (account, username, password_hash, avatar_id)
|
||||
VALUES ($1, $2, $3, $4);
|
||||
INSERT INTO sys_users (account, username, password_hash, status, avatar_id)
|
||||
VALUES ($1, $2, $3, $4, $5);
|
||||
|
||||
-- name: GetActiveSysUserByID :one
|
||||
-- 场景:用户登录、获取个人信息、刷新 Token(严格校验 status = 1)
|
||||
SELECT id, account, username, status
|
||||
FROM sys_users
|
||||
WHERE id = $1
|
||||
AND status = 1;
|
||||
|
||||
-- name: GetSysUserByID :one
|
||||
SELECT u.id,
|
||||
u.account,
|
||||
u.username,
|
||||
u.avatar_id,
|
||||
u.status,
|
||||
f.file_path AS avatar_url,
|
||||
u.created_at,
|
||||
u.updated_at
|
||||
@@ -19,6 +27,7 @@ SELECT u.id,
|
||||
u.account,
|
||||
u.username,
|
||||
u.password_hash,
|
||||
u.status,
|
||||
u.avatar_id,
|
||||
f.file_path AS avatar_url,
|
||||
u.created_at,
|
||||
@@ -31,22 +40,26 @@ WHERE u.account = $1;
|
||||
SELECT u.id,
|
||||
u.account,
|
||||
u.username,
|
||||
u.status,
|
||||
u.avatar_id,
|
||||
f.file_path AS avatar_url,
|
||||
u.created_at,
|
||||
u.updated_at
|
||||
FROM sys_users u
|
||||
LEFT JOIN files f ON u.avatar_id = f.id
|
||||
WHERE (sqlc.arg('username')::text = '' OR u.username ILIKE '%' || sqlc.arg('username') || '%')
|
||||
ORDER BY u.id
|
||||
LIMIT $1 OFFSET $2;
|
||||
|
||||
-- name: CountSysUsers :one
|
||||
SELECT COUNT(*)
|
||||
FROM sys_users;
|
||||
FROM sys_users
|
||||
WHERE (sqlc.arg('username')::text = '' OR username ILIKE '%' || sqlc.arg('username') || '%');
|
||||
|
||||
-- name: UpdateSysUser :execrows
|
||||
UPDATE sys_users
|
||||
SET username = coalesce(sqlc.narg('username'), username),
|
||||
status = coalesce(sqlc.narg('status'), status),
|
||||
avatar_id = CASE WHEN @update_avatar_id::boolean THEN @avatar_id ELSE avatar_id END
|
||||
WHERE id = sqlc.arg('id');
|
||||
|
||||
@@ -66,7 +79,7 @@ DELETE
|
||||
FROM sys_user_role
|
||||
WHERE user_id = $1;
|
||||
|
||||
-- name: CreateSysUserRole :exec
|
||||
-- name: CreateSysUserRole :copyfrom
|
||||
INSERT INTO sys_user_role (user_id, role_id)
|
||||
VALUES ($1, $2);
|
||||
|
||||
@@ -79,19 +92,44 @@ WHERE ur.user_id = $1;
|
||||
-- name: GetSysAdminMenus :many
|
||||
SELECT *
|
||||
FROM sys_menus
|
||||
WHERE status = 1
|
||||
AND type <> 2
|
||||
ORDER BY sort, id;
|
||||
|
||||
-- name: GetSysAdminPermissions :many
|
||||
SELECT code
|
||||
FROM sys_permissions
|
||||
WHERE type = 0;
|
||||
|
||||
-- name: GetSysUserMenus :many
|
||||
SELECT DISTINCT m.*
|
||||
FROM sys_users u
|
||||
JOIN sys_user_role ur ON ur.user_id = u.id
|
||||
JOIN sys_roles r ON r.id = ur.role_id
|
||||
JOIN sys_role_permission rp ON rp.role_id = r.id
|
||||
JOIN sys_menu_permission mp ON mp.permission_id = rp.permission_id
|
||||
JOIN sys_menus m ON m.id = mp.menu_id
|
||||
WHERE u.id = $1
|
||||
AND u.status = 1
|
||||
AND r.status = 1
|
||||
AND m.status = 1
|
||||
AND m.type <> 2
|
||||
ORDER BY m.sort, m.id;
|
||||
|
||||
-- name: GetSysUserPermissions :many
|
||||
SELECT DISTINCT p.code
|
||||
FROM sys_users u
|
||||
JOIN sys_user_role ur ON u.id = ur.user_id
|
||||
JOIN sys_roles r on r.id = ur.role_id
|
||||
JOIN sys_role_permission rp ON rp.role_id = r.id
|
||||
JOIN sys_permissions p ON p.id = rp.permission_id
|
||||
JOIN sys_menu_permission mp ON mp.permission_id = p.id
|
||||
JOIN sys_menus m ON m.id = mp.menu_id
|
||||
WHERE u.id = $1
|
||||
ORDER BY m.sort, m.id;
|
||||
AND u.status = 1
|
||||
AND r.status = 1
|
||||
AND m.status = 1
|
||||
AND p."type" = 0;
|
||||
|
||||
-- name: GetSysUserApis :many
|
||||
SELECT DISTINCT a.id,
|
||||
@@ -99,9 +137,10 @@ SELECT DISTINCT a.id,
|
||||
a.METHOD
|
||||
FROM sys_users u
|
||||
JOIN sys_user_role ur ON u.id = ur.user_id
|
||||
JOIN sys_role_permission rp ON rp.role_id = ur.role_id
|
||||
JOIN sys_permissions p ON p.id = rp.permission_id
|
||||
AND p.TYPE = 1
|
||||
JOIN sys_api_permission ap ON ap.permission_id = p.id
|
||||
JOIN sys_roles r ON r.id = ur.role_id
|
||||
JOIN sys_role_permission rp ON rp.role_id = r.id
|
||||
JOIN sys_api_permission ap ON ap.permission_id = rp.permission_id
|
||||
JOIN sys_apis a ON a.id = ap.api_id
|
||||
WHERE u.id = $1;
|
||||
WHERE u.id = $1
|
||||
AND u.status = 1
|
||||
AND r.status = 1;
|
||||
44
internal/db/query/tags.sql
Normal file
44
internal/db/query/tags.sql
Normal file
@@ -0,0 +1,44 @@
|
||||
-- name: ListTags :many
|
||||
SELECT *
|
||||
FROM tags
|
||||
ORDER BY sort DESC, id
|
||||
LIMIT $1 OFFSET $2;
|
||||
|
||||
-- name: CountTags :one
|
||||
SELECT COUNT(*)
|
||||
FROM tags;
|
||||
|
||||
-- name: ListAllTags :many
|
||||
SELECT *
|
||||
FROM tags
|
||||
ORDER BY sort DESC, id;
|
||||
|
||||
-- name: CreateTag :exec
|
||||
INSERT INTO tags(name, code, sort)
|
||||
VALUES ($1, $2, $3);
|
||||
|
||||
-- name: UpdateTag :execrows
|
||||
UPDATE tags
|
||||
SET name = coalesce(sqlc.narg('name'), name),
|
||||
code = coalesce(sqlc.narg('code'), code),
|
||||
sort = coalesce(sqlc.narg('sort'), sort)
|
||||
WHERE id = sqlc.arg('id');
|
||||
|
||||
-- name: DeleteTag :execrows
|
||||
DELETE
|
||||
FROM tags
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: CreatePostTag :copyfrom
|
||||
INSERT INTO post_tag(post_id, tag_id)
|
||||
values ($1, $2);
|
||||
|
||||
-- name: DeletePostTagByPostID :exec
|
||||
DELETE
|
||||
FROM post_tag
|
||||
WHERE post_id = $1;
|
||||
|
||||
-- name: DeletePostTagByTagID :exec
|
||||
DELETE
|
||||
FROM post_tag
|
||||
WHERE tag_id = $1;
|
||||
Reference in New Issue
Block a user