Files
libredesk/internal/user/queries.sql
T
2025-01-10 04:08:00 +05:30

110 lines
3.1 KiB
SQL

-- name: get-users
SELECT u.id, u.updated_at, u.first_name, u.last_name, u.email, u.disabled
FROM users u
WHERE u.email != 'System' AND u.deleted_at IS NULL AND u.type = 'agent'
ORDER BY u.updated_at DESC;
-- name: soft-delete-user
UPDATE users
SET deleted_at = now()
WHERE id = $1 AND type = 'agent';
-- name: get-users-compact
SELECT u.id, u.first_name, u.last_name, u.disabled
FROM users u
WHERE u.email != 'System' AND u.deleted_at IS NULL AND u.type = 'agent'
ORDER BY u.updated_at DESC;
-- name: get-email
SELECT email
FROM users
WHERE id = $1 AND deleted_at IS NULL AND type = 'agent';
-- 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 AND u.deleted_at IS NULL AND u.type = 'agent';
-- 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, 'emoji', t.emoji))
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
u.id = $1 AND u.deleted_at IS NULL AND u.type = 'agent';
-- name: set-user-password
UPDATE users
SET password = $1, updated_at = now()
WHERE id = $2 AND type = 'agent';
-- 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),
password = COALESCE($7, password),
updated_at = now()
WHERE id = $1 AND type = 'agent';
-- name: update-avatar
UPDATE users
SET avatar_url = $2, updated_at = now()
WHERE id = $1 AND type = 'agent';
-- name: get-permissions
SELECT unnest(r.permissions)
FROM users u
JOIN roles r ON r.name = ANY(u.roles)
WHERE u.id = $1 AND u.type = 'agent';
-- name: set-reset-password-token
UPDATE users
SET reset_password_token = $2, reset_password_token_expiry = now() + interval '1 day'
WHERE id = $1 AND type = 'agent';
-- name: reset-password
UPDATE users
SET password = $1, reset_password_token = NULL, reset_password_token_expiry = NULL
WHERE reset_password_token = $2 AND reset_password_token_expiry > now() AND type = 'agent';
-- name: insert-agent
INSERT INTO users (email, type, first_name, last_name, "password", avatar_url, roles)
VALUES ($1, 'agent', $2, $3, $4, $5, $6)
RETURNING id;
-- name: insert-contact
WITH contact AS (
INSERT INTO users (email, type, first_name, last_name, "password", avatar_url, roles)
VALUES ($1, 'contact', $2, $3, $4, $5, $6)
ON CONFLICT (email, type)
DO UPDATE SET updated_at = now()
RETURNING id
)
INSERT INTO contact_channels (contact_id, inbox_id, identifier)
VALUES ((SELECT id FROM contact), $7, $8)
ON CONFLICT (contact_id, inbox_id) DO UPDATE SET updated_at = now()
RETURNING contact_id, id;