146 lines
3.8 KiB
SQL
146 lines
3.8 KiB
SQL
-- name: CreateSysUser :exec
|
||
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
|
||
FROM sys_users u
|
||
LEFT JOIN files f ON u.avatar_id = f.id
|
||
WHERE u.id = $1;
|
||
|
||
-- name: GetSysUserByAccount :one
|
||
SELECT u.id,
|
||
u.account,
|
||
u.username,
|
||
u.password_hash,
|
||
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 u.account = $1;
|
||
|
||
-- name: ListSysUsers :many
|
||
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
|
||
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');
|
||
|
||
-- name: UpdateSysUserPassword :execrows
|
||
UPDATE sys_users
|
||
SET password_hash = $2
|
||
WHERE id = $1;
|
||
|
||
-- name: DeleteSysUser :execrows
|
||
DELETE
|
||
FROM sys_users
|
||
WHERE id = $1
|
||
AND id <> 1;
|
||
|
||
-- name: ClearSysUserRoles :exec
|
||
DELETE
|
||
FROM sys_user_role
|
||
WHERE user_id = $1;
|
||
|
||
-- name: CreateSysUserRole :copyfrom
|
||
INSERT INTO sys_user_role (user_id, role_id)
|
||
VALUES ($1, $2);
|
||
|
||
-- name: GetSysUserRoles :many
|
||
SELECT r.*
|
||
FROM sys_roles r
|
||
JOIN sys_user_role ur ON r.id = ur.role_id
|
||
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
|
||
AND u.status = 1
|
||
AND r.status = 1
|
||
AND m.status = 1
|
||
AND p."type" = 0;
|
||
|
||
-- name: GetSysUserApis :many
|
||
SELECT DISTINCT a.id,
|
||
a.PATH,
|
||
a.METHOD
|
||
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_api_permission ap ON ap.permission_id = rp.permission_id
|
||
JOIN sys_apis a ON a.id = ap.api_id
|
||
WHERE u.id = $1
|
||
AND u.status = 1
|
||
AND r.status = 1; |