@punks/backend-entity-manager 0.0.315 → 0.0.316

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.
@@ -1,5 +1,7 @@
1
+ import { IAuthenticationContext } from "../../../abstractions/authentication";
1
2
  export type FacetValueType<T> = {
2
3
  value: T;
4
+ label: string;
3
5
  count: number;
4
6
  };
5
7
  export type FacetType<T> = {
@@ -9,3 +11,13 @@ export type StringFacetsType = FacetType<string>;
9
11
  export type NumberFacetsType = FacetType<number>;
10
12
  export type BooleanFacetsType = FacetType<boolean>;
11
13
  export type DateFacetsType = FacetType<Date>;
14
+ export type FacetRelations = {
15
+ columns: string[];
16
+ };
17
+ export type FacetBuilderInput<TEntity, TEntitySearchParameters, TUserContext> = {
18
+ field: keyof TEntity;
19
+ request: TEntitySearchParameters;
20
+ context: IAuthenticationContext<TUserContext> | undefined;
21
+ relations?: FacetRelations;
22
+ labelSelector?: string[];
23
+ };
@@ -1,2 +1,3 @@
1
1
  export { TypeOrmQueryBuilder } from "./queryBuilder";
2
2
  export { TypeOrmRepository } from "./repository";
3
+ export * from "./facets";
@@ -6,13 +6,10 @@ import { TypeOrmRepository } from "./repository";
6
6
  import { EntityServiceLocator } from "../../../providers/services";
7
7
  import { IEntitiesDeleteResult } from "../../../abstractions/repository";
8
8
  import { QueryClauseBuilder } from "./queryClauseBuilder";
9
- import { BooleanFacetsType, FacetType, NumberFacetsType, StringFacetsType } from "./facets";
9
+ import { BooleanFacetsType, FacetRelations, FacetType, NumberFacetsType, FacetBuilderInput, StringFacetsType } from "./facets";
10
10
  import { QueryBuilderOperation } from "../../../templates/queryBuilder";
11
11
  import { ChildrenMap } from "./traverse";
12
12
  import { PermissionsChecker } from "./permissionsChecker";
13
- export type FacetRelations = {
14
- columns: string[];
15
- };
16
13
  export declare abstract class TypeOrmQueryBuilder<TEntity extends ObjectLiteral, TEntityId, TEntitySearchParameters extends IEntitySearchParameters<TEntity, TSorting, number>, TSorting extends SortingType, TFacets extends IEntityFacets, TUserContext> extends QueryBuilderBase<TEntity, TEntityId, TEntitySearchParameters, TSorting, number, TFacets, TUserContext> {
17
14
  private readonly services;
18
15
  private repository;
@@ -48,10 +45,10 @@ export declare abstract class TypeOrmQueryBuilder<TEntity extends ObjectLiteral,
48
45
  idField: TField;
49
46
  parentField: TField;
50
47
  }): Promise<ChildrenMap>;
51
- protected calculateStringFieldFacets(field: keyof TEntity, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined, relations?: FacetRelations): Promise<StringFacetsType>;
52
- protected calculateNumericFieldFacets(field: keyof TEntity, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined, relations?: FacetRelations): Promise<NumberFacetsType>;
48
+ protected calculateStringFieldFacets({ field, request, context, relations, }: FacetBuilderInput<TEntity, TEntitySearchParameters, TUserContext>): Promise<StringFacetsType>;
49
+ protected calculateNumericFieldFacets({ field, request, context, relations, }: FacetBuilderInput<TEntity, TEntitySearchParameters, TUserContext>): Promise<NumberFacetsType>;
53
50
  protected calculateBooleanFieldFacets(field: keyof TEntity, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined, relations?: FacetRelations): Promise<BooleanFacetsType>;
54
- protected calculateFacet<TField extends keyof TEntity, TValue>(field: TField, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined, relations?: FacetRelations): Promise<FacetType<TValue>>;
51
+ protected calculateFacet<TValue>({ field, request, context, relations, labelSelector, }: FacetBuilderInput<TEntity, TEntitySearchParameters, TUserContext>): Promise<FacetType<TValue>>;
55
52
  protected getRepository(): TypeOrmRepository<TEntity, unknown>;
56
53
  private buildSearchRelations;
57
54
  private buildWhere;
package/dist/esm/index.js CHANGED
@@ -3283,16 +3283,31 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
3283
3283
  return acc;
3284
3284
  }, {});
3285
3285
  }
3286
- async calculateStringFieldFacets(field, request, context, relations) {
3287
- return await this.calculateFacet(field, request, context, relations);
3286
+ async calculateStringFieldFacets({ field, request, context, relations, }) {
3287
+ return await this.calculateFacet({
3288
+ field,
3289
+ request,
3290
+ context,
3291
+ relations,
3292
+ });
3288
3293
  }
3289
- async calculateNumericFieldFacets(field, request, context, relations) {
3290
- return await this.calculateFacet(field, request, context, relations);
3294
+ async calculateNumericFieldFacets({ field, request, context, relations, }) {
3295
+ return await this.calculateFacet({
3296
+ field,
3297
+ request,
3298
+ context,
3299
+ relations,
3300
+ });
3291
3301
  }
3292
3302
  async calculateBooleanFieldFacets(field, request, context, relations) {
3293
- return await this.calculateFacet(field, request, context, relations);
3303
+ return await this.calculateFacet({
3304
+ field,
3305
+ request,
3306
+ context,
3307
+ relations,
3308
+ });
3294
3309
  }
3295
- async calculateFacet(field, request, context, relations) {
3310
+ async calculateFacet({ field, request, context, relations, labelSelector, }) {
3296
3311
  let query = this.getRepository()
3297
3312
  .getInnerRepository()
3298
3313
  .createQueryBuilder("entity");
@@ -3300,16 +3315,21 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
3300
3315
  query = query.leftJoin(`entity.${relation}`, relation);
3301
3316
  }
3302
3317
  const fieldName = `"${field}"`;
3303
- const results = await query
3318
+ query = query
3304
3319
  .select(fieldName, "value")
3305
3320
  .addSelect(`COUNT(${fieldName})`, "count")
3306
3321
  .where(this.buildWhere(request, context))
3307
- .addGroupBy(fieldName)
3308
- .orderBy(fieldName)
3309
- .getRawMany();
3322
+ .addGroupBy(fieldName);
3323
+ if (labelSelector) {
3324
+ query
3325
+ .addSelect(labelSelector.join("."), "label")
3326
+ .addGroupBy(labelSelector.join("."));
3327
+ }
3328
+ const results = await query.orderBy(fieldName).getRawMany();
3310
3329
  return {
3311
3330
  values: results.map((x) => ({
3312
3331
  value: x.value,
3332
+ label: String(x.label ?? x.value ?? ""),
3313
3333
  count: Number(x.count),
3314
3334
  })),
3315
3335
  };