projectx/internal/db/query/sys_menu.sql
2025-03-21 11:05:42 +08:00

97 lines
2.3 KiB
SQL

-- name: CreateSysMenu :one
INSERT INTO sys_menu (
name,
display_name,
url,
type,
parent_id,
parent_path,
avatar,
style,
visible,
is_list,
status,
sort,
created_at,
updated_at
) VALUES (
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14
) RETURNING *;
-- name: UpdateSysMenu :one
UPDATE sys_menu
SET name = $2,
display_name = $3,
url = $4,
type = $5,
parent_id = $6,
parent_path = $7,
avatar = $8,
style = $9,
visible = $10,
is_list = $11,
status = $12,
sort = $13,
updated_at = $14
WHERE id = $1
RETURNING *;
-- name: GetSysMenu :one
SELECT * FROM sys_menu
WHERE id = $1 LIMIT 1;
-- name: GetSysMenuByUrl :one
SELECT * FROM sys_menu
WHERE url = $1 LIMIT 1;
-- name: AllSysMenu :many
SELECT * FROM sys_menu
WHERE status = 0
ORDER BY sort DESC;
-- name: ListSysMenuByRoleID :many
SELECT * FROM sys_menu
WHERE id IN (SELECT menu_id
FROM sys_role_menu
WHERE role_id = $1);
-- name: ListSysMenuIDByRoleID :many
SELECT menu_id
FROM sys_role_menu
WHERE role_id = $1;
-- name: ExistsMenu :one
SELECT EXISTS (
SELECT 1 FROM sys_menu
);
-- name: RecursiveSysMenus :many
WITH RECURSIVE dist AS (SELECT sys_menu.*
FROM sys_menu
WHERE status = 0
AND is_list = true
UNION ALL
SELECT sys_menu.*
FROM sys_menu,
dist
WHERE sys_menu.id = dist.parent_id)
SELECT *
FROM dist
ORDER BY dist.sort DESC, dist.id ASC;
-- name: RecursiveSysMenusByRoleID :many
WITH RECURSIVE dist AS (SELECT sys_menu.*
FROM sys_menu
WHERE status = 0
AND is_list = true
AND id IN (SELECT menu_id
FROM sys_role_menu
WHERE role_id = $1)
UNION ALL
SELECT sys_menu.*
FROM sys_menu,
dist
WHERE sys_menu.id = dist.parent_id)
SELECT *
FROM dist
ORDER BY dist.sort DESC, dist.id ASC;