Skip to content

Commit 850c48e

Browse files
committed
refactor: update user model and handling to include tId as bigint
- Modified Users model in Prisma schema to include tId. - Updated various components to handle tId instead of uuid for user identification. - Adjusted query and command structures to reflect changes in user data handling. - Enhanced JSON serialization for BigInt type.
1 parent ba2c958 commit 850c48e

File tree

13 files changed

+53
-36
lines changed

13 files changed

+53
-36
lines changed

prisma/schema.prisma

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ model RemnawaveSettings {
4848

4949
model Users {
5050
uuid String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
51-
tId BigInt @unique @default(autoincrement()) @map("t_id") @ignore
51+
tId BigInt @unique @default(autoincrement()) @map("t_id")
5252
shortUuid String @unique @map("short_uuid")
5353
username String @unique @map("username")
5454

src/bin/processors/processors.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
(BigInt.prototype as any).toJSON = function () {
2+
return this.toString();
3+
};
4+
15
import { utilities as nestWinstonModuleUtilities, WinstonModule } from 'nest-winston';
26
import { createLogger } from 'winston';
37
import * as winston from 'winston';

src/bin/scheduler/scheduler.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
(BigInt.prototype as any).toJSON = function () {
2+
return this.toString();
3+
};
4+
15
import { utilities as nestWinstonModuleUtilities, WinstonModule } from 'nest-winston';
26
import { createLogger } from 'winston';
37
import compression from 'compression';

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

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,30 @@ export class BulkUpdateUserUsedTrafficBuilder {
99
}
1010

1111
public getQuery(userUsageList: { u: string; b: string; n: string }[]): Prisma.Sql {
12-
const query = `
13-
WITH sorted_data AS (
14-
SELECT * FROM (
15-
VALUES ${userUsageList.map((h) => `(${h.b}, ${h.u}, '${h.n}'::uuid)`).join(',')}
16-
) AS data("inc_used", "t_id", "last_connected_node_uuid")
17-
ORDER BY "t_id"
18-
),
19-
updated_users AS (
20-
UPDATE "users" AS u
12+
const values = Prisma.join(
13+
userUsageList.map((h) => Prisma.sql`(${h.b}::bigint, ${h.u}::bigint, ${h.n}::uuid)`),
14+
);
15+
16+
const query = Prisma.sql`
17+
WITH updated_users AS ( UPDATE "users" AS u
2118
SET
22-
"used_traffic_bytes" = u."used_traffic_bytes" + sorted_data."inc_used",
23-
"lifetime_used_traffic_bytes" = u."lifetime_used_traffic_bytes" + sorted_data."inc_used",
24-
"online_at" = NOW(),
25-
"first_connected_at" = COALESCE(u."first_connected_at", NOW()),
26-
"updated_at" = NOW(),
27-
"last_connected_node_uuid" = sorted_data."last_connected_node_uuid"
28-
FROM sorted_data
29-
WHERE sorted_data."t_id" = u."t_id"
30-
RETURNING u."uuid", (u."first_connected_at" = u."online_at") AS "isFirstConnection"
19+
"used_traffic_bytes" = u."used_traffic_bytes" + data."inc_used",
20+
"lifetime_used_traffic_bytes" = u."lifetime_used_traffic_bytes" + data."inc_used",
21+
"online_at" = NOW(),
22+
"first_connected_at" = COALESCE(u."first_connected_at", NOW()),
23+
"last_connected_node_uuid" = data."last_connected_node_uuid"
24+
FROM (
25+
VALUES ${values}
26+
) AS data("inc_used", "t_id", "last_connected_node_uuid")
27+
WHERE data."t_id" = u."t_id"
28+
RETURNING
29+
u."t_id",
30+
(u."first_connected_at" = u."online_at") AS "isFirstConnection"
3131
)
32-
SELECT uuid FROM updated_users WHERE "isFirstConnection";
32+
SELECT t_id as "tId"
33+
FROM updated_users
34+
WHERE "isFirstConnection";
3335
`;
34-
return Prisma.raw(query);
36+
return query;
3537
}
3638
}

src/modules/users/commands/bulk-increment-used-traffic/bulk-increment-used-traffic.handler.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import { UsersRepository } from '../../repositories/users.repository';
1212

1313
@CommandHandler(BulkIncrementUsedTrafficCommand)
1414
export class BulkIncrementUsedTrafficHandler
15-
implements
16-
ICommandHandler<BulkIncrementUsedTrafficCommand, ICommandResponse<{ uuid: string }[]>>
15+
implements ICommandHandler<BulkIncrementUsedTrafficCommand, ICommandResponse<{ tId: bigint }[]>>
1716
{
1817
public readonly logger = new Logger(BulkIncrementUsedTrafficHandler.name);
1918

@@ -25,7 +24,7 @@ export class BulkIncrementUsedTrafficHandler
2524
})
2625
async execute(
2726
command: BulkIncrementUsedTrafficCommand,
28-
): Promise<ICommandResponse<{ uuid: string }[]>> {
27+
): Promise<ICommandResponse<{ tId: bigint }[]>> {
2928
try {
3029
const result = await this.usersRepository.bulkIncrementUsedTraffic(
3130
command.userUsageList,

src/modules/users/entities/base-users.entity.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Users } from '@prisma/client';
33
import { TResetPeriods, TUsersStatus } from '@contract/constants';
44

55
export class BaseUserEntity implements Users {
6+
public tId: bigint;
67
public uuid: string;
78
public shortUuid: string;
89
public username: string;

src/modules/users/queries/get-user-by-unique-field/get-user-by-unique-field.handler.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export class GetUserByUniqueFieldHandler
2323
username: query.field.username || undefined,
2424
shortUuid: query.field.shortUuid || undefined,
2525
uuid: query.field.uuid || undefined,
26+
tId: query.field.tId || undefined,
2627
},
2728
query.includeOptions,
2829
);

src/modules/users/queries/get-user-by-unique-field/get-user-by-unique-field.query.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import { BaseUserEntity, UserEntity } from '@modules/users/entities';
66

77
export class GetUserByUniqueFieldQuery extends Query<ICommandResponse<UserEntity>> {
88
constructor(
9-
public readonly field: Partial<Pick<BaseUserEntity, 'uuid' | 'shortUuid' | 'username'>>,
9+
public readonly field: Partial<
10+
Pick<BaseUserEntity, 'tId' | 'uuid' | 'shortUuid' | 'username'>
11+
>,
1012
public readonly includeOptions: {
1113
activeInternalSquads: boolean;
1214
lastConnectedNode: boolean;

src/modules/users/repositories/users.repository.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,11 @@ export class UsersRepository implements ICrud<BaseUserEntity> {
7171

7272
public async bulkIncrementUsedTraffic(
7373
userUsageList: { u: string; b: string; n: string }[],
74-
): Promise<{ uuid: string }[]> {
74+
): Promise<{ tId: bigint }[]> {
7575
const { query } = new BulkUpdateUserUsedTrafficBuilder(userUsageList);
76-
return await this.prisma.tx.$queryRaw<{ uuid: string }[]>(query);
76+
const result = await this.prisma.tx.$queryRaw<{ tId: bigint }[]>(query);
77+
78+
return result;
7779
}
7880

7981
public async triggerThresholdNotifications(percentages: number[]): Promise<{ uuid: string }[]> {
@@ -507,7 +509,7 @@ export class UsersRepository implements ICrud<BaseUserEntity> {
507509
}
508510

509511
public async findUniqueByCriteria(
510-
dto: Partial<Pick<BaseUserEntity, 'uuid' | 'shortUuid' | 'username'>>,
512+
dto: Partial<Pick<BaseUserEntity, 'uuid' | 'shortUuid' | 'username' | 'tId'>>,
511513
includeOptions: {
512514
activeInternalSquads: boolean;
513515
lastConnectedNode: boolean;
@@ -531,6 +533,7 @@ export class UsersRepository implements ICrud<BaseUserEntity> {
531533
if (dto.uuid) conditions.push(eb('uuid', '=', getKyselyUuid(dto.uuid)));
532534
if (dto.shortUuid) conditions.push(eb('shortUuid', '=', dto.shortUuid));
533535
if (dto.username) conditions.push(eb('username', '=', dto.username));
536+
if (dto.tId) conditions.push(eb('tId', '=', dto.tId));
534537

535538
return eb.or(conditions);
536539
})

src/modules/users/users.converter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const modelToEntity = (model: Users): BaseUserEntity => {
1212

1313
const entityToModel = (entity: BaseUserEntity): BaseUserEntity => {
1414
return {
15+
tId: entity.tId,
1516
uuid: entity.uuid,
1617
shortUuid: entity.shortUuid,
1718
username: entity.username,

0 commit comments

Comments
 (0)