@solidstarters/solid-core 1.2.176 → 1.2.178

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 (31) hide show
  1. package/dist/controllers/authentication.controller.d.ts.map +1 -1
  2. package/dist/controllers/authentication.controller.js +1 -0
  3. package/dist/controllers/authentication.controller.js.map +1 -1
  4. package/dist/controllers/setting.controller.d.ts +2 -2
  5. package/dist/controllers/setting.controller.d.ts.map +1 -1
  6. package/dist/controllers/setting.controller.js +5 -3
  7. package/dist/controllers/setting.controller.js.map +1 -1
  8. package/dist/dtos/create-chatter-message.dto.js +1 -1
  9. package/dist/dtos/create-chatter-message.dto.js.map +1 -1
  10. package/dist/entities/chatter-message.entity.js +1 -1
  11. package/dist/entities/chatter-message.entity.js.map +1 -1
  12. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  13. package/dist/seeders/module-metadata-seeder.service.js +13 -1
  14. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  15. package/dist/seeders/seed-data/solid-core-metadata.json +1 -1
  16. package/dist/services/chatter-message.service.d.ts.map +1 -1
  17. package/dist/services/chatter-message.service.js +29 -6
  18. package/dist/services/chatter-message.service.js.map +1 -1
  19. package/dist/solid-core.module.d.ts.map +1 -1
  20. package/dist/solid-core.module.js +2 -1
  21. package/dist/solid-core.module.js.map +1 -1
  22. package/dist/tsconfig.tsbuildinfo +1 -1
  23. package/package.json +1 -1
  24. package/src/controllers/authentication.controller.ts +1 -0
  25. package/src/controllers/setting.controller.ts +6 -5
  26. package/src/dtos/create-chatter-message.dto.ts +1 -1
  27. package/src/entities/chatter-message.entity.ts +1 -1
  28. package/src/seeders/module-metadata-seeder.service.ts +29 -3
  29. package/src/seeders/seed-data/solid-core-metadata.json +1 -1
  30. package/src/services/chatter-message.service.ts +32 -5
  31. package/src/solid-core.module.ts +2 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/solid-core",
3
- "version": "1.2.176",
3
+ "version": "1.2.178",
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",
@@ -97,6 +97,7 @@ export class AuthenticationController {
97
97
 
98
98
  @ApiBearerAuth("jwt")
99
99
  @Post('logout')
100
+ @Public()
100
101
  @HttpCode(HttpStatus.OK)
101
102
  async logout() {
102
103
  return this.authService.logout();
@@ -1,12 +1,12 @@
1
- import { Controller, Post, Body, Param, UploadedFiles, UseInterceptors, Put, Get, Query, Delete, Patch, ParseArrayPipe, BadRequestException } from '@nestjs/common';
1
+ import { BadRequestException, Body, Controller, Delete, Get, Param, Patch, Post, Put, Query, UploadedFiles, UseInterceptors } from '@nestjs/common';
2
2
  import { AnyFilesInterceptor } from "@nestjs/platform-express";
3
3
  import { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';
4
- import { SettingService } from '../services/setting.service';
5
- import { CreateSettingDto } from '../dtos/create-setting.dto';
6
- import { UpdateSettingDto } from '../dtos/update-setting.dto';
4
+ import { Public } from 'src/decorators/public.decorator';
7
5
  import { SolidRequestContextDecorator } from 'src/decorators/solid-request-context.decorator';
8
6
  import { SolidRequestContextDto } from 'src/dtos/solid-request-context.dto';
9
- import { UpdateSettingsDto } from 'src/dtos/update-settings.dto';
7
+ import { CreateSettingDto } from '../dtos/create-setting.dto';
8
+ import { UpdateSettingDto } from '../dtos/update-setting.dto';
9
+ import { SettingService } from '../services/setting.service';
10
10
 
11
11
  @ApiTags('Solid Core')
12
12
  @Controller('setting') //FIXME: Change this to the model plural name
@@ -44,6 +44,7 @@ export class SettingController {
44
44
 
45
45
  @ApiBearerAuth("jwt")
46
46
  @Get('/wrapped')
47
+ @Public()
47
48
  async wrapSettings() {
48
49
  return this.service.wrapSettings();
49
50
  }
@@ -11,7 +11,7 @@ export class CreateChatterMessageDto {
11
11
  @IsString()
12
12
  @ApiProperty()
13
13
  messageSubType: string;
14
- @IsNotEmpty()
14
+ @IsOptional()
15
15
  @IsString()
16
16
  @ApiProperty()
17
17
  messageBody: string;
@@ -10,7 +10,7 @@ export class ChatterMessage extends CommonEntity {
10
10
  messageType: string; // audit | custom
11
11
  @Column({ type: "varchar" })
12
12
  messageSubType: string; // audit_update | audit_insert | audit_delete | custom
13
- @Column({ type: "text" })
13
+ @Column({ type: "text", nullable: true })
14
14
  messageBody: string;
15
15
  @Index()
16
16
  @Column({ type: "integer" })
@@ -241,21 +241,27 @@ export class ModuleMetadataSeederService {
241
241
  // 1. Give all permissions to the Admin role.
242
242
  this.logger.log(`About to add all permissions to the Admin role`);
243
243
  await this.roleService.addAllPermissionsToRole("Admin");
244
- // 2. Give wrapSettings permissions to the Public role.
244
+ // 2. Give permissions to the Internal / Public role.
245
245
  const internalRolePermission = [
246
- 'UserController.findMany',
246
+ // User permissions
247
+ 'UserController.findMany', //Why do we need this?
247
248
  'UserController.checkIfPermissionExists',
248
249
  'UserController.findOne',
250
+ // Menu permissions
249
251
  'MenuItemMetadataController.findMany',
250
252
  'MenuItemMetadataController.findUserMenus',
251
253
  'MenuItemMetadataController.findOne',
254
+ // View metadata permissions
252
255
  'ViewMetadataController.getLayout',
253
256
  'ViewMetadataController.findMany',
254
257
  'ViewMetadataController.findOne',
258
+ // IAM permissions
255
259
  'AuthenticationController.changePassword',
260
+ // Field Metadata permissions
256
261
  'FieldMetadataController.getSelectionDynamicValues',
257
262
  'FieldMetadataController.getSelectionDynamicValue',
258
263
  'FieldMetadataController.findFieldDefaultMetaData',
264
+ // Saved Filters permissions
259
265
  'SavedFiltersController.delete',
260
266
  'SavedFiltersController.deleteMany',
261
267
  'SavedFiltersController.findOne',
@@ -266,7 +272,27 @@ export class ModuleMetadataSeederService {
266
272
  'SavedFiltersController.update',
267
273
  'SavedFiltersController.insertMany',
268
274
  'SavedFiltersController.create',
269
- 'AuthenticationController.logout'
275
+ // Logout permissions
276
+ 'AuthenticationController.logout',
277
+ // Other permissions can be added here as required.
278
+ // Chatter permissions
279
+ 'ChatterMessageController.create',
280
+ 'ChatterMessageController.getChatterMessages',
281
+ // 'ChatterMessageController.postMessage', // Does not seem to be used from ui
282
+ // Import
283
+ 'ImportTransactionController.getImportTemplate',
284
+ 'ImportTransactionController.getImportInstructions',
285
+ 'ImportTransactionController.getImportMappingInfo',
286
+ 'ImportTransactionController.startImportSync',
287
+ 'ImportTransactionController.startImportAsync',
288
+ 'ImportTransactionController.exportFailedImportedImports',
289
+ // Export permissions
290
+ 'ExportTemplateController.startExportSync',
291
+ 'ExportTemplateController.startExportAsync',
292
+ // List of values
293
+ 'ListOfValuesController.findMany',
294
+ 'ListOfValuesController.findOne',
295
+ // Media // [Not required], since media is always populated as part of a model
270
296
  ]
271
297
  await this.roleService.addPermissionToRole('Internal User', internalRolePermission);
272
298
  await this.roleService.addPermissionToRole('Public', ['SettingController.wrapSettings', 'AuthenticationController.logout']);
@@ -3757,7 +3757,7 @@
3757
3757
  "displayName": "Message Body",
3758
3758
  "type": "longText",
3759
3759
  "ormType": "text",
3760
- "required": true,
3760
+ "required": false,
3761
3761
  "unique": false,
3762
3762
  "index": false,
3763
3763
  "private": false,
@@ -148,7 +148,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
148
148
  messageDetail.oldValue = null;
149
149
  messageDetail.oldValueDisplay = null;
150
150
  messageDetail.newValue = this.formatFieldValue(field, fieldValue);
151
- messageDetail.newValueDisplay = this.formatFieldValueDisplay(field, fieldValue);
151
+ messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, fieldValue);
152
152
  await this.chatterMessageDetailsRepo.save(messageDetail);
153
153
  }
154
154
  }
@@ -263,8 +263,8 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
263
263
  messageDetail.fieldDisplayName = field.displayName;
264
264
  messageDetail.oldValue = this.formatFieldValue(field, oldValue);
265
265
  messageDetail.newValue = this.formatFieldValue(field, newValue);
266
- messageDetail.oldValueDisplay = this.formatFieldValueDisplay(field, oldValue);
267
- messageDetail.newValueDisplay = this.formatFieldValueDisplay(field, newValue);
266
+ messageDetail.oldValueDisplay = await this.formatFieldValueDisplay(field, oldValue);
267
+ messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, newValue);
268
268
  await this.chatterMessageDetailsRepo.save(messageDetail);
269
269
  }
270
270
  }
@@ -328,7 +328,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
328
328
  return value.toString();
329
329
  }
330
330
 
331
- private formatFieldValueDisplay(field: any, value: any): string {
331
+ private async formatFieldValueDisplay(field: any, value: any): Promise<string> {
332
332
  if (value === null || value === undefined) {
333
333
  return '';
334
334
  }
@@ -339,8 +339,30 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
339
339
 
340
340
  if (field.type === 'relation') {
341
341
  if (field.relationType === "many-to-one") {
342
+ if (value.name) {
342
343
  return value.name;
343
344
  }
345
+
346
+ try {
347
+ const relatedModel = await this.modelMetadataRepo.findOne({
348
+ where: { singularName: field.relationCoModelSingularName || field.relation },
349
+ relations: { userKeyField: true }
350
+ });
351
+
352
+ if (relatedModel && relatedModel.userKeyField) {
353
+ const userKeyFieldName = relatedModel.userKeyField.name;
354
+ return value[userKeyFieldName] ? value[userKeyFieldName].toString() : '';
355
+ }
356
+
357
+ if (value.id) {
358
+ return value.id.toString();
359
+ }
360
+ } catch (error) {
361
+ console.error('Error fetching related model metadata:', error);
362
+ return value.id ? value.id.toString() : '';
363
+ }
364
+ }
365
+
344
366
  if (field.relationType === 'many-to-many') {
345
367
  return value.map(item => item.name).join(', ');
346
368
  }
@@ -492,7 +514,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
492
514
  entityName: string,
493
515
  query: any
494
516
  ) {
495
- const { limit = 25, offset = 0, sort, populate = [] } = query;
517
+ const { limit = 25, offset = 0, sort, populate = [], populateMedia = [] } = query;
496
518
 
497
519
  const model = await this.modelMetadataRepo.findOne({
498
520
  where: {
@@ -571,6 +593,11 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
571
593
 
572
594
  const [entities, count] = await qb.getManyAndCount();
573
595
 
596
+ if (populateMedia && populateMedia.length > 0) {
597
+ const normalizedPopulateMedia = this.crudHelperService.normalize(populateMedia);
598
+ await this['handlePopulateMedia'](normalizedPopulateMedia, entities);
599
+ }
600
+
574
601
  const currentPage = Math.floor(offset / limit) + 1;
575
602
  const totalPages = Math.ceil(count / limit);
576
603
  const nextPage = currentPage < totalPages ? currentPage + 1 : null;
@@ -693,7 +693,8 @@ import { ViewMetadataSubsciber } from './subscribers/view-metadata.subscriber';
693
693
  ChatterMessageService,
694
694
  ChatterMessageRepository,
695
695
  ChatterMessageDetailsService,
696
- ChatterMessageDetailsRepository
696
+ ChatterMessageDetailsRepository,
697
+ TypeOrmModule
697
698
  // ThrottlerModule,
698
699
  ],
699
700
  })