@hugo.ye/common 1.0.67 → 1.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,15 +2,41 @@ import { Logger } from '@nestjs/common';
|
|
|
2
2
|
import { AbstractEntity } from '../index.js';
|
|
3
3
|
import { EntityManager, InsertResult, Repository, type DeepPartial, type EntityTarget, type FindOptionsOrder, type FindOptionsRelations, type FindOptionsWhere, type ObjectLiteral } from 'typeorm';
|
|
4
4
|
import type { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity.js';
|
|
5
|
+
interface Stats {
|
|
6
|
+
totalAttempted: number;
|
|
7
|
+
totalInserted: number;
|
|
8
|
+
batchCount: number;
|
|
9
|
+
ids: number[];
|
|
10
|
+
firstId: number;
|
|
11
|
+
lastId: number;
|
|
12
|
+
duration: string;
|
|
13
|
+
speed: string;
|
|
14
|
+
}
|
|
5
15
|
export declare abstract class AbstractRepository<T extends AbstractEntity<T>> {
|
|
6
16
|
private readonly entityManager;
|
|
7
17
|
private readonly entityRepository;
|
|
8
18
|
protected abstract logger: Logger;
|
|
9
19
|
constructor(entityManager: EntityManager, entityRepository: Repository<T>);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
20
|
+
private calculateStats;
|
|
21
|
+
insert<T extends ObjectLiteral>(entity: EntityTarget<T>, data: QueryDeepPartialEntity<T> | QueryDeepPartialEntity<T>[]): Promise<{
|
|
22
|
+
result: InsertResult;
|
|
23
|
+
stats: Stats;
|
|
24
|
+
}>;
|
|
25
|
+
insertOne<T extends ObjectLiteral>(entity: EntityTarget<T>, data: QueryDeepPartialEntity<T>): Promise<{
|
|
26
|
+
result: InsertResult;
|
|
27
|
+
stats: Stats;
|
|
28
|
+
}>;
|
|
29
|
+
insertMany<T extends ObjectLiteral>(entity: EntityTarget<T>, data: QueryDeepPartialEntity<T>[]): Promise<{
|
|
30
|
+
result: InsertResult;
|
|
31
|
+
stats: Stats;
|
|
32
|
+
}>;
|
|
33
|
+
bulkInsert(entity: EntityTarget<T>, data: QueryDeepPartialEntity<T>[], options?: {
|
|
34
|
+
batchSize?: number;
|
|
35
|
+
useTransaction?: boolean;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
result: InsertResult[];
|
|
38
|
+
stats: Stats;
|
|
39
|
+
}>;
|
|
14
40
|
insertWithTransaction<T extends ObjectLiteral>(entity: EntityTarget<T>, data: QueryDeepPartialEntity<T> | QueryDeepPartialEntity<T>[]): Promise<InsertResult>;
|
|
15
41
|
create(entity: T): Promise<T>;
|
|
16
42
|
findOne(where: FindOptionsWhere<T> | FindOptionsWhere<T>[], relations?: FindOptionsRelations<T>): Promise<T>;
|
|
@@ -20,4 +46,5 @@ export declare abstract class AbstractRepository<T extends AbstractEntity<T>> {
|
|
|
20
46
|
save(entity: DeepPartial<T>): Promise<DeepPartial<T> & T>;
|
|
21
47
|
getRepository(): Repository<T>;
|
|
22
48
|
}
|
|
49
|
+
export {};
|
|
23
50
|
//# sourceMappingURL=abstract.repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract.repository.d.ts","sourceRoot":"","sources":["../../src/database/abstract.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"abstract.repository.d.ts","sourceRoot":"","sources":["../../src/database/abstract.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,31 +8,76 @@ export class AbstractRepository {
|
|
|
8
8
|
this.entityManager = entityManager;
|
|
9
9
|
this.entityRepository = entityRepository;
|
|
10
10
|
}
|
|
11
|
+
calculateStats(results, totalAttempted, // 总数据数
|
|
12
|
+
startTime) {
|
|
13
|
+
const resultArray = Array.isArray(results) ? results : [results];
|
|
14
|
+
const totalInserted = resultArray.reduce((sum, r) => sum + r.identifiers.length, 0);
|
|
15
|
+
const allIds = resultArray.flatMap((r) => r.identifiers.map((item) => item.id));
|
|
16
|
+
const duration = Date.now() - startTime;
|
|
17
|
+
return {
|
|
18
|
+
totalAttempted,
|
|
19
|
+
totalInserted,
|
|
20
|
+
batchCount: resultArray.length,
|
|
21
|
+
ids: allIds,
|
|
22
|
+
firstId: allIds[0],
|
|
23
|
+
lastId: allIds[allIds.length - 1],
|
|
24
|
+
duration: `${duration}ms`,
|
|
25
|
+
speed: totalInserted > 0 && duration > 0
|
|
26
|
+
? `${Math.round(totalInserted / (duration / 1000))} records/sec`
|
|
27
|
+
: 'N/A',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
11
30
|
// InsertResult 返回的数据格式
|
|
12
31
|
// identifiers: [{ id: 1 }],
|
|
13
32
|
// generatedMaps: [{ id: 1, createdAt: '2024-01-01T00:00:00.000Z' }],
|
|
14
33
|
// raw: { insertId: 1, affectedRows: 1 }
|
|
15
34
|
// 一次插入1条或多条数据
|
|
16
35
|
async insert(entity, data) {
|
|
17
|
-
|
|
36
|
+
const startTime = Date.now();
|
|
37
|
+
const result = await this.entityManager.insert(entity, data);
|
|
38
|
+
const stats = this.calculateStats(result, Array.isArray(result) ? result.length : 1, startTime);
|
|
39
|
+
return { result, stats };
|
|
18
40
|
}
|
|
19
41
|
// 一次插入1条数据
|
|
20
42
|
async insertOne(entity, data) {
|
|
21
|
-
|
|
43
|
+
const startTime = Date.now();
|
|
44
|
+
const result = await this.entityManager.insert(entity, data);
|
|
45
|
+
const stats = this.calculateStats(result, 1, startTime);
|
|
46
|
+
return { result, stats };
|
|
22
47
|
}
|
|
23
48
|
// 一次插入多条数据
|
|
24
49
|
async insertMany(entity, data) {
|
|
25
|
-
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
const result = await this.entityManager.insert(entity, data);
|
|
52
|
+
const stats = this.calculateStats(result, data.length, startTime);
|
|
53
|
+
return { result, stats };
|
|
26
54
|
}
|
|
27
55
|
// 分批插入,当数据多时使用, batch一次插入多少条
|
|
28
|
-
|
|
56
|
+
// < 1000条 → 直接使用 insert()
|
|
57
|
+
// 1000-10万条 → 分批 insert() + 事务
|
|
58
|
+
// > 10万条 → 分批 insert() 不使用事务
|
|
59
|
+
async bulkInsert(entity, data, options = {}) {
|
|
60
|
+
const { batchSize = 1000, useTransaction = false } = options;
|
|
29
61
|
const results = [];
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
62
|
+
const startTime = Date.now();
|
|
63
|
+
if (useTransaction) {
|
|
64
|
+
this.entityManager.transaction(async (manager) => {
|
|
65
|
+
for (let i = 0; i < data.length; i += batchSize) {
|
|
66
|
+
const batch = data.slice(i, i + batchSize);
|
|
67
|
+
const result = await manager.insert(entity, batch);
|
|
68
|
+
results.push(result);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
for (let i = 0; i < data.length; i += batchSize) {
|
|
74
|
+
const batch = data.slice(i, i + batchSize);
|
|
75
|
+
const result = await this.entityManager.insert(entity, batch);
|
|
76
|
+
results.push(result);
|
|
77
|
+
}
|
|
34
78
|
}
|
|
35
|
-
|
|
79
|
+
const stats = this.calculateStats(results, data.length, startTime);
|
|
80
|
+
return { result: results, stats };
|
|
36
81
|
}
|
|
37
82
|
// 事务插入
|
|
38
83
|
async insertWithTransaction(entity, data) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract.repository.js","sourceRoot":"","sources":["../../src/database/abstract.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,GAOX,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"abstract.repository.js","sourceRoot":"","sources":["../../src/database/abstract.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ __decorate([
|
|
|
28
28
|
__metadata("design:type", String)
|
|
29
29
|
], ExchangeRateEntity.prototype, "currency", void 0);
|
|
30
30
|
__decorate([
|
|
31
|
-
Column({ type: 'decimal', precision:
|
|
31
|
+
Column({ type: 'decimal', precision: 15, scale: 4 }),
|
|
32
32
|
Field(),
|
|
33
33
|
__metadata("design:type", Number)
|
|
34
34
|
], ExchangeRateEntity.prototype, "conversionRate", void 0);
|