-- 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