Files
libredesk/internal/user/queries.sql
T
Abhinav Raut 06db29f7f3 refactor.
2024-08-11 03:52:05 +05:30

86 lines
1.7 KiB
SQL

-- name: get-users
SELECT u.id, u.updated_at, u.first_name, u.last_name, u.email, u.disabled
FROM users u
ORDER BY u.updated_at DESC;
-- name: get-email
SELECT email from users where id = $1;
-- name: get-user-by-email
SELECT u.id, u.email, u.password, u.avatar_url, u.first_name, u.last_name, r.permissions
FROM users u
JOIN roles r ON r.name = ANY(u.roles)
WHERE u.email = $1;
-- name: get-user
WITH user_data AS (
SELECT
u.id,
u.email,
u.avatar_url,
u.first_name,
u.last_name,
u.roles
FROM
users u
WHERE
CASE
WHEN $1 > 0 THEN u.id = $1
ELSE u.uuid = $2
END
)
SELECT
u.id,
u.email,
u.avatar_url,
u.first_name,
u.last_name,
u.roles,
COALESCE(
ARRAY(
SELECT DISTINCT t.name
FROM teams t
JOIN team_members tm ON t.id = tm.team_id
WHERE tm.user_id = u.id
),
'{}'
) AS teams,
COALESCE(
ARRAY(
SELECT DISTINCT unnest(r.permissions)
FROM roles r
WHERE r.name = ANY(u.roles)
),
ARRAY[]::text[]
) AS permissions
FROM
user_data u;
-- name: set-user-password
update users set password = $1, updated_at = now() where id = $2;
-- name: create-user
INSERT INTO users
(email, first_name, last_name, "password", avatar_url, roles)
VALUES($1, $2, $3, $4, $5, $6)
RETURNING id;
-- name: update-user
UPDATE users
SET first_name = COALESCE($2, first_name),
last_name = COALESCE($3, last_name),
email = COALESCE($4, email),
roles = COALESCE($5, roles),
avatar_url = COALESCE($6, avatar_url),
updated_at = now()
WHERE id = $1
-- name: update-avatar
UPDATE users
SET avatar_url = $2 WHERE id = $1;
-- name: get-permissions
SELECT unnest(r.permissions)
FROM users u
JOIN roles r ON r.name = ANY(u.roles)
WHERE u.id = $1