pangea-server 1.0.34 → 1.0.36
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.
- package/dist/database/db.class.d.ts +10 -5
- package/dist/database/db.class.js +48 -36
- package/package.json +1 -1
|
@@ -27,9 +27,11 @@ type FindManyOptions<BM extends BaseModel> = {
|
|
|
27
27
|
search?: string | null;
|
|
28
28
|
group?: Group;
|
|
29
29
|
order?: Order;
|
|
30
|
+
paranoid?: 'active' | 'all' | 'deleted';
|
|
31
|
+
};
|
|
32
|
+
type FindManyPagedOptions<BM extends BaseModel> = FindManyOptions<BM> & {
|
|
30
33
|
page?: number | null;
|
|
31
34
|
pageSize?: number | null;
|
|
32
|
-
paranoid?: 'active' | 'all' | 'deleted';
|
|
33
35
|
};
|
|
34
36
|
type Target<BM extends BaseModel> = Filters<BM> | BM;
|
|
35
37
|
export declare class Db {
|
|
@@ -37,24 +39,27 @@ export declare class Db {
|
|
|
37
39
|
constructor(tx: Tx);
|
|
38
40
|
findOneOrNull<BM extends BaseModel>(model: BaseModelCtor<BM>, filters: Filters<BM>, options?: FindOneOptions): Promise<BM | null>;
|
|
39
41
|
findOne<BM extends BaseModel>(model: BaseModelCtor<BM>, filters: Filters<BM>, options?: FindOneOptions): Promise<BM>;
|
|
40
|
-
|
|
42
|
+
findManyInstances<BM extends BaseModel>(model: BaseModelCtor<BM>, options?: FindManyPagedOptions<BM>): Promise<BM[]>;
|
|
43
|
+
count<BM extends BaseModel>(model: BaseModelCtor<BM>, options?: FindManyOptions<BM>): Promise<number>;
|
|
44
|
+
findMany<BM extends BaseModel>(model: BaseModelCtor<BM>, options?: FindManyPagedOptions<BM>): Promise<{
|
|
41
45
|
instances: BM[];
|
|
42
46
|
totalCount: number;
|
|
43
47
|
}>;
|
|
48
|
+
private __getFindManyBaseOptions;
|
|
44
49
|
insertOne<BM extends BaseModel>(model: BaseModelCtor<BM>, params: InsertParams<BM>): Promise<BM>;
|
|
45
50
|
insertMany<BM extends BaseModel>(model: BaseModelCtor<BM>, data: InsertParams<BM>[]): Promise<number>;
|
|
46
|
-
|
|
51
|
+
upsertMany<BM extends BaseModel>(model: BaseModelCtor<BM>, fieldsToUpdate: (keyof BM)[], data: InsertParams<BM>[]): Promise<number>;
|
|
47
52
|
updateOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>, params: UpdateParams<BM>): Promise<BM>;
|
|
48
53
|
updateMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>, params: UpdateParams<BM>): Promise<number>;
|
|
49
54
|
deleteOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>): Promise<BM | null>;
|
|
50
55
|
deleteMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>): Promise<number>;
|
|
51
56
|
destroyOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>): Promise<BM | null>;
|
|
52
57
|
destroyMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>): Promise<number>;
|
|
58
|
+
private __deleteOne;
|
|
59
|
+
private __deleteMany;
|
|
53
60
|
restoreOne<BM extends BaseModel>(model: BaseModelCtor<BM>, target: Target<BM>): Promise<BM>;
|
|
54
61
|
restoreMany<BM extends BaseModel>(model: BaseModelCtor<BM>, where: Where<BM>): Promise<void>;
|
|
55
62
|
private __getInstance;
|
|
56
|
-
private __deleteOne;
|
|
57
|
-
private __deleteMany;
|
|
58
63
|
enableForeignKeyChecks(): Promise<[unknown[], unknown]>;
|
|
59
64
|
disableForeignKeyChecks(): Promise<[unknown[], unknown]>;
|
|
60
65
|
}
|
|
@@ -36,8 +36,41 @@ class Db {
|
|
|
36
36
|
helpers_1.AppError.ThrowEntityNotFound();
|
|
37
37
|
return instance;
|
|
38
38
|
}
|
|
39
|
+
async findManyInstances(model, options = {}) {
|
|
40
|
+
const baseOptions = this.__getFindManyBaseOptions(model, options);
|
|
41
|
+
const { page, pageSize } = options;
|
|
42
|
+
if (page && pageSize) {
|
|
43
|
+
const idRows = await model.findAll({
|
|
44
|
+
...baseOptions,
|
|
45
|
+
attributes: [[(0, sequelize_1.col)(`${model.name}.id`), 'id']],
|
|
46
|
+
group: [`${model.name}.id`],
|
|
47
|
+
raw: true,
|
|
48
|
+
offset: (page - 1) * pageSize,
|
|
49
|
+
limit: pageSize,
|
|
50
|
+
});
|
|
51
|
+
const ids = idRows.map((row) => row.id);
|
|
52
|
+
return model.findAll({ ...baseOptions, where: { id: { [_1.Ops.in]: ids } } });
|
|
53
|
+
}
|
|
54
|
+
return model.findAll(baseOptions);
|
|
55
|
+
}
|
|
56
|
+
async count(model, options = {}) {
|
|
57
|
+
const baseOptions = this.__getFindManyBaseOptions(model, options);
|
|
58
|
+
return model.count({ ...baseOptions, col: 'id', distinct: true });
|
|
59
|
+
}
|
|
39
60
|
async findMany(model, options = {}) {
|
|
40
|
-
const {
|
|
61
|
+
const { page, pageSize } = options;
|
|
62
|
+
if (page && pageSize) {
|
|
63
|
+
const [instances, totalCount] = await Promise.all([
|
|
64
|
+
this.findManyInstances(model, options),
|
|
65
|
+
this.count(model, options),
|
|
66
|
+
]);
|
|
67
|
+
return { instances, totalCount };
|
|
68
|
+
}
|
|
69
|
+
const instances = await this.findManyInstances(model, options);
|
|
70
|
+
return { instances, totalCount: instances.length };
|
|
71
|
+
}
|
|
72
|
+
__getFindManyBaseOptions(model, options = {}) {
|
|
73
|
+
const { attributes, include = [], where, searchFields, search, group, order, paranoid = 'active' } = options;
|
|
41
74
|
let searchWhere;
|
|
42
75
|
if (searchFields?.length && search) {
|
|
43
76
|
const searchWords = search.split(/\s+/).filter(Boolean);
|
|
@@ -51,7 +84,7 @@ class Db {
|
|
|
51
84
|
};
|
|
52
85
|
}
|
|
53
86
|
const deletedAtWhere = paranoid === 'deleted' ? { deletedAt: { [_1.Ops.not]: null } } : {};
|
|
54
|
-
|
|
87
|
+
return {
|
|
55
88
|
attributes: getFinalAttributes(attributes),
|
|
56
89
|
...getIncludeAndWhere(model, include, { ...where, ...searchWhere, ...deletedAtWhere }),
|
|
57
90
|
...(group && { group: group.map(pangea_helpers_1.camelToSnake) }),
|
|
@@ -60,26 +93,6 @@ class Db {
|
|
|
60
93
|
subQuery: false,
|
|
61
94
|
transaction: this.__tx,
|
|
62
95
|
};
|
|
63
|
-
if (page && pageSize) {
|
|
64
|
-
const [instances, totalCount] = await Promise.all([
|
|
65
|
-
(async () => {
|
|
66
|
-
const idRows = await model.findAll({
|
|
67
|
-
...baseOptions,
|
|
68
|
-
attributes: [[(0, sequelize_1.col)(`${model.name}.id`), 'id']],
|
|
69
|
-
group: [`${model.name}.id`],
|
|
70
|
-
raw: true,
|
|
71
|
-
offset: (page - 1) * pageSize,
|
|
72
|
-
limit: pageSize,
|
|
73
|
-
});
|
|
74
|
-
const ids = idRows.map((row) => row.id);
|
|
75
|
-
return model.findAll({ ...baseOptions, where: { id: { [_1.Ops.in]: ids } } });
|
|
76
|
-
})(),
|
|
77
|
-
model.count({ ...baseOptions, col: 'id', distinct: true }),
|
|
78
|
-
]);
|
|
79
|
-
return { instances, totalCount };
|
|
80
|
-
}
|
|
81
|
-
const instances = await model.findAll(baseOptions);
|
|
82
|
-
return { instances, totalCount: instances.length };
|
|
83
96
|
}
|
|
84
97
|
// insert methods
|
|
85
98
|
insertOne(model, params) {
|
|
@@ -94,7 +107,7 @@ class Db {
|
|
|
94
107
|
return newInstances.length;
|
|
95
108
|
});
|
|
96
109
|
}
|
|
97
|
-
|
|
110
|
+
upsertMany(model, fieldsToUpdate, data) {
|
|
98
111
|
return handleDbError(async () => {
|
|
99
112
|
const newInstances = await model.bulkCreate(data, {
|
|
100
113
|
updateOnDuplicate: fieldsToUpdate,
|
|
@@ -125,13 +138,24 @@ class Db {
|
|
|
125
138
|
deleteMany(model, where) {
|
|
126
139
|
return this.__deleteMany(model, where, false);
|
|
127
140
|
}
|
|
128
|
-
// destroy methods
|
|
129
141
|
destroyOne(model, target) {
|
|
130
142
|
return this.__deleteOne(model, target, true);
|
|
131
143
|
}
|
|
132
144
|
destroyMany(model, where) {
|
|
133
145
|
return this.__deleteMany(model, where, true);
|
|
134
146
|
}
|
|
147
|
+
__deleteOne(model, target, force) {
|
|
148
|
+
return handleDbError(async () => {
|
|
149
|
+
const instance = await this.__getInstance(model, target);
|
|
150
|
+
await instance.destroy({ force, transaction: this.__tx });
|
|
151
|
+
return this.findOneOrNull(model, instance.id, { paranoid: false });
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
__deleteMany(model, where, force) {
|
|
155
|
+
return handleDbError(() => {
|
|
156
|
+
return model.destroy({ where, force, transaction: this.__tx });
|
|
157
|
+
});
|
|
158
|
+
}
|
|
135
159
|
// restore methods
|
|
136
160
|
restoreOne(model, target) {
|
|
137
161
|
return handleDbError(async () => {
|
|
@@ -151,18 +175,6 @@ class Db {
|
|
|
151
175
|
return target;
|
|
152
176
|
return this.findOne(model, target, { paranoid });
|
|
153
177
|
}
|
|
154
|
-
__deleteOne(model, target, force) {
|
|
155
|
-
return handleDbError(async () => {
|
|
156
|
-
const instance = await this.__getInstance(model, target);
|
|
157
|
-
await instance.destroy({ force, transaction: this.__tx });
|
|
158
|
-
return this.findOneOrNull(model, instance.id, { paranoid: false });
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
__deleteMany(model, where, force) {
|
|
162
|
-
return handleDbError(() => {
|
|
163
|
-
return model.destroy({ where, force, transaction: this.__tx });
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
178
|
// foreign key methods
|
|
167
179
|
enableForeignKeyChecks() {
|
|
168
180
|
const dbClient = (0, db_client_1.getDbClient)();
|