@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.
- package/dist/controllers/action-metadata.controller.d.ts +3 -1
- package/dist/controllers/action-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message-details.controller.d.ts +3 -1
- package/dist/controllers/chatter-message-details.controller.d.ts.map +1 -1
- package/dist/controllers/chatter-message.controller.d.ts +3 -1
- package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
- package/dist/controllers/email-template.controller.d.ts +3 -1
- package/dist/controllers/email-template.controller.d.ts.map +1 -1
- package/dist/controllers/export-template.controller.d.ts +3 -1
- package/dist/controllers/export-template.controller.d.ts.map +1 -1
- package/dist/controllers/export-transaction.controller.d.ts +3 -1
- package/dist/controllers/export-transaction.controller.d.ts.map +1 -1
- package/dist/controllers/import-transaction-error-log.controller.d.ts +3 -1
- package/dist/controllers/import-transaction-error-log.controller.d.ts.map +1 -1
- package/dist/controllers/import-transaction.controller.d.ts +3 -1
- package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
- package/dist/controllers/list-of-values.controller.d.ts +3 -1
- package/dist/controllers/list-of-values.controller.d.ts.map +1 -1
- package/dist/controllers/locale.controller.d.ts +3 -1
- package/dist/controllers/locale.controller.d.ts.map +1 -1
- package/dist/controllers/media.controller.d.ts +3 -1
- package/dist/controllers/media.controller.d.ts.map +1 -1
- package/dist/controllers/menu-item-metadata.controller.d.ts +3 -1
- package/dist/controllers/menu-item-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/mq-message-queue.controller.d.ts +3 -1
- package/dist/controllers/mq-message-queue.controller.d.ts.map +1 -1
- package/dist/controllers/mq-message.controller.d.ts +3 -1
- package/dist/controllers/mq-message.controller.d.ts.map +1 -1
- package/dist/controllers/permission-metadata.controller.d.ts +3 -1
- package/dist/controllers/permission-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/role-metadata.controller.d.ts +3 -1
- package/dist/controllers/role-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/saved-filters.controller.d.ts +3 -1
- package/dist/controllers/saved-filters.controller.d.ts.map +1 -1
- package/dist/controllers/security-rule.controller.d.ts +3 -1
- package/dist/controllers/security-rule.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.d.ts +3 -1
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/sms-template.controller.d.ts +3 -1
- package/dist/controllers/sms-template.controller.d.ts.map +1 -1
- package/dist/controllers/user-view-metadata.controller.d.ts +3 -1
- package/dist/controllers/user-view-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/user.controller.d.ts +3 -1
- package/dist/controllers/user.controller.d.ts.map +1 -1
- package/dist/controllers/view-metadata.controller.d.ts +3 -1
- package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
- package/dist/dtos/create-saved-filters.dto.d.ts +1 -1
- package/dist/dtos/create-saved-filters.dto.d.ts.map +1 -1
- package/dist/dtos/create-saved-filters.dto.js +3 -3
- package/dist/dtos/create-saved-filters.dto.js.map +1 -1
- package/dist/dtos/update-saved-filters.dto.d.ts +1 -1
- package/dist/dtos/update-saved-filters.dto.d.ts.map +1 -1
- package/dist/dtos/update-saved-filters.dto.js +3 -3
- package/dist/dtos/update-saved-filters.dto.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts +1 -1
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +2 -2
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +1 -8
- package/dist/services/crud-helper.service.d.ts +1 -0
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +18 -0
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +3 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +6 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/media.service.d.ts +3 -1
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/dtos/create-saved-filters.dto.ts +3 -3
- package/src/dtos/update-saved-filters.dto.ts +3 -3
- package/src/entities/saved-filters.entity.ts +1 -1
- package/src/seeders/seed-data/solid-core-metadata.json +1 -8
- package/src/services/crud-helper.service.ts +27 -2
- 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.
|
|
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
|
-
@
|
|
7
|
+
@IsJSON()
|
|
8
8
|
@ApiProperty()
|
|
9
|
-
filterQueryJson:
|
|
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
|
-
@
|
|
9
|
+
@IsJSON()
|
|
10
10
|
@ApiProperty()
|
|
11
|
-
filterQueryJson:
|
|
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:
|
|
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": "
|
|
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
|
-
|
|
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
|
|
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
|
}
|