@solidstarters/solid-core 1.2.95 → 1.2.96

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 (77) hide show
  1. package/dist/controllers/action-metadata.controller.d.ts +3 -1
  2. package/dist/controllers/action-metadata.controller.d.ts.map +1 -1
  3. package/dist/controllers/chatter-message-details.controller.d.ts +3 -1
  4. package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
  5. package/dist/controllers/chatter-message.controller.d.ts +3 -1
  6. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  7. package/dist/controllers/email-template.controller.d.ts +3 -1
  8. package/dist/controllers/email-template.controller.d.ts.map +1 -1
  9. package/dist/controllers/export-template.controller.d.ts +3 -1
  10. package/dist/controllers/export-template.controller.d.ts.map +1 -1
  11. package/dist/controllers/export-transaction.controller.d.ts +3 -1
  12. package/dist/controllers/export-transaction.controller.d.ts.map +1 -1
  13. package/dist/controllers/import-transaction-error-log.controller.d.ts +3 -1
  14. package/dist/controllers/import-transaction-error-log.controller.d.ts.map +1 -1
  15. package/dist/controllers/import-transaction.controller.d.ts +3 -1
  16. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  17. package/dist/controllers/list-of-values.controller.d.ts +3 -1
  18. package/dist/controllers/list-of-values.controller.d.ts.map +1 -1
  19. package/dist/controllers/locale.controller.d.ts +3 -1
  20. package/dist/controllers/locale.controller.d.ts.map +1 -1
  21. package/dist/controllers/media.controller.d.ts +3 -1
  22. package/dist/controllers/media.controller.d.ts.map +1 -1
  23. package/dist/controllers/menu-item-metadata.controller.d.ts +3 -1
  24. package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
  25. package/dist/controllers/mq-message-queue.controller.d.ts +3 -1
  26. package/dist/controllers/mq-message-queue.controller.d.ts.map +1 -1
  27. package/dist/controllers/mq-message.controller.d.ts +3 -1
  28. package/dist/controllers/mq-message.controller.d.ts.map +1 -1
  29. package/dist/controllers/permission-metadata.controller.d.ts +3 -1
  30. package/dist/controllers/permission-metadata.controller.d.ts.map +1 -1
  31. package/dist/controllers/role-metadata.controller.d.ts +3 -1
  32. package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
  33. package/dist/controllers/saved-filters.controller.d.ts +3 -1
  34. package/dist/controllers/saved-filters.controller.d.ts.map +1 -1
  35. package/dist/controllers/security-rule.controller.d.ts +3 -1
  36. package/dist/controllers/security-rule.controller.d.ts.map +1 -1
  37. package/dist/controllers/setting.controller.d.ts +3 -1
  38. package/dist/controllers/setting.controller.d.ts.map +1 -1
  39. package/dist/controllers/sms-template.controller.d.ts +3 -1
  40. package/dist/controllers/sms-template.controller.d.ts.map +1 -1
  41. package/dist/controllers/user-view-metadata.controller.d.ts +3 -1
  42. package/dist/controllers/user-view-metadata.controller.d.ts.map +1 -1
  43. package/dist/controllers/user.controller.d.ts +3 -1
  44. package/dist/controllers/user.controller.d.ts.map +1 -1
  45. package/dist/controllers/view-metadata.controller.d.ts +3 -1
  46. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  47. package/dist/dtos/create-saved-filters.dto.d.ts +1 -1
  48. package/dist/dtos/create-saved-filters.dto.d.ts.map +1 -1
  49. package/dist/dtos/create-saved-filters.dto.js +3 -3
  50. package/dist/dtos/create-saved-filters.dto.js.map +1 -1
  51. package/dist/dtos/update-saved-filters.dto.d.ts +1 -1
  52. package/dist/dtos/update-saved-filters.dto.d.ts.map +1 -1
  53. package/dist/dtos/update-saved-filters.dto.js +3 -3
  54. package/dist/dtos/update-saved-filters.dto.js.map +1 -1
  55. package/dist/entities/saved-filters.entity.d.ts +1 -1
  56. package/dist/entities/saved-filters.entity.d.ts.map +1 -1
  57. package/dist/entities/saved-filters.entity.js +2 -2
  58. package/dist/entities/saved-filters.entity.js.map +1 -1
  59. package/dist/seeders/seed-data/solid-core-metadata.json +1 -8
  60. package/dist/services/crud-helper.service.d.ts +1 -0
  61. package/dist/services/crud-helper.service.d.ts.map +1 -1
  62. package/dist/services/crud-helper.service.js +18 -0
  63. package/dist/services/crud-helper.service.js.map +1 -1
  64. package/dist/services/crud.service.d.ts +3 -1
  65. package/dist/services/crud.service.d.ts.map +1 -1
  66. package/dist/services/crud.service.js +6 -1
  67. package/dist/services/crud.service.js.map +1 -1
  68. package/dist/services/media.service.d.ts +3 -1
  69. package/dist/services/media.service.d.ts.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +1 -1
  72. package/src/dtos/create-saved-filters.dto.ts +3 -3
  73. package/src/dtos/update-saved-filters.dto.ts +3 -3
  74. package/src/entities/saved-filters.entity.ts +1 -1
  75. package/src/seeders/seed-data/solid-core-metadata.json +1 -8
  76. package/src/services/crud-helper.service.ts +27 -2
  77. package/src/services/crud.service.ts +8 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/solid-core",
3
- "version": "1.2.95",
3
+ "version": "1.2.96",
4
4
  "description": "This module is a NestJS module containing all the required core providers required by a Solid application",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,12 +1,12 @@
1
1
  import { ApiProperty } from '@nestjs/swagger';
2
2
  import { IsString } from 'class-validator';
3
- import { IsOptional, IsNotEmpty, IsBoolean, IsInt } from 'class-validator';
3
+ import { IsOptional, IsNotEmpty, IsBoolean, IsInt, IsJSON } from 'class-validator';
4
4
 
5
5
  export class CreateSavedFiltersDto {
6
6
  @IsOptional()
7
- @IsString()
7
+ @IsJSON()
8
8
  @ApiProperty()
9
- filterQueryJson: string;
9
+ filterQueryJson: any;
10
10
  @IsNotEmpty()
11
11
  @IsString()
12
12
  @ApiProperty()
@@ -1,4 +1,4 @@
1
- import { IsInt,IsOptional, IsString, IsNotEmpty, IsBoolean } from 'class-validator';
1
+ import { IsInt,IsOptional, IsString, IsNotEmpty, IsBoolean, IsJSON } from 'class-validator';
2
2
  import { ApiProperty } from '@nestjs/swagger';
3
3
 
4
4
  export class UpdateSavedFiltersDto {
@@ -6,9 +6,9 @@ export class UpdateSavedFiltersDto {
6
6
  @IsInt()
7
7
  id: number;
8
8
  @IsOptional()
9
- @IsString()
9
+ @IsJSON()
10
10
  @ApiProperty()
11
- filterQueryJson: string;
11
+ filterQueryJson: any;
12
12
  @IsNotEmpty()
13
13
  @IsOptional()
14
14
  @IsString()
@@ -7,7 +7,7 @@ import { ViewMetadata } from 'src/entities/view-metadata.entity'
7
7
  @Entity("ss_saved_fitlers")
8
8
  export class SavedFilters extends CommonEntity {
9
9
  @Column({ type: "text", nullable: true })
10
- filterQueryJson: string;
10
+ filterQueryJson: any;
11
11
  @Column({ type: "varchar" })
12
12
  name: string;
13
13
  @Column({ type: "boolean", nullable: true, default: false })
@@ -2536,7 +2536,7 @@
2536
2536
  {
2537
2537
  "name": "filterQueryJson",
2538
2538
  "displayName": "Filter Query Json",
2539
- "type": "longText",
2539
+ "type": "json",
2540
2540
  "ormType": "text",
2541
2541
  "required": false,
2542
2542
  "unique": false,
@@ -4886,13 +4886,6 @@
4886
4886
  "name": "view",
4887
4887
  "isSearchable": true
4888
4888
  }
4889
- },
4890
- {
4891
- "type": "field",
4892
- "attrs": {
4893
- "name": "filterQueryJson",
4894
- "isSearchable": true
4895
- }
4896
4889
  }
4897
4890
  ]
4898
4891
  }
@@ -53,7 +53,7 @@ export class CrudHelperService {
53
53
  }
54
54
  else { // Recursively call the applyFilters method to handle nested conditions
55
55
  const joinField = `${alias}.${key}`;
56
- if (!this.isRelationJoined(selectQb, joinField)) selectQb.leftJoin(joinField, key);
56
+ if (!this.isRelationJoined(selectQb, joinField)) selectQb.leftJoin(joinField, key);
57
57
  this.applyFilters(qb, primaryFilterObj, key, selectQb);
58
58
  }
59
59
  });
@@ -280,7 +280,7 @@ export class CrudHelperService {
280
280
  else {
281
281
  // Since in populate, we are create a unique alias based on the relation path
282
282
  //If the join is already present, it is probably because of the relation being passed in the where filter i.e applyFilters method
283
- qb.addSelect(`${part}`);
283
+ qb.addSelect(`${part}`);
284
284
  }
285
285
  parentAlias = part; // Update the parent alias for the next iteration
286
286
  });
@@ -350,6 +350,31 @@ export class CrudHelperService {
350
350
  };
351
351
  }
352
352
 
353
+ async countGroupedRecords(qb: SelectQueryBuilder<any>, basicFilterDto: BasicFilterDto, entityAlias: string) { //TODO : Check how to pass a type to SelectQueryBuilder instead of any
354
+ const { limit, offset, ...rest } = basicFilterDto;
355
+
356
+ const filteredDto = { ...rest, limit: undefined, offset: undefined };
357
+
358
+ const filteredQB = this.buildFilterQuery(qb, filteredDto as BasicFilterDto, entityAlias);
359
+
360
+ // Select only the group field and count distinct rows
361
+ const groupByField = filteredDto.groupBy;
362
+
363
+ if (!groupByField || (Array.isArray(groupByField) && groupByField.length !== 1)) {
364
+ throw new Error('Exactly one groupBy field is required to count grouped records.');
365
+ }
366
+
367
+ const field = Array.isArray(groupByField) ? groupByField[0] : groupByField;
368
+ const rawResults = await filteredQB
369
+ .select([]) // Remove prior select fields
370
+ .addSelect(`${entityAlias}.${field}`, 'groupField')
371
+ .groupBy(`${entityAlias}.${field}`)
372
+ .limit(undefined) // Important: prevent LIMIT 1 from propagating
373
+ .offset(undefined)
374
+ .getRawMany();
375
+
376
+ return rawResults.length;
377
+ }
353
378
 
354
379
  hasReadPermissionOnModel = (activeUser: ActiveUserData, modelName: string) => {
355
380
  const permissionNames = [`${classify(modelName)}Controller.findOne`, `${classify(modelName)}Controller.findMany`];
@@ -425,12 +425,19 @@ export class CRUDService<T> { // Add two generic value i.e Person,CreatePersonDt
425
425
 
426
426
  // Create above query on pincode table using query builder
427
427
  var qb: SelectQueryBuilder<T> = this.repo.createQueryBuilder(alias)
428
- qb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow);
428
+ qb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
429
+
429
430
 
430
431
  if (basicFilterDto.groupBy) {
431
432
  // Get the records and the count
432
433
  const { groupMeta, groupRecords } = await this.handleGroupFind(qb, groupFilter, populateGroup, alias, populateMedia, internationalisation, draftPublishWorkflow);
434
+ const totalGroups = await this.crudHelperService.countGroupedRecords(qb, basicFilterDto, alias);
435
+ qb = this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias, internationalisation, draftPublishWorkflow);
436
+
433
437
  return {
438
+ meta: {
439
+ "totalRecords": totalGroups
440
+ },
434
441
  groupMeta,
435
442
  groupRecords,
436
443
  }