@punks/backend-entity-manager 0.0.96 → 0.0.98

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 (58) hide show
  1. package/dist/cjs/index.js +109 -10
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/__test__/entity/foo.d.ts +1 -1
  4. package/dist/cjs/types/__test__/providers/typeorm/converter/foo.d.ts +9 -0
  5. package/dist/cjs/types/__test__/providers/typeorm/entity/foo.d.ts +1 -83
  6. package/dist/cjs/types/__test__/providers/typeorm/init/foo.d.ts +6 -0
  7. package/dist/cjs/types/__test__/providers/typeorm/manager/foo.d.ts +4 -0
  8. package/dist/cjs/types/__test__/providers/typeorm/models/foo.d.ts +56 -0
  9. package/dist/cjs/types/__test__/providers/typeorm/queries/foo.d.ts +12 -0
  10. package/dist/cjs/types/__test__/providers/typeorm/repository/foo.d.ts +6 -0
  11. package/dist/cjs/types/__test__/providers/typeorm/serializer/foo.d.ts +6 -0
  12. package/dist/cjs/types/integrations/repository/typeorm/clause.d.ts +32 -0
  13. package/dist/cjs/types/integrations/repository/typeorm/facets.d.ts +7 -0
  14. package/dist/cjs/types/integrations/repository/typeorm/queryBuilder.d.ts +6 -1
  15. package/dist/cjs/types/integrations/repository/typeorm/queryClauseBuilder.d.ts +8 -0
  16. package/dist/cjs/types/integrations/repository/typeorm/repository.d.ts +1 -0
  17. package/dist/cjs/types/platforms/nest/__test__/server/entities/appCompanies/appCompany.query.d.ts +1 -1
  18. package/dist/cjs/types/platforms/nest/__test__/server/entities/appDivisions/appDivision.query.d.ts +1 -1
  19. package/dist/cjs/types/platforms/nest/__test__/server/entities/appOrganizations/appOrganization.query.d.ts +1 -1
  20. package/dist/cjs/types/platforms/nest/__test__/server/entities/appRoles/appRole.query.d.ts +1 -1
  21. package/dist/cjs/types/platforms/nest/__test__/server/entities/appTenants/appTenant.query.d.ts +1 -1
  22. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserGroupMembers/appUserGroupMember.query.d.ts +1 -1
  23. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserGroups/appUserGroup.query.d.ts +1 -1
  24. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserProfiles/appUserProfile.query.d.ts +1 -1
  25. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUserRoles/appUserRole.query.d.ts +1 -1
  26. package/dist/cjs/types/platforms/nest/__test__/server/entities/appUsers/appUser.query.d.ts +1 -1
  27. package/dist/cjs/types/platforms/nest/__test__/server/entities/foos/foo.models.d.ts +2 -0
  28. package/dist/cjs/types/platforms/nest/__test__/server/entities/foos/foo.query.d.ts +1 -1
  29. package/dist/esm/index.js +110 -11
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/types/__test__/entity/foo.d.ts +1 -1
  32. package/dist/esm/types/__test__/providers/typeorm/converter/foo.d.ts +9 -0
  33. package/dist/esm/types/__test__/providers/typeorm/entity/foo.d.ts +1 -83
  34. package/dist/esm/types/__test__/providers/typeorm/init/foo.d.ts +6 -0
  35. package/dist/esm/types/__test__/providers/typeorm/manager/foo.d.ts +4 -0
  36. package/dist/esm/types/__test__/providers/typeorm/models/foo.d.ts +56 -0
  37. package/dist/esm/types/__test__/providers/typeorm/queries/foo.d.ts +12 -0
  38. package/dist/esm/types/__test__/providers/typeorm/repository/foo.d.ts +6 -0
  39. package/dist/esm/types/__test__/providers/typeorm/serializer/foo.d.ts +6 -0
  40. package/dist/esm/types/integrations/repository/typeorm/clause.d.ts +32 -0
  41. package/dist/esm/types/integrations/repository/typeorm/facets.d.ts +7 -0
  42. package/dist/esm/types/integrations/repository/typeorm/queryBuilder.d.ts +6 -1
  43. package/dist/esm/types/integrations/repository/typeorm/queryClauseBuilder.d.ts +8 -0
  44. package/dist/esm/types/integrations/repository/typeorm/repository.d.ts +1 -0
  45. package/dist/esm/types/platforms/nest/__test__/server/entities/appCompanies/appCompany.query.d.ts +1 -1
  46. package/dist/esm/types/platforms/nest/__test__/server/entities/appDivisions/appDivision.query.d.ts +1 -1
  47. package/dist/esm/types/platforms/nest/__test__/server/entities/appOrganizations/appOrganization.query.d.ts +1 -1
  48. package/dist/esm/types/platforms/nest/__test__/server/entities/appRoles/appRole.query.d.ts +1 -1
  49. package/dist/esm/types/platforms/nest/__test__/server/entities/appTenants/appTenant.query.d.ts +1 -1
  50. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserGroupMembers/appUserGroupMember.query.d.ts +1 -1
  51. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserGroups/appUserGroup.query.d.ts +1 -1
  52. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserProfiles/appUserProfile.query.d.ts +1 -1
  53. package/dist/esm/types/platforms/nest/__test__/server/entities/appUserRoles/appUserRole.query.d.ts +1 -1
  54. package/dist/esm/types/platforms/nest/__test__/server/entities/appUsers/appUser.query.d.ts +1 -1
  55. package/dist/esm/types/platforms/nest/__test__/server/entities/foos/foo.models.d.ts +2 -0
  56. package/dist/esm/types/platforms/nest/__test__/server/entities/foos/foo.query.d.ts +1 -1
  57. package/dist/index.d.ts +50 -2
  58. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -21442,10 +21442,90 @@ class QueryBuilderBase {
21442
21442
  }
21443
21443
  }
21444
21444
 
21445
+ class QueryClauseBuilder {
21446
+ stringFilter(filter) {
21447
+ const clauses = [];
21448
+ if (!!filter?.gte) {
21449
+ clauses.push(typeorm.MoreThanOrEqual(filter.gte));
21450
+ }
21451
+ if (!!filter?.gt) {
21452
+ clauses.push(typeorm.MoreThan(filter.gt));
21453
+ }
21454
+ if (!!filter?.lte) {
21455
+ clauses.push(typeorm.LessThanOrEqual(filter.lte));
21456
+ }
21457
+ if (!!filter?.lt) {
21458
+ clauses.push(typeorm.LessThan(filter.lt));
21459
+ }
21460
+ if (!!filter?.in) {
21461
+ clauses.push(typeorm.In(filter.in));
21462
+ }
21463
+ if (!!filter?.eq) {
21464
+ clauses.push(typeorm.Equal(filter.eq));
21465
+ }
21466
+ if (!!filter?.like) {
21467
+ clauses.push(typeorm.Like(filter.like.replaceAll("*", "%")));
21468
+ }
21469
+ if (!!filter?.ne) {
21470
+ clauses.push(typeorm.Not(typeorm.Equal(filter.ne)));
21471
+ }
21472
+ if (!!filter?.notIn) {
21473
+ clauses.push(typeorm.Not(typeorm.In(filter.notIn)));
21474
+ }
21475
+ if (!!filter?.notLike) {
21476
+ clauses.push(typeorm.Not(typeorm.Like(filter.notLike.replaceAll("*", "%"))));
21477
+ }
21478
+ return typeorm.And(...clauses);
21479
+ }
21480
+ numericFilter(filter) {
21481
+ const clauses = [];
21482
+ if (!!filter?.gte) {
21483
+ clauses.push(typeorm.MoreThanOrEqual(filter.gte));
21484
+ }
21485
+ if (!!filter?.gt) {
21486
+ clauses.push(typeorm.MoreThan(filter.gt));
21487
+ }
21488
+ if (!!filter?.lte) {
21489
+ clauses.push(typeorm.LessThanOrEqual(filter.lte));
21490
+ }
21491
+ if (!!filter?.lt) {
21492
+ clauses.push(typeorm.LessThan(filter.lt));
21493
+ }
21494
+ return typeorm.And(...clauses);
21495
+ }
21496
+ dateFilter(filter) {
21497
+ const clauses = [];
21498
+ if (!!filter?.gte) {
21499
+ clauses.push(typeorm.MoreThanOrEqual(filter.gte));
21500
+ }
21501
+ if (!!filter?.gt) {
21502
+ clauses.push(typeorm.MoreThan(filter.gt));
21503
+ }
21504
+ if (!!filter?.lte) {
21505
+ clauses.push(typeorm.LessThanOrEqual(filter.lte));
21506
+ }
21507
+ if (!!filter?.lt) {
21508
+ clauses.push(typeorm.LessThan(filter.lt));
21509
+ }
21510
+ return typeorm.And(...clauses);
21511
+ }
21512
+ boolFilter(filter) {
21513
+ const clauses = [];
21514
+ if (!backendCore.isNullOrUndefined(filter?.eq)) {
21515
+ clauses.push(typeorm.Equal(filter.eq));
21516
+ }
21517
+ if (!backendCore.isNullOrUndefined(filter?.ne)) {
21518
+ clauses.push(typeorm.Not(typeorm.Equal(filter.ne)));
21519
+ }
21520
+ return typeorm.And(...clauses);
21521
+ }
21522
+ }
21523
+
21445
21524
  class TypeOrmQueryBuilder extends QueryBuilderBase {
21446
21525
  constructor(services) {
21447
21526
  super();
21448
21527
  this.services = services;
21528
+ this.clause = new QueryClauseBuilder();
21449
21529
  }
21450
21530
  async exists(filters, context) {
21451
21531
  return (await this.count(filters, context)) > 0;
@@ -21469,7 +21549,9 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
21469
21549
  // todo: execute inside read transaction in order to perform the three queries on the same dataset
21470
21550
  const queryResults = await this.countQueryResults(request, context);
21471
21551
  const results = await this.findPagedQueryResults(request, context);
21472
- const facets = await this.calculateFacets(request, context);
21552
+ const facets = request.options?.includeFacets
21553
+ ? await this.calculateFacets(request, context)
21554
+ : undefined;
21473
21555
  return {
21474
21556
  items: results,
21475
21557
  request,
@@ -21481,6 +21563,9 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
21481
21563
  facets,
21482
21564
  };
21483
21565
  }
21566
+ async getFieldFacet() {
21567
+ this.getRepository().find({});
21568
+ }
21484
21569
  async findPagedQueryResults(request, context) {
21485
21570
  return await this.getRepository().find({
21486
21571
  where: {
@@ -21510,15 +21595,15 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
21510
21595
  },
21511
21596
  });
21512
21597
  }
21513
- // protected calculateFacet(
21514
- // request: TEntitySearchParameters,
21515
- // context: IAuthenticationContext<TUserContext> | undefined
21516
- // ) {
21517
- // const repo = this.getRepository().getInnerRepository()
21518
- // repo.createQueryBuilder().relation("xx").select([]).where({
21519
- // whereFactory:
21520
- // }).groupBy().getRawMany()
21521
- // }
21598
+ async calculateFacet(field, request, context) {
21599
+ const values = await this.getRepository().distinct(field, {
21600
+ ...(context ? this.buildContextFilter(context) : {}),
21601
+ ...this.buildWhereClause(request),
21602
+ });
21603
+ return {
21604
+ values,
21605
+ };
21606
+ }
21522
21607
  getRepository() {
21523
21608
  if (!this.repository) {
21524
21609
  this.repository = this.services.resolveRepository();
@@ -21535,6 +21620,20 @@ class TypeOrmRepository {
21535
21620
  getInnerRepository() {
21536
21621
  return this.innerRepository;
21537
21622
  }
21623
+ async distinct(field, condition) {
21624
+ this.logger.debug("Getting distinct values", { field });
21625
+ const columnName = this.innerRepository.metadata.findColumnWithPropertyName(field)?.databaseName;
21626
+ if (!columnName) {
21627
+ throw new Error(`Column '${field}' not found`);
21628
+ }
21629
+ const results = await this.innerRepository
21630
+ .createQueryBuilder()
21631
+ .select(`DISTINCT ${columnName}`)
21632
+ .where(condition)
21633
+ .orderBy(columnName)
21634
+ .getRawMany();
21635
+ return results.map((x) => x[columnName]);
21636
+ }
21538
21637
  async exists(id) {
21539
21638
  if (backendCore.isNullOrUndefined(id)) {
21540
21639
  throw new Error("Invalid 'id' parameter.");