From d0356edef4dc0a14304b8890e8152911740ff87a Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Thu, 28 Nov 2024 18:00:50 +0200 Subject: Added position to networks --- query/users_networks.sql | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 query/users_networks.sql (limited to 'query/users_networks.sql') diff --git a/query/users_networks.sql b/query/users_networks.sql new file mode 100644 index 0000000..f467753 --- /dev/null +++ b/query/users_networks.sql @@ -0,0 +1,52 @@ +-- name: GetNetworkBannedUsers :many +SELECT + sqlc.embed(users), + users_networks.ban_reason +FROM users_networks +JOIN users ON users.id = users_networks.user_id +WHERE users_networks.network_id = ?; + +-- name: GetNetworkMembers :many +SELECT + sqlc.embed(users), + users_networks.joined_at, + users_networks.is_admin, + users_networks.is_muted +FROM users_networks +JOIN users ON users.id = users_networks.user_id +WHERE users_networks.network_id = ? AND is_member = true; + +-- name: GetUserNetworks :many +SELECT sqlc.embed(networks), users_networks.position FROM networks +JOIN users_networks ON networks.id = users_networks.network_id +WHERE users_networks.user_id = ? +ORDER BY users_networks.position; + +-- name: SetNetworkUser :one +INSERT INTO users_networks ( + user_id, network_id, + is_member, is_admin, is_muted, + is_banned, ban_reason, position +) VALUES ( + @user_id, @network_id, + @is_member, @is_admin, @is_muted, + @is_banned, @ban_reason, + CASE + WHEN @is_member = false THEN NULL + ELSE (SELECT COUNT(*) FROM users_networks WHERE user_id = @user_id) + END +) +ON CONFLICT DO +UPDATE SET + is_member = EXCLUDED.is_member, is_admin = EXCLUDED.is_admin, is_muted = EXCLUDED.is_muted, + is_banned = EXCLUDED.is_banned, ban_reason = EXCLUDED.ban_reason, position = EXCLUDED.position +WHERE user_id = EXCLUDED.user_id AND network_id = EXCLUDED.network_id +RETURNING *; + +-- name: SwapUserNetworks :exec +UPDATE users_networks SET + position = CASE + WHEN position = @pos1 THEN @pos2 + WHEN position = @pos2 THEN @pos1 + END +WHERE user_id = @user_id AND position IN (@pos1, @pos2); -- cgit v1.3.1