@punks/backend-entity-manager 0.0.164 → 0.0.166

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/cjs/index.js CHANGED
@@ -448,9 +448,8 @@ class EntitiesSearchAction {
448
448
  this.services = services;
449
449
  }
450
450
  async execute(request) {
451
- const results = await this.services
452
- .resolveSearchQuery()
453
- .execute(request);
451
+ const searchQuery = this.services.resolveSearchQuery();
452
+ const results = await searchQuery.execute(request);
454
453
  const converter = this.services.resolveConverter();
455
454
  return {
456
455
  facets: results.facets,
@@ -633,7 +632,7 @@ class EntitiesDeleteCommand {
633
632
  return undefined;
634
633
  }
635
634
  const contextService = this.services.resolveAuthenticationContextProvider();
636
- return await contextService.getContext();
635
+ return await contextService?.getContext();
637
636
  }
638
637
  async authorize() {
639
638
  const authorization = this.services.resolveAuthorizationMiddleware();
@@ -1723,7 +1722,7 @@ class EntitiesCountQuery {
1723
1722
  return undefined;
1724
1723
  }
1725
1724
  const contextService = this.services.resolveAuthenticationContextProvider();
1726
- return await contextService.getContext();
1725
+ return await contextService?.getContext();
1727
1726
  }
1728
1727
  async authorizeSearch(context) {
1729
1728
  const authorization = this.services.resolveAuthorizationMiddleware();
@@ -1754,7 +1753,7 @@ class EntityExistsQuery {
1754
1753
  return undefined;
1755
1754
  }
1756
1755
  const contextService = this.services.resolveAuthenticationContextProvider();
1757
- return await contextService.getContext();
1756
+ return await contextService?.getContext();
1758
1757
  }
1759
1758
  async authorizeSearch(context) {
1760
1759
  const authorization = this.services.resolveAuthorizationMiddleware();
@@ -1860,9 +1859,8 @@ class EntitiesSearchQuery {
1860
1859
  async execute(request) {
1861
1860
  const context = await this.getContext();
1862
1861
  await this.authorizeSearch(context);
1863
- const result = await this.services
1864
- .resolveQueryBuilder()
1865
- .search(request, context);
1862
+ const queryBuilder = this.services.resolveQueryBuilder();
1863
+ const result = await queryBuilder.search(request, context);
1866
1864
  const filteredEntities = await this.filterAllowedEntities(result.items, context);
1867
1865
  return {
1868
1866
  ...result,
@@ -1929,7 +1927,7 @@ class EntityVersionsSearchQuery {
1929
1927
  return undefined;
1930
1928
  }
1931
1929
  const contextService = this.services.resolveAuthenticationContextProvider();
1932
- return await contextService.getContext();
1930
+ return await contextService?.getContext();
1933
1931
  }
1934
1932
  async authorizeSearch(context) {
1935
1933
  const authorization = this.services.resolveAuthorizationMiddleware();
@@ -22222,10 +22220,7 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
22222
22220
  const request = {
22223
22221
  filters,
22224
22222
  };
22225
- return await this.getRepository().deleteBy({
22226
- ...(context ? this.buildContextFilter(context) : {}),
22227
- ...this.buildWhereClause(request),
22228
- });
22223
+ return await this.getRepository().deleteBy(this.buildWhere(request, context));
22229
22224
  }
22230
22225
  async find(request, context) {
22231
22226
  const results = await this.findPagedQueryResults({
@@ -22257,20 +22252,13 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
22257
22252
  }
22258
22253
  async getFieldDistinctValues(field, request, context) {
22259
22254
  return await this.getRepository().distinct(field, {
22260
- where: {
22261
- ...(context ? this.buildContextFilter(context) : {}),
22262
- ...this.buildWhereClause(request),
22263
- },
22255
+ where: this.buildWhere(request, context),
22264
22256
  });
22265
22257
  }
22266
22258
  async findPagedQueryResults(request, context) {
22267
22259
  return await this.getRepository().find({
22268
- where: {
22269
- ...(context ? this.buildContextFilter(context) : {}),
22270
- ...this.buildWhereClause(request),
22271
- },
22272
- relations: request.relations ??
22273
- this.getRelationsToLoad(request, context, exports.QueryBuilderOperation.Search),
22260
+ where: this.buildWhere(request, context),
22261
+ relations: this.buildSearchRelations(request, context),
22274
22262
  order: this.buildSortingClause(request),
22275
22263
  ...this.buildPagingParameters(request),
22276
22264
  });
@@ -22288,23 +22276,23 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
22288
22276
  }
22289
22277
  async countQueryResults(request, context) {
22290
22278
  return await this.getRepository().count({
22291
- where: {
22292
- ...(context ? this.buildContextFilter(context) : {}),
22293
- ...this.buildWhereClause(request),
22294
- },
22279
+ where: this.buildWhere(request, context),
22295
22280
  });
22296
22281
  }
22297
- async calculateFacet(field, request, context) {
22298
- const where = {
22299
- ...(context ? this.buildContextFilter(context) : {}),
22300
- ...this.buildWhereClause(request),
22301
- };
22302
- const results = await this.getRepository()
22282
+ buildTextSearchClause(request) {
22283
+ return {};
22284
+ }
22285
+ async calculateFacet(field, request, context, relations) {
22286
+ let query = this.getRepository()
22303
22287
  .getInnerRepository()
22304
- .createQueryBuilder()
22288
+ .createQueryBuilder("entity");
22289
+ for (const relation of relations?.columns ?? []) {
22290
+ query = query.leftJoin(`entity.${relation}`, relation);
22291
+ }
22292
+ const results = await query
22305
22293
  .select(field, "value")
22306
22294
  .addSelect(`COUNT(${field})`, "count")
22307
- .where(where)
22295
+ .where(this.buildWhere(request, context))
22308
22296
  .addGroupBy(field)
22309
22297
  .orderBy(field)
22310
22298
  .getRawMany();
@@ -22315,34 +22303,67 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
22315
22303
  })),
22316
22304
  };
22317
22305
  }
22318
- async calculateStringFieldFacets(field, request, context) {
22319
- return await this.calculateFacet(field, request, context);
22320
- }
22321
- async calculateNumericFieldFacets(field, request, context) {
22322
- return await this.calculateFacet(field, request, context);
22323
- }
22324
- async calculateBooleanFieldFacets(field, request, context) {
22325
- return await this.calculateFacet(field, request, context);
22326
- }
22327
- // protected async calculateFacet<TField extends keyof TEntity, TValue>(
22328
- // field: TField,
22329
- // request: TEntitySearchParameters,
22330
- // context: IAuthenticationContext<TUserContext> | undefined
22331
- // ): Promise<Facet<TValue>> {
22332
- // const values = await this.getRepository().distinct<TField, TValue>(field, {
22333
- // ...(context ? this.buildContextFilter(context) : {}),
22334
- // ...this.buildWhereClause(request),
22335
- // } as any)
22336
- // return {
22337
- // values,
22338
- // }
22339
- // }
22306
+ async calculateStringFieldFacets(field, request, context, relations) {
22307
+ return await this.calculateFacet(field, request, context, relations);
22308
+ }
22309
+ async calculateNumericFieldFacets(field, request, context, relations) {
22310
+ return await this.calculateFacet(field, request, context, relations);
22311
+ }
22312
+ async calculateBooleanFieldFacets(field, request, context, relations) {
22313
+ return await this.calculateFacet(field, request, context, relations);
22314
+ }
22340
22315
  getRepository() {
22341
22316
  if (!this.repository) {
22342
22317
  this.repository = this.services.resolveRepository();
22343
22318
  }
22344
22319
  return this.repository;
22345
22320
  }
22321
+ buildSearchRelations(request, context) {
22322
+ return (request.relations ??
22323
+ this.getRelationsToLoad(request, context, exports.QueryBuilderOperation.Search));
22324
+ }
22325
+ buildWhere(request, context) {
22326
+ return this.mergeWhereClauses(context ? this.buildContextFilter(context) : {}, this.buildWhereClause(request), this.buildTextSearchClause(request));
22327
+ }
22328
+ mergeWhereClauses(...clauses) {
22329
+ return clauses.reduce((a, b) => this.mergeWheres(a, b));
22330
+ }
22331
+ mergeWheres(a, b) {
22332
+ if (Array.isArray(a) && Array.isArray(b)) {
22333
+ const result = [];
22334
+ for (const x of a) {
22335
+ for (const y of b) {
22336
+ result.push({
22337
+ ...x,
22338
+ ...y,
22339
+ });
22340
+ }
22341
+ }
22342
+ return result;
22343
+ }
22344
+ if (!Array.isArray(a) && !Array.isArray(b)) {
22345
+ return {
22346
+ ...a,
22347
+ ...b,
22348
+ };
22349
+ }
22350
+ if (Array.isArray(a) && !Array.isArray(b)) {
22351
+ return a.map((x) => ({
22352
+ ...x,
22353
+ ...b,
22354
+ }));
22355
+ }
22356
+ if (!Array.isArray(a) && Array.isArray(b)) {
22357
+ return b.map((x) => ({
22358
+ ...a,
22359
+ ...x,
22360
+ }));
22361
+ }
22362
+ return {
22363
+ ...a,
22364
+ ...b,
22365
+ };
22366
+ }
22346
22367
  }
22347
22368
 
22348
22369
  class TypeOrmRepository {