@solidstarters/solid-core 1.2.20 → 1.2.22

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 (94) hide show
  1. package/dist/controllers/model-metadata.controller.d.ts +4 -0
  2. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  3. package/dist/controllers/model-metadata.controller.js +12 -0
  4. package/dist/controllers/model-metadata.controller.js.map +1 -1
  5. package/dist/controllers/test.controller.d.ts.map +1 -1
  6. package/dist/controllers/test.controller.js +2 -2
  7. package/dist/controllers/test.controller.js.map +1 -1
  8. package/dist/dtos/basic-filters.dto.d.ts +5 -2
  9. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  10. package/dist/dtos/basic-filters.dto.js +13 -9
  11. package/dist/dtos/basic-filters.dto.js.map +1 -1
  12. package/dist/dtos/create-field-metadata.dto.d.ts +3 -1
  13. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  14. package/dist/dtos/create-field-metadata.dto.js +7 -1
  15. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  16. package/dist/dtos/create-user.dto.d.ts.map +1 -1
  17. package/dist/dtos/create-user.dto.js +2 -2
  18. package/dist/dtos/create-user.dto.js.map +1 -1
  19. package/dist/entities/field-metadata.entity.d.ts +1 -0
  20. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  21. package/dist/entities/field-metadata.entity.js +5 -1
  22. package/dist/entities/field-metadata.entity.js.map +1 -1
  23. package/dist/helpers/module-metadata-helper.service.d.ts +5 -0
  24. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -0
  25. package/dist/helpers/module-metadata-helper.service.js +61 -0
  26. package/dist/helpers/module-metadata-helper.service.js.map +1 -0
  27. package/dist/helpers/schematic.service.js +1 -1
  28. package/dist/helpers/schematic.service.js.map +1 -1
  29. package/dist/index.d.ts +0 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +0 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/jobs/queue-test-subscriber.service.d.ts +1 -0
  34. package/dist/jobs/queue-test-subscriber.service.d.ts.map +1 -1
  35. package/dist/jobs/queue-test-subscriber.service.js +5 -3
  36. package/dist/jobs/queue-test-subscriber.service.js.map +1 -1
  37. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  38. package/dist/seeders/module-metadata-seeder.service.js +30 -23
  39. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  40. package/dist/seeders/seed-data/solid-core-metadata.json +1 -1
  41. package/dist/services/crud-helper.service.d.ts.map +1 -1
  42. package/dist/services/crud-helper.service.js +6 -4
  43. package/dist/services/crud-helper.service.js.map +1 -1
  44. package/dist/services/crud.service.d.ts.map +1 -1
  45. package/dist/services/crud.service.js +26 -35
  46. package/dist/services/crud.service.js.map +1 -1
  47. package/dist/services/field-metadata.service.d.ts +17 -6
  48. package/dist/services/field-metadata.service.d.ts.map +1 -1
  49. package/dist/services/field-metadata.service.js +253 -34
  50. package/dist/services/field-metadata.service.js.map +1 -1
  51. package/dist/services/model-metadata.service.d.ts +9 -1
  52. package/dist/services/model-metadata.service.d.ts.map +1 -1
  53. package/dist/services/model-metadata.service.js +74 -35
  54. package/dist/services/model-metadata.service.js.map +1 -1
  55. package/dist/services/module-metadata.service.d.ts +3 -3
  56. package/dist/services/module-metadata.service.d.ts.map +1 -1
  57. package/dist/services/module-metadata.service.js +12 -18
  58. package/dist/services/module-metadata.service.js.map +1 -1
  59. package/dist/services/solid-introspect.service.d.ts.map +1 -1
  60. package/dist/services/solid-introspect.service.js +9 -1
  61. package/dist/services/solid-introspect.service.js.map +1 -1
  62. package/dist/solid-core.module.d.ts.map +1 -1
  63. package/dist/solid-core.module.js +2 -0
  64. package/dist/solid-core.module.js.map +1 -1
  65. package/dist/subscribers/softDeleteAwareEventSubscriber.subscriber.d.ts.map +1 -1
  66. package/dist/subscribers/softDeleteAwareEventSubscriber.subscriber.js +1 -1
  67. package/dist/subscribers/softDeleteAwareEventSubscriber.subscriber.js.map +1 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +1 -1
  70. package/src/controllers/model-metadata.controller.ts +6 -0
  71. package/src/controllers/test.controller.ts +4 -2
  72. package/src/dtos/basic-filters.dto.ts +11 -7
  73. package/src/dtos/create-field-metadata.dto.ts +5 -0
  74. package/src/dtos/create-user.dto.ts +1 -1
  75. package/src/entities/field-metadata.entity.ts +3 -0
  76. package/src/helpers/module-metadata-helper.service.ts +25 -0
  77. package/src/helpers/schematic.service.ts +1 -1
  78. package/src/index.ts +0 -1
  79. package/src/jobs/queue-test-subscriber.service.ts +4 -2
  80. package/src/seeders/module-metadata-seeder.service.ts +30 -26
  81. package/src/seeders/seed-data/solid-core-metadata.json +1 -1
  82. package/src/services/crud-helper.service.ts +8 -6
  83. package/src/services/crud.service.ts +14 -22
  84. package/src/services/field-metadata.service.ts +229 -10
  85. package/src/services/model-metadata.service.ts +98 -44
  86. package/src/services/module-metadata.service.ts +13 -18
  87. package/src/services/solid-introspect.service.ts +17 -15
  88. package/src/solid-core.module.ts +2 -0
  89. package/src/subscribers/softDeleteAwareEventSubscriber.subscriber.ts +2 -1
  90. package/dist/commands/basic.command.d.ts +0 -19
  91. package/dist/commands/basic.command.d.ts.map +0 -1
  92. package/dist/commands/basic.command.js +0 -79
  93. package/dist/commands/basic.command.js.map +0 -1
  94. package/src/commands/basic.command.ts +0 -60
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/solid-core",
3
- "version": "1.2.20",
3
+ "version": "1.2.22",
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",
@@ -60,6 +60,12 @@ export class ModelMetadataController {
60
60
  return this.modelMetadataService.create(createDto);
61
61
  }
62
62
 
63
+ @Public()
64
+ @Post('/update-user-key')
65
+ updateUserKey(@Body() data: any) {
66
+ return this.modelMetadataService.updateUserKey(data);
67
+ }
68
+
63
69
  @ApiBearerAuth("jwt")
64
70
  @Post(':id/generate-code')
65
71
  generateCode(@Param('id', ParseIntPipe) id: number) {
@@ -27,8 +27,10 @@ export class TestController {
27
27
  @Post('upload')
28
28
  @UseInterceptors(FileInterceptor('file')) // 'file' here is the name of the field in the form
29
29
  uploadFile(@UploadedFile() file: Express.Multer.File, @Body() body: any) {
30
- console.log(file);
31
- console.log(body);
30
+ // console.log(file);
31
+ this.logger.debug(file);
32
+ // console.log(body);
33
+ this.logger.debug(body);
32
34
  return { filename: file.originalname };
33
35
  }
34
36
 
@@ -1,8 +1,12 @@
1
1
 
2
2
  import { ApiProperty } from "@nestjs/swagger";
3
- import { IsOptional } from "class-validator";
3
+ import { IsEnum, IsOptional } from "class-validator";
4
4
  import { PaginationQueryDto } from "./pagination-query.dto";
5
5
 
6
+ export enum SoftDeleteFilter {
7
+ INCLUSIVE = "inclusive",
8
+ EXCLUSIVE = "exclusive",
9
+ }
6
10
 
7
11
  export class BasicFilterDto extends PaginationQueryDto {
8
12
 
@@ -34,12 +38,12 @@ export class BasicFilterDto extends PaginationQueryDto {
34
38
  // readonly filters: any[];
35
39
 
36
40
  @IsOptional()
37
- @ApiProperty({ description: "showSoftDeleted" })
38
- readonly showSoftDeleted?: boolean;
39
-
40
- @IsOptional()
41
- @ApiProperty({ description: "showOnlySoftDeleted" })
42
- readonly showOnlySoftDeleted?: boolean;
41
+ @IsEnum(SoftDeleteFilter)
42
+ @ApiProperty({
43
+ description: "showSoftDeleted",
44
+ enum: SoftDeleteFilter,
45
+ })
46
+ readonly showSoftDeleted?: SoftDeleteFilter;
43
47
 
44
48
  @IsOptional()
45
49
  @ApiProperty({ description: "populateGroup" })
@@ -142,6 +142,7 @@ export enum MediaType {
142
142
  export enum RelationType {
143
143
  manyToOne = 'many-to-one',
144
144
  manyTomany = 'many-to-many',
145
+ oneToMany = 'one-to-many',
145
146
  }
146
147
 
147
148
  export enum CascadeType {
@@ -320,6 +321,10 @@ export class CreateFieldMetadataDto {
320
321
  @IsOptional()
321
322
  relationModelFieldName: string;
322
323
 
324
+ @ApiProperty({description: 'Only for type=relation, many-to-many. This field is used to set the owner of the many-to-many relation'})
325
+ @IsOptional()
326
+ isRelationManyToManyOwner: boolean;
327
+
323
328
  @ApiProperty({
324
329
  description:
325
330
  'Dynamic provider for selection. Only for type=selectionDynamic',
@@ -29,7 +29,7 @@ export class CreateUserDto {
29
29
 
30
30
  @IsOptional()
31
31
  @IsBoolean()
32
- forcePasswordChange: boolean = true;
32
+ forcePasswordChange: boolean = false;
33
33
 
34
34
  @IsNotEmpty()
35
35
  @IsString()
@@ -99,6 +99,9 @@ export class FieldMetadata extends CommonEntity {
99
99
  @Column({ name: 'relation_model_field_name', nullable: true })
100
100
  relationModelFieldName: string;
101
101
 
102
+ @Column({ name: 'is_relation_many_to_many_owner', nullable: true })
103
+ isRelationManyToManyOwner: boolean;
104
+
102
105
  @Column({ name: 'selection_dynamic_provider', nullable: true })
103
106
  selectionDynamicProvider: string;
104
107
 
@@ -0,0 +1,25 @@
1
+ import { Injectable, ModuleMetadata } from "@nestjs/common";
2
+ import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
3
+ import * as path from 'path'; // To handle file paths
4
+ import { ModuleMetadataConfiguration } from "src/interfaces";
5
+
6
+ @Injectable()
7
+ export class ModuleMetadataHelperService {
8
+ // async getModuleMetadataConfig(moduleName: string): Promise<ModuleMetadata> {
9
+ // const filePath = this.getModuleMetadataFilePath(moduleName);
10
+ // const metadata = await this.getModuleMetadata(filePath);
11
+ // return metadata;
12
+ // }
13
+
14
+ async getModuleMetadataConfiguration(configFilePath: string): Promise<any> {
15
+ const fileContent = await fs.readFile(configFilePath, 'utf8');
16
+ return JSON.parse(fileContent);
17
+ }
18
+
19
+ getModuleMetadataFilePath(moduleName: string): string {
20
+ const folderPath = path.resolve(process.cwd(), 'module-metadata', moduleName);
21
+ const filePath = path.join(folderPath, `${moduleName}-metadata.json`);
22
+ return filePath;
23
+ }
24
+
25
+ }
@@ -82,7 +82,7 @@ export class SchematicService {
82
82
  // console.log('moduleOptions', moduleOptions);
83
83
  const schematicCommand = ` ${baseCommand} --module=${moduleOptions.module}`;
84
84
  // console.log('schematicCommand', schematicCommand);
85
- this.logger.log('schematicCommand', schematicCommand);
85
+ this.logger.debug('schematicCommand', schematicCommand);
86
86
  return schematicCommand;
87
87
  } else {
88
88
  throw new Error('Schematic command not supported.');
package/src/index.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from './commands/basic.command'
2
1
  export * from './commands/helper'
3
2
  export * from './commands/refresh-model.command'
4
3
  export * from './commands/refresh-module.command'
@@ -1,4 +1,4 @@
1
- import { Injectable } from '@nestjs/common';
1
+ import { Injectable, Logger } from '@nestjs/common';
2
2
 
3
3
  import { RabbitMqSubscriber } from 'src/services/rabbitmq-subscriber.service';
4
4
  import { QueueMessage } from 'src/interfaces/mq';
@@ -9,6 +9,7 @@ import { QueuesModuleOptions } from "../interfaces";
9
9
 
10
10
  @Injectable()
11
11
  export class TestQueueSubscriber extends RabbitMqSubscriber<any> {
12
+ private readonly testQueueLogger = new Logger(TestQueueSubscriber.name);
12
13
  constructor(
13
14
  readonly mqMessageService: MqMessageService,
14
15
  readonly mqMessageQueueService: MqMessageQueueService,
@@ -23,6 +24,7 @@ export class TestQueueSubscriber extends RabbitMqSubscriber<any> {
23
24
  }
24
25
 
25
26
  subscribe(message: QueueMessage<any>) {
26
- console.log(`Received message ${JSON.stringify(message)}`);
27
+ // console.log(`Received message ${JSON.stringify(message)}`);
28
+ this.testQueueLogger.debug(`Received message: ${JSON.stringify(message)}`);
27
29
  }
28
30
  }
@@ -88,9 +88,11 @@ export class ModuleMetadataSeederService {
88
88
 
89
89
  // Run the permissions seeder.
90
90
  // await this.permissionsSeederService.seed();
91
+ this.logger.log(`Seeding permissions`);
91
92
  await this.seedPermissions();
92
93
 
93
94
  // TODO: move this also the main loop processing. Generate the media storage providers required by default
95
+ this.logger.log(`Seeding media storage providers`);
94
96
  await this.mediaStorageProviderSeederService.seed();
95
97
 
96
98
  // Read the module metadata from a file specified in the .env
@@ -105,8 +107,9 @@ export class ModuleMetadataSeederService {
105
107
  // ...coreModules.map(module => `src/${module}/seeders/seed-data/${module}-metadata.json`),
106
108
  typedSolidCoreMetadata
107
109
  ];
108
-
110
+ this.logger.debug(`getting dynamics modules`);
109
111
  const enabledModules = getDynamicModuleNames();
112
+ this.logger.log(`Seeding metadata`);
110
113
 
111
114
  for (let i = 0; i < enabledModules.length; i++) {
112
115
  const enabledModule = enabledModules[i];
@@ -119,8 +122,8 @@ export class ModuleMetadataSeederService {
119
122
  }
120
123
  }
121
124
 
122
- this.logger.log(`Seed data files are: ${seedDataFiles}`);
123
-
125
+ this.logger.debug(`Seed data files are: ${seedDataFiles}`);
126
+ let usersDetail;
124
127
  for (let i = 0; i < seedDataFiles.length; i++) {
125
128
 
126
129
  // Module, model & field handling.
@@ -134,76 +137,77 @@ export class ModuleMetadataSeederService {
134
137
 
135
138
  // Process module metadata first.
136
139
  const moduleMetadata: CreateModuleMetadataDto = overallMetadata.moduleMetadata;
137
- this.logger.log(`[Start] Processing module metadata for ${moduleMetadata.name}`)
140
+ this.logger.debug(`[Start] Processing module metadata for ${moduleMetadata.name}`)
138
141
  await this.seedModuleModelFields(moduleMetadata);
139
- this.logger.log(`[End] Processing module metadata for ${moduleMetadata.name}`)
142
+ this.logger.debug(`[End] Processing module metadata for ${moduleMetadata.name}`)
140
143
 
141
144
  // Media Storage provider templates
142
- this.logger.log(`[Start] Processing Media Storage Provider for ${moduleMetadata.name}`);
145
+ this.logger.debug(`[Start] Processing Media Storage Provider for ${moduleMetadata.name}`);
143
146
  const mediaStorageProviders = overallMetadata.mediaStorageProviders;
144
147
  await this.seedMediaStorageProviders(mediaStorageProviders);
145
- this.logger.log(`[End] Processing Media Storage Provider for ${moduleMetadata.name}`);
148
+ this.logger.debug(`[End] Processing Media Storage Provider for ${moduleMetadata.name}`);
146
149
 
147
150
  // TODO: Custom role handling
148
- this.logger.log(`[End] Processing roles for ${moduleMetadata.name}`)
151
+ this.logger.debug(`[End] Processing roles for ${moduleMetadata.name}`)
149
152
  const roles = overallMetadata.roles;
150
153
  await this.roleService.createRolesIfNotExists(roles);
151
- this.logger.log(`[End] Processing roles for ${moduleMetadata.name}`)
154
+ this.logger.debug(`[End] Processing roles for ${moduleMetadata.name}`)
152
155
 
153
156
  // Custom user handling
154
- this.logger.log(`[Start] Processing users for ${moduleMetadata.name}`);
157
+ this.logger.debug(`[Start] Processing users for ${moduleMetadata.name}`);
155
158
  const users = overallMetadata.users;
159
+ usersDetail = users;
156
160
  await this.seedUsers(users);
157
- this.logger.log(`[End] Processing users for ${moduleMetadata.name}`)
161
+ this.logger.debug(`[End] Processing users for ${moduleMetadata.name}`)
158
162
 
159
163
  // Application Module View handling
160
- this.logger.log(`[Start] Processing views for ${moduleMetadata.name}`);
164
+ this.logger.debug(`[Start] Processing views for ${moduleMetadata.name}`);
161
165
  const views = overallMetadata.views;
162
166
  await this.seedViews(views);
163
- this.logger.log(`[End] Processing views for ${moduleMetadata.name}`)
167
+ this.logger.debug(`[End] Processing views for ${moduleMetadata.name}`)
164
168
 
165
169
  // Application Module Action handling
166
- this.logger.log(`[Start] Processing actions for ${moduleMetadata.name}`);
170
+ this.logger.debug(`[Start] Processing actions for ${moduleMetadata.name}`);
167
171
  const actions = overallMetadata.actions;
168
172
  await this.seedActions(actions);
169
- this.logger.log(`[End] Processing actions for ${moduleMetadata.name}`)
173
+ this.logger.debug(`[End] Processing actions for ${moduleMetadata.name}`)
170
174
 
171
175
  // Application Module Menu handling
172
- this.logger.log(`[Start] Processing menus for ${moduleMetadata.name}`);
176
+ this.logger.debug(`[Start] Processing menus for ${moduleMetadata.name}`);
173
177
  const menus = overallMetadata.menus;
174
178
  await this.seedMenus(menus);
175
- this.logger.log(`[End] Processing menus for ${moduleMetadata.name}`)
179
+ this.logger.debug(`[End] Processing menus for ${moduleMetadata.name}`)
176
180
 
177
181
  // Email templates
178
- this.logger.log(`[Start] Processing email templates for ${moduleMetadata.name}`);
182
+ this.logger.debug(`[Start] Processing email templates for ${moduleMetadata.name}`);
179
183
  const emailTemplates: CreateEmailTemplateDto[] = overallMetadata.emailTemplates;
180
184
  await this.seedEmailTemplates(emailTemplates);
181
- this.logger.log(`[End] Processing email templates for ${moduleMetadata.name}`);
185
+ this.logger.debug(`[End] Processing email templates for ${moduleMetadata.name}`);
182
186
 
183
187
  // Sms templates
184
- this.logger.log(`[Start] Processing sms templates for ${moduleMetadata.name}`);
188
+ this.logger.debug(`[Start] Processing sms templates for ${moduleMetadata.name}`);
185
189
  const smsTemplates: CreateSmsTemplateDto[] = overallMetadata.smsTemplates;
186
190
  await this.seedSmsTemplates(smsTemplates);
187
- this.logger.log(`[End] Processing sms templates for ${moduleMetadata.name}`);
191
+ this.logger.debug(`[End] Processing sms templates for ${moduleMetadata.name}`);
188
192
 
189
193
  // Sms templates
190
- this.logger.log(`[Start] Processing settings for ${moduleMetadata.name}`);
194
+ this.logger.debug(`[Start] Processing settings for ${moduleMetadata.name}`);
191
195
  await this.seedSettings(settingsSeederData);
192
- this.logger.log(`[End] Processing settings for ${moduleMetadata.name}`);
196
+ this.logger.debug(`[End] Processing settings for ${moduleMetadata.name}`);
193
197
 
194
- this.logger.log(`[End] module seed data: ${overallMetadata}`);
198
+ this.logger.debug(`[End] module seed data: ${overallMetadata}`);
195
199
 
196
200
  }
197
201
 
198
202
  // Post seed data file processing.
199
203
 
200
204
  // 1. Give all permissions to the Admin role.
201
- this.logger.log(`About to add all permissions to the Admin role`);
205
+ this.logger.debug(`About to add all permissions to the Admin role`);
202
206
  await this.roleService.addAllPermissionsToRole("Admin");
203
207
  // 2. Give wrapSettings permissions to the Public role.
204
208
  await this.roleService.addPermissionToRole('Public', 'SettingController.wrapSettings');
205
209
  this.logger.log(`All Seeders finished`);
206
-
210
+ this.logger.log(`Newly created username is: ${usersDetail?.length > 0 ? usersDetail[0]?.username : ''} and password is ${usersDetail?.length > 0 ? usersDetail[0]?.password : ''}`);
207
211
  }
208
212
 
209
213
 
@@ -2417,7 +2417,7 @@
2417
2417
  "username": "admin@example.service.com",
2418
2418
  "email": "admin@example.service.com",
2419
2419
  "password": "Admin@3214$",
2420
- "forcePasswordChange": false,
2420
+ "forcePasswordChange": true,
2421
2421
  "fullName": "Default Admin"
2422
2422
  }
2423
2423
  ],
@@ -149,7 +149,7 @@ export class CrudHelperService {
149
149
  }
150
150
 
151
151
  buildFilterQuery(qb: SelectQueryBuilder<any>, basicFilterDto: BasicFilterDto, entityAlias: string): SelectQueryBuilder<any> { //TODO : Check how to pass a type to SelectQueryBuilder instead of any
152
- let { limit, offset, showSoftDeleted, showOnlySoftDeleted, filters } = basicFilterDto;
152
+ let { limit, offset, showSoftDeleted, filters } = basicFilterDto;
153
153
  const { fields, sort, groupBy, populate = [] } = basicFilterDto;
154
154
 
155
155
  // Normalize the fields, sort, groupBy and populate options i.e (since they can be either a string or an array of strings, when coming from the request)
@@ -197,11 +197,14 @@ export class CrudHelperService {
197
197
  }
198
198
 
199
199
 
200
- // Apply the soft delete options
201
- if (showSoftDeleted || showOnlySoftDeleted) qb.withDeleted(); // Display the soft deleted records default condition
202
- if (showOnlySoftDeleted) { // Add the condition to show only soft deleted records
203
- qb.andWhere(`${entityAlias}.deletedAt IS NOT NULL`);
200
+ if (showSoftDeleted === 'inclusive') {
201
+ qb.withDeleted();
204
202
  }
203
+
204
+ if (showSoftDeleted === 'exclusive') {
205
+ qb.withDeleted();
206
+ qb.where(`${entityAlias}.deletedAt IS NOT NULL`);
207
+ }
205
208
 
206
209
  // Apply the group by options
207
210
  if (normalizedGroupBy && normalizedGroupBy.length) {
@@ -209,7 +212,6 @@ export class CrudHelperService {
209
212
  qb.addGroupBy(`${entityAlias}.${field}`);
210
213
  });
211
214
  }
212
-
213
215
  // Apply the pagination options
214
216
  if (limit) qb.limit(limit);
215
217
  if (offset) qb.offset(offset);
@@ -66,8 +66,8 @@ export class CRUDService<T> { //Add two generic value i.e Person,CreatePersonDto
66
66
  let hasMediaFields = false;
67
67
 
68
68
  const model = await this.loadModel();
69
- const inverseRelationFields = await this.loadInverseRelationFields();
70
- const fieldsToProcess = [...model.fields, ...inverseRelationFields];
69
+ // const inverseRelationFields = await this.loadInverseRelationFields();
70
+ const fieldsToProcess = [...model.fields];
71
71
 
72
72
  // 2. Loop through the fields with a switch statement
73
73
  // 3. Handle the fields based on field type
@@ -185,8 +185,7 @@ export class CRUDService<T> { //Add two generic value i.e Person,CreatePersonDto
185
185
  let hasMediaFields = false;
186
186
 
187
187
  const model = await this.loadModel();
188
- const inverseRelationFields = await this.loadInverseRelationFields();
189
- const fieldsToProcess = [...model.fields, ...inverseRelationFields];
188
+ const fieldsToProcess = [...model.fields];
190
189
 
191
190
  // 2. Loop through the fields with a switch statement
192
191
  // 3. Handle the fields based on field type
@@ -305,9 +304,7 @@ export class CRUDService<T> { //Add two generic value i.e Person,CreatePersonDto
305
304
  }
306
305
  case SolidFieldType.relation: {
307
306
  // Identify if the field is for the inverse side or not
308
- const inverseSide = (fieldMetadata.model.singularName !== this.modelName) ? true : false;
309
307
  if (fieldMetadata.relationType === RelationType.manyToOne) {
310
- if (!inverseSide) {
311
308
  const manyToOneOptions: ManyToOneRelationFieldOptions = {
312
309
  ...commonOptions,
313
310
  relationModelSingularName: fieldMetadata.relationModelSingularName,
@@ -316,23 +313,20 @@ export class CRUDService<T> { //Add two generic value i.e Person,CreatePersonDto
316
313
  entityManager,
317
314
  }
318
315
  return new ManyToOneRelationFieldCrudManager(manyToOneOptions);
319
- }
320
- else {
321
- const inverseFieldMetadata = fieldMetadata; //Setting an alias for clarity purpose
316
+ }
317
+ else if (fieldMetadata.relationType === RelationType.oneToMany) {
322
318
  const oneToManyOptions: OneToManyRelationFieldOptions = {
323
319
  ...commonOptions,
324
- required: false,
325
- relationModelSingularName: inverseFieldMetadata.model.singularName,
326
- modelSingularName: inverseFieldMetadata.relationModelSingularName,
320
+ relationModelSingularName: fieldMetadata.relationModelSingularName,
321
+ modelSingularName: fieldMetadata.model.singularName,
327
322
  entityManager,
328
- inverseFieldName: inverseFieldMetadata.name,
329
- inverseRelationModelFieldName: inverseFieldMetadata.relationModelFieldName,
323
+ inverseFieldName: fieldMetadata.relationModelFieldName,
324
+ inverseRelationModelFieldName: fieldMetadata.name,
330
325
  }
331
326
  return new OneToManyRelationFieldCrudManager(oneToManyOptions);
332
- }
333
327
  }
334
328
  else if (fieldMetadata.relationType === RelationType.manyTomany) {
335
- if (!inverseSide) {
329
+ if (fieldMetadata.isRelationManyToManyOwner) {
336
330
  const manyToManyOptions: ManyToManyRelationFieldOptions = {
337
331
  ...commonOptions,
338
332
  relationModelSingularName: fieldMetadata.relationModelSingularName,
@@ -344,16 +338,14 @@ export class CRUDService<T> { //Add two generic value i.e Person,CreatePersonDto
344
338
  return new ManyToManyRelationFieldCrudManager(manyToManyOptions);
345
339
  }
346
340
  else {
347
- const inverseFieldMetadata = fieldMetadata; //Setting an alias for clarity purpose
348
341
  const inverseManyToManyOptions: ManyToManyRelationFieldOptions = {
349
342
  ...commonOptions,
350
- required: false,
351
- relationModelSingularName: inverseFieldMetadata.model.singularName,
352
- modelSingularName: inverseFieldMetadata.relationModelSingularName,
343
+ relationModelSingularName: fieldMetadata.relationModelSingularName,
344
+ modelSingularName: fieldMetadata.model.singularName,
353
345
  isInverseSide: true,
354
346
  entityManager,
355
- fieldName: inverseFieldMetadata.name,
356
- relationModelFieldName: inverseFieldMetadata.relationModelFieldName,
347
+ fieldName: fieldMetadata.relationModelFieldName,
348
+ relationModelFieldName: fieldMetadata.name,
357
349
  }
358
350
  return new ManyToManyRelationFieldCrudManager(inverseManyToManyOptions);
359
351
  }