Files
libredesk/internal/user/queries.sql
T
Abhinav Raut 0e84fac099 feat: ACL and ABAC
- Simplify ws package.
2024-09-19 04:17:03 +05:30

74 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
SELECT
u.id,
u.email,
u.avatar_url,
u.first_name,
u.last_name,
u.roles,
COALESCE(
(SELECT json_agg(json_build_object('id', t.id, 'name', t.name))
FROM team_members tm
JOIN teams t ON tm.team_id = t.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
users u
WHERE
CASE
WHEN $1 > 0 THEN u.id = $1
ELSE u.uuid = $2
END;
-- 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