Skip to content

Commit 2b3c417

Browse files
committed
refactor: SQL query for bulk user traffic updates
1 parent 13acc74 commit 2b3c417

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

src/modules/users/builders/bulk-update-user-used-traffic/bulk-update-user-used-traffic.builder.ts

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,34 @@ export class BulkUpdateUserUsedTrafficBuilder {
1818
);
1919

2020
return Prisma.sql`
21-
WITH data("inc_used","t_id","last_connected_node_uuid") AS (
22-
VALUES ${values}
23-
),
24-
locked AS (
25-
SELECT u."t_id"
26-
FROM "user_traffic" u
27-
JOIN data d ON d."t_id" = u."t_id"
28-
ORDER BY u."t_id"
29-
FOR UPDATE
30-
),
31-
updated_users AS (
32-
UPDATE "user_traffic" AS u
33-
SET
34-
"used_traffic_bytes" = u."used_traffic_bytes" + d."inc_used",
35-
"lifetime_used_traffic_bytes" = u."lifetime_used_traffic_bytes" + d."inc_used",
36-
"online_at" = NOW(),
37-
"first_connected_at" = COALESCE(u."first_connected_at", NOW()),
38-
"last_connected_node_uuid" = d."last_connected_node_uuid"
39-
FROM data d
40-
JOIN locked l ON l."t_id" = d."t_id"
41-
WHERE d."t_id" = u."t_id"
42-
RETURNING
43-
u."t_id",
44-
(u."first_connected_at" = u."online_at") AS "isFirstConnection"
45-
)
46-
SELECT "t_id" AS "tId"
47-
FROM updated_users
48-
WHERE "isFirstConnection";
49-
`;
21+
WITH data("inc_used","t_id","last_connected_node_uuid") AS (
22+
VALUES ${values}
23+
),
24+
locked AS (
25+
SELECT u."t_id"
26+
FROM data d
27+
JOIN "user_traffic" u ON u."t_id" = d."t_id"
28+
ORDER BY u."t_id"
29+
FOR UPDATE OF u
30+
),
31+
updated_users AS (
32+
UPDATE "user_traffic" AS u
33+
SET
34+
"used_traffic_bytes" = u."used_traffic_bytes" + d."inc_used",
35+
"lifetime_used_traffic_bytes" = u."lifetime_used_traffic_bytes" + d."inc_used",
36+
"online_at" = NOW(),
37+
"first_connected_at" = COALESCE(u."first_connected_at", NOW()),
38+
"last_connected_node_uuid" = d."last_connected_node_uuid"
39+
FROM data d
40+
JOIN locked l ON l."t_id" = d."t_id"
41+
WHERE d."t_id" = u."t_id"
42+
RETURNING
43+
u."t_id",
44+
(u."first_connected_at" = u."online_at") AS "isFirstConnection"
45+
)
46+
SELECT "t_id" AS "tId"
47+
FROM updated_users
48+
WHERE "isFirstConnection";
49+
`;
5050
}
5151
}

0 commit comments

Comments
 (0)