@punks/backend-entity-manager 0.0.97 → 0.0.99

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.
Files changed (40) hide show
  1. package/dist/cjs/index.js +29 -10
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/__test__/providers/typeorm/queries/foo.d.ts +1 -1
  4. package/dist/cjs/types/abstractions/searchParameters.d.ts +5 -0
  5. package/dist/cjs/types/integrations/repository/typeorm/facets.d.ts +7 -0
  6. package/dist/cjs/types/integrations/repository/typeorm/queryBuilder.d.ts +4 -1
  7. package/dist/cjs/types/integrations/repository/typeorm/repository.d.ts +1 -0
  8. package/dist/cjs/types/platforms/nest/__test__/server/entities/appCompanies/appCompany.query.d.ts +1 -1
  9. package/dist/cjs/types/platforms/nest/__test__/server/entities/appDivisions/appDivision.query.d.ts +1 -1
  10. package/dist/cjs/types/platforms/nest/__test__/server/entities/appOrganizations/appOrganization.query.d.ts +1 -1
  11. package/dist/cjs/types/platforms/nest/__test__/server/entities/appRoles/appRole.query.d.ts +1 -1
  12. package/dist/cjs/types/platforms/nest/__test__/server/entities/appTenants/appTenant.query.d.ts +1 -1
  13. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserGroupMembers/appUserGroupMember.query.d.ts +1 -1
  14. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserGroups/appUserGroup.query.d.ts +1 -1
  15. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserProfiles/appUserProfile.query.d.ts +1 -1
  16. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserRoles/appUserRole.query.d.ts +1 -1
  17. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUsers/appUser.query.d.ts +1 -1
  18. package/dist/cjs/types/platforms/nest/__test__/server/entities/foos/foo.models.d.ts +2 -0
  19. package/dist/cjs/types/platforms/nest/__test__/server/entities/foos/foo.query.d.ts +1 -1
  20. package/dist/esm/index.js +29 -10
  21. package/dist/esm/index.js.map +1 -1
  22. package/dist/esm/types/__test__/providers/typeorm/queries/foo.d.ts +1 -1
  23. package/dist/esm/types/abstractions/searchParameters.d.ts +5 -0
  24. package/dist/esm/types/integrations/repository/typeorm/facets.d.ts +7 -0
  25. package/dist/esm/types/integrations/repository/typeorm/queryBuilder.d.ts +4 -1
  26. package/dist/esm/types/integrations/repository/typeorm/repository.d.ts +1 -0
  27. package/dist/esm/types/platforms/nest/__test__/server/entities/appCompanies/appCompany.query.d.ts +1 -1
  28. package/dist/esm/types/platforms/nest/__test__/server/entities/appDivisions/appDivision.query.d.ts +1 -1
  29. package/dist/esm/types/platforms/nest/__test__/server/entities/appOrganizations/appOrganization.query.d.ts +1 -1
  30. package/dist/esm/types/platforms/nest/__test__/server/entities/appRoles/appRole.query.d.ts +1 -1
  31. package/dist/esm/types/platforms/nest/__test__/server/entities/appTenants/appTenant.query.d.ts +1 -1
  32. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserGroupMembers/appUserGroupMember.query.d.ts +1 -1
  33. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserGroups/appUserGroup.query.d.ts +1 -1
  34. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserProfiles/appUserProfile.query.d.ts +1 -1
  35. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserRoles/appUserRole.query.d.ts +1 -1
  36. package/dist/esm/types/platforms/nest/__test__/server/entities/appUsers/appUser.query.d.ts +1 -1
  37. package/dist/esm/types/platforms/nest/__test__/server/entities/foos/foo.models.d.ts +2 -0
  38. package/dist/esm/types/platforms/nest/__test__/server/entities/foos/foo.query.d.ts +1 -1
  39. package/dist/index.d.ts +14 -2
  40. package/package.json +1 -1
@@ -8,5 +8,5 @@ export declare class FooQueryBuilder extends TypeOrmQueryBuilder<FooEntity, FooS
8
8
  constructor(services: EntityServiceLocator<FooEntity, string>);
9
9
  protected buildContextFilter(context?: IAuthenticationContext<unknown> | undefined): FindOptionsWhere<FooEntity> | FindOptionsWhere<FooEntity>[];
10
10
  protected buildWhereClause(request: FooSearchParameters): FindOptionsWhere<FooEntity> | FindOptionsWhere<FooEntity>[];
11
- protected calculateFacets(request: FooSearchParameters): Promise<FooFacets | undefined>;
11
+ protected calculateFacets(request: FooSearchParameters): Promise<FooFacets>;
12
12
  }
@@ -1,4 +1,5 @@
1
1
  export interface IEntitySearchParameters<TSorting, TCursor> {
2
+ query?: IFullTextQuery;
2
3
  filters?: ISearchFilters;
3
4
  sorting?: ISearchSorting<TSorting>;
4
5
  paging?: ISearchRequestPaging<TCursor>;
@@ -24,3 +25,7 @@ export declare enum SortDirection {
24
25
  Asc = "asc",
25
26
  Desc = "desc"
26
27
  }
28
+ export interface IFullTextQuery {
29
+ term: string;
30
+ fields?: string[];
31
+ }
@@ -0,0 +1,7 @@
1
+ export type Facet<T> = {
2
+ values: T[];
3
+ };
4
+ export type StringFacets = Facet<string>;
5
+ export type NumberFacets = Facet<number>;
6
+ export type BooleanFacets = Facet<boolean>;
7
+ export type DateFacets = Facet<Date>;
@@ -6,6 +6,7 @@ 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 { Facet } from "./facets";
9
10
  export declare abstract class TypeOrmQueryBuilder<TEntity extends ObjectLiteral, TEntitySearchParameters extends IEntitySearchParameters<TSorting, number>, TSorting extends SortingType, TFacets extends IEntityFacets, TUserContext> extends QueryBuilderBase<TEntity, TEntitySearchParameters, TSorting, number, TFacets, TUserContext> {
10
11
  private readonly services;
11
12
  private repository;
@@ -15,6 +16,7 @@ export declare abstract class TypeOrmQueryBuilder<TEntity extends ObjectLiteral,
15
16
  count(filters: NonNullable<TEntitySearchParameters["filters"]>, context?: IAuthenticationContext<TUserContext> | undefined): Promise<number>;
16
17
  delete(filters: NonNullable<TEntitySearchParameters["filters"]>, context?: IAuthenticationContext<TUserContext> | undefined): Promise<IEntitiesDeleteResult>;
17
18
  search(request: TEntitySearchParameters, context?: IAuthenticationContext<TUserContext>): Promise<IEntitiesSearchResults<TEntitySearchParameters, TEntity, TSorting, number, TFacets>>;
19
+ protected getFieldFacet(): Promise<void>;
18
20
  protected findPagedQueryResults(request: TEntitySearchParameters, context?: IAuthenticationContext<TUserContext>): Promise<TEntity[]>;
19
21
  protected getRelationsToLoad(request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined): FindOptionsRelations<TEntity> | undefined;
20
22
  protected buildPagingParameters(request: TEntitySearchParameters): {
@@ -24,6 +26,7 @@ export declare abstract class TypeOrmQueryBuilder<TEntity extends ObjectLiteral,
24
26
  protected countQueryResults(request: TEntitySearchParameters, context?: IAuthenticationContext<TUserContext>): Promise<number>;
25
27
  protected abstract buildWhereClause(request: TEntitySearchParameters): FindOptionsWhere<TEntity>[] | FindOptionsWhere<TEntity>;
26
28
  protected abstract buildContextFilter(context?: IAuthenticationContext<TUserContext>): FindOptionsWhere<TEntity>[] | FindOptionsWhere<TEntity>;
27
- protected abstract calculateFacets(request: TEntitySearchParameters, context?: IAuthenticationContext<TUserContext>): Promise<TFacets | undefined>;
29
+ protected abstract calculateFacets(request: TEntitySearchParameters, context?: IAuthenticationContext<TUserContext>): Promise<TFacets>;
30
+ protected calculateFacet<TField extends keyof TEntity, TValue>(field: TField, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined): Promise<Facet<TValue>>;
28
31
  protected getRepository(): TypeOrmRepository<TEntity, unknown>;
29
32
  }
@@ -8,6 +8,7 @@ export declare class TypeOrmRepository<TEntity extends ObjectLiteral, TEntityId>
8
8
  private readonly logger;
9
9
  constructor(innerRepository: Repository<TEntity>);
10
10
  getInnerRepository(): Repository<TEntity>;
11
+ distinct<TField extends keyof TEntity, TValue>(field: TField, condition: FindManyOptions<TEntity>): Promise<any[]>;
11
12
  exists(id: TEntityId): Promise<boolean>;
12
13
  existsBy(condition: FindOneOptions<TEntity>): Promise<boolean>;
13
14
  get(id: TEntityId): Promise<TEntity | undefined>;
@@ -7,5 +7,5 @@ export declare class AppCompanyQueryBuilder extends NestTypeOrmQueryBuilder<AppC
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppCompanyEntity> | FindOptionsWhere<AppCompanyEntity>[];
9
9
  protected buildWhereClause(request: AppCompanySearchParameters): FindOptionsWhere<AppCompanyEntity> | FindOptionsWhere<AppCompanyEntity>[];
10
- protected calculateFacets(request: AppCompanySearchParameters): Promise<AppCompanyFacets | undefined>;
10
+ protected calculateFacets(request: AppCompanySearchParameters): Promise<AppCompanyFacets>;
11
11
  }
@@ -7,5 +7,5 @@ export declare class AppDivisionQueryBuilder extends NestTypeOrmQueryBuilder<App
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppDivisionEntity> | FindOptionsWhere<AppDivisionEntity>[];
9
9
  protected buildWhereClause(request: AppDivisionSearchParameters): FindOptionsWhere<AppDivisionEntity> | FindOptionsWhere<AppDivisionEntity>[];
10
- protected calculateFacets(request: AppDivisionSearchParameters): Promise<AppDivisionFacets | undefined>;
10
+ protected calculateFacets(request: AppDivisionSearchParameters): Promise<AppDivisionFacets>;
11
11
  }
@@ -7,5 +7,5 @@ export declare class AppOrganizationQueryBuilder extends NestTypeOrmQueryBuilder
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppOrganizationEntity> | FindOptionsWhere<AppOrganizationEntity>[];
9
9
  protected buildWhereClause(request: AppOrganizationSearchParameters): FindOptionsWhere<AppOrganizationEntity> | FindOptionsWhere<AppOrganizationEntity>[];
10
- protected calculateFacets(request: AppOrganizationSearchParameters): Promise<AppOrganizationFacets | undefined>;
10
+ protected calculateFacets(request: AppOrganizationSearchParameters): Promise<AppOrganizationFacets>;
11
11
  }
@@ -7,6 +7,6 @@ export declare class AppRoleQueryBuilder extends NestTypeOrmQueryBuilder<AppRole
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppRoleEntity> | FindOptionsWhere<AppRoleEntity>[];
9
9
  protected buildWhereClause(request: AppRoleSearchParameters, context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppRoleEntity> | FindOptionsWhere<AppRoleEntity>[];
10
- protected calculateFacets(request: AppRoleSearchParameters): Promise<AppRoleFacets | undefined>;
10
+ protected calculateFacets(request: AppRoleSearchParameters): Promise<AppRoleFacets>;
11
11
  protected getRelationsToLoad(request: AppRoleSearchParameters, context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsRelations<AppRoleEntity> | undefined;
12
12
  }
@@ -7,5 +7,5 @@ export declare class AppTenantQueryBuilder extends NestTypeOrmQueryBuilder<AppTe
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppTenantEntity> | FindOptionsWhere<AppTenantEntity>[];
9
9
  protected buildWhereClause(request: AppTenantSearchParameters): FindOptionsWhere<AppTenantEntity> | FindOptionsWhere<AppTenantEntity>[];
10
- protected calculateFacets(request: AppTenantSearchParameters): Promise<AppTenantFacets | undefined>;
10
+ protected calculateFacets(request: AppTenantSearchParameters): Promise<AppTenantFacets>;
11
11
  }
@@ -7,5 +7,5 @@ export declare class AppUserGroupMemberQueryBuilder extends NestTypeOrmQueryBuil
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppUserGroupMemberEntity> | FindOptionsWhere<AppUserGroupMemberEntity>[];
9
9
  protected buildWhereClause(request: AppUserGroupMemberSearchParameters): FindOptionsWhere<AppUserGroupMemberEntity> | FindOptionsWhere<AppUserGroupMemberEntity>[];
10
- protected calculateFacets(request: AppUserGroupMemberSearchParameters): Promise<AppUserGroupMemberFacets | undefined>;
10
+ protected calculateFacets(request: AppUserGroupMemberSearchParameters): Promise<AppUserGroupMemberFacets>;
11
11
  }
@@ -7,5 +7,5 @@ export declare class AppUserGroupQueryBuilder extends NestTypeOrmQueryBuilder<Ap
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppUserGroupEntity> | FindOptionsWhere<AppUserGroupEntity>[];
9
9
  protected buildWhereClause(request: AppUserGroupSearchParameters): FindOptionsWhere<AppUserGroupEntity> | FindOptionsWhere<AppUserGroupEntity>[];
10
- protected calculateFacets(request: AppUserGroupSearchParameters): Promise<AppUserGroupFacets | undefined>;
10
+ protected calculateFacets(request: AppUserGroupSearchParameters): Promise<AppUserGroupFacets>;
11
11
  }
@@ -7,5 +7,5 @@ export declare class AppUserProfileQueryBuilder extends NestTypeOrmQueryBuilder<
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppUserProfileEntity> | FindOptionsWhere<AppUserProfileEntity>[];
9
9
  protected buildWhereClause(request: AppUserProfileSearchParameters): FindOptionsWhere<AppUserProfileEntity> | FindOptionsWhere<AppUserProfileEntity>[];
10
- protected calculateFacets(request: AppUserProfileSearchParameters): Promise<AppUserProfileFacets | undefined>;
10
+ protected calculateFacets(request: AppUserProfileSearchParameters): Promise<AppUserProfileFacets>;
11
11
  }
@@ -7,6 +7,6 @@ export declare class AppUserRoleQueryBuilder extends NestTypeOrmQueryBuilder<App
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppUserRoleEntity> | FindOptionsWhere<AppUserRoleEntity>[];
9
9
  protected buildWhereClause(request: AppUserRoleSearchParameters): FindOptionsWhere<AppUserRoleEntity> | FindOptionsWhere<AppUserRoleEntity>[];
10
- protected calculateFacets(request: AppUserRoleSearchParameters): Promise<AppUserRoleFacets | undefined>;
10
+ protected calculateFacets(request: AppUserRoleSearchParameters): Promise<AppUserRoleFacets>;
11
11
  protected getRelationsToLoad(request: AppUserRoleSearchParameters, context: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsRelations<AppUserRoleEntity> | undefined;
12
12
  }
@@ -7,5 +7,5 @@ export declare class AppUserQueryBuilder extends NestTypeOrmQueryBuilder<AppUser
7
7
  constructor(registry: EntityManagerRegistry);
8
8
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<AppUserEntity> | FindOptionsWhere<AppUserEntity>[];
9
9
  protected buildWhereClause(request: AppUserSearchParameters): FindOptionsWhere<AppUserEntity> | FindOptionsWhere<AppUserEntity>[];
10
- protected calculateFacets(request: AppUserSearchParameters): Promise<AppUserFacets | undefined>;
10
+ protected calculateFacets(request: AppUserSearchParameters): Promise<AppUserFacets>;
11
11
  }
@@ -2,6 +2,7 @@ import { IEntitySearchParameters, ISearchSorting, ISearchSortingField, SortDirec
2
2
  import { IEntitiesSearchResults, IEntitiesSearchResultsPaging } from "../../../../../../models";
3
3
  import { FooEntity } from "../../database/core/entities/foo.entity";
4
4
  import { IEntitiesDeleteParameters } from "../../../../../../abstractions/commands";
5
+ import { NumberFacets } from "../../../../../../integrations/repository/typeorm/facets";
5
6
  export type FooEntityId = string;
6
7
  export type FooCreateData = Partial<FooEntity>;
7
8
  export type FooUpdateData = Partial<FooEntity>;
@@ -9,6 +10,7 @@ export interface FooSearchParameters extends IEntitySearchParameters<FooSorting,
9
10
  filters?: FooSearchFilters;
10
11
  }
11
12
  export interface FooFacets {
13
+ age: NumberFacets;
12
14
  }
13
15
  export interface FooSearchFilters {
14
16
  minAge?: number;
@@ -10,5 +10,5 @@ export declare class FooQueryBuilder extends NestTypeOrmQueryBuilder<FooEntity,
10
10
  protected buildContextFilter(context?: IAuthenticationContext<AppAuthContext> | undefined): FindOptionsWhere<FooEntity> | FindOptionsWhere<FooEntity>[];
11
11
  protected buildWhereClause(request: FooSearchParameters): FindOptionsWhere<FooEntity> | FindOptionsWhere<FooEntity>[];
12
12
  private buildAgeWhereClause;
13
- protected calculateFacets(request: FooSearchParameters, context?: IAuthenticationContext<AppAuthContext>): Promise<FooFacets | undefined>;
13
+ protected calculateFacets(request: FooSearchParameters, context?: IAuthenticationContext<AppAuthContext>): Promise<FooFacets>;
14
14
  }
package/dist/esm/index.js CHANGED
@@ -21541,7 +21541,9 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
21541
21541
  // todo: execute inside read transaction in order to perform the three queries on the same dataset
21542
21542
  const queryResults = await this.countQueryResults(request, context);
21543
21543
  const results = await this.findPagedQueryResults(request, context);
21544
- const facets = await this.calculateFacets(request, context);
21544
+ const facets = request.options?.includeFacets
21545
+ ? await this.calculateFacets(request, context)
21546
+ : undefined;
21545
21547
  return {
21546
21548
  items: results,
21547
21549
  request,
@@ -21553,6 +21555,9 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
21553
21555
  facets,
21554
21556
  };
21555
21557
  }
21558
+ async getFieldFacet() {
21559
+ this.getRepository().find({});
21560
+ }
21556
21561
  async findPagedQueryResults(request, context) {
21557
21562
  return await this.getRepository().find({
21558
21563
  where: {
@@ -21582,15 +21587,15 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
21582
21587
  },
21583
21588
  });
21584
21589
  }
21585
- // protected calculateFacet(
21586
- // request: TEntitySearchParameters,
21587
- // context: IAuthenticationContext<TUserContext> | undefined
21588
- // ) {
21589
- // const repo = this.getRepository().getInnerRepository()
21590
- // repo.createQueryBuilder().relation("xx").select([]).where({
21591
- // whereFactory:
21592
- // }).groupBy().getRawMany()
21593
- // }
21590
+ async calculateFacet(field, request, context) {
21591
+ const values = await this.getRepository().distinct(field, {
21592
+ ...(context ? this.buildContextFilter(context) : {}),
21593
+ ...this.buildWhereClause(request),
21594
+ });
21595
+ return {
21596
+ values,
21597
+ };
21598
+ }
21594
21599
  getRepository() {
21595
21600
  if (!this.repository) {
21596
21601
  this.repository = this.services.resolveRepository();
@@ -21607,6 +21612,20 @@ class TypeOrmRepository {
21607
21612
  getInnerRepository() {
21608
21613
  return this.innerRepository;
21609
21614
  }
21615
+ async distinct(field, condition) {
21616
+ this.logger.debug("Getting distinct values", { field });
21617
+ const columnName = this.innerRepository.metadata.findColumnWithPropertyName(field)?.databaseName;
21618
+ if (!columnName) {
21619
+ throw new Error(`Column '${field}' not found`);
21620
+ }
21621
+ const results = await this.innerRepository
21622
+ .createQueryBuilder()
21623
+ .select(`DISTINCT ${columnName}`)
21624
+ .where(condition)
21625
+ .orderBy(columnName)
21626
+ .getRawMany();
21627
+ return results.map((x) => x[columnName]);
21628
+ }
21610
21629
  async exists(id) {
21611
21630
  if (isNullOrUndefined(id)) {
21612
21631
  throw new Error("Invalid 'id' parameter.");