projectx/internal/db/query/sys_user.sql
2025-03-31 11:59:42 +08:00

80 lines
2.1 KiB
SQL

-- name: CreateSysUser :one
INSERT INTO sys_user (
uuid,
email,
username,
hashed_password,
salt,
avatar,
gender,
department_id,
role_id,
status,
change_password_at,
created_at,
updated_at
) VALUES (
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13
) RETURNING *;
-- name: UpdateSysUser :one
UPDATE sys_user
SET username = $2,
hashed_password = $3,
avatar = $4,
gender = $5,
department_id = $6,
role_id = $7,
status = $8,
change_password_at = $9,
updated_at = $10
WHERE id = $1
RETURNING *;
-- name: GetSysUser :one
SELECT * FROM sys_user
WHERE id = $1 LIMIT 1;
-- name: GetSysUserByEmail :one
SELECT * FROM sys_user
WHERE email = $1 LIMIT 1;
-- name: CountSysUser :one
SELECT COUNT(*) FROM sys_user
WHERE status = 0;
-- name: ListSysUser :many
SELECT * FROM sys_user
WHERE status = 0
ORDER BY created_at DESC;
-- name: CountSysUserCondition :one
SELECT COUNT(*) FROM sys_user
WHERE (NOT @is_status::Boolean OR status = @status)
AND (NOT @is_id::Boolean OR id = @id)
AND (@username::text = '' OR username ILIKE '%' || @username || '%')
AND (@email::text = '' OR email ILIKE '%' || @email || '%');
-- name: ListSysUserCondition :many
SELECT id, uuid, email, username, avatar, gender, department_id, role_id, status, change_password_at, created_at, updated_at,
(SELECT name FROM sys_department WHERE ID = sys_user.department_id) AS department_name,
(SELECT display_name
FROM sys_role
WHERE id = sys_user.role_id) AS role_name
FROM sys_user
WHERE (NOT @is_status::Boolean OR sys_user.status = @status)
AND (NOT @is_id::Boolean OR sys_user.id = @id)
AND (@username::text = '' OR sys_user.username ILIKE '%' || @username || '%')
AND (@email::text = '' OR sys_user.email ILIKE '%' || @email || '%')
ORDER BY created_at DESC
OFFSET @skip
LIMIT @size;
-- name: ExistsSysUser :one
SELECT EXISTS (
SELECT 1 FROM sys_user
);
-- name: ListSysUserByIds :many
SELECT * FROM sys_user
WHERE id = ANY($1::int[]);