@solidstarters/solid-core 1.2.23 → 1.2.25

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 (107) hide show
  1. package/dist/controllers/user.controller.d.ts +1 -0
  2. package/dist/controllers/user.controller.d.ts.map +1 -1
  3. package/dist/controllers/user.controller.js +14 -0
  4. package/dist/controllers/user.controller.js.map +1 -1
  5. package/dist/dtos/create-field-metadata.dto.d.ts +3 -4
  6. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  7. package/dist/dtos/create-field-metadata.dto.js +9 -15
  8. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  9. package/dist/dtos/create-media.dto.d.ts +3 -0
  10. package/dist/dtos/create-media.dto.d.ts.map +1 -1
  11. package/dist/dtos/create-media.dto.js +16 -1
  12. package/dist/dtos/create-media.dto.js.map +1 -1
  13. package/dist/entities/field-metadata.entity.d.ts +3 -4
  14. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  15. package/dist/entities/field-metadata.entity.js +10 -14
  16. package/dist/entities/field-metadata.entity.js.map +1 -1
  17. package/dist/entities/media-storage-provider-metadata.entity.js +1 -1
  18. package/dist/entities/media-storage-provider-metadata.entity.js.map +1 -1
  19. package/dist/entities/media.entity.d.ts +3 -0
  20. package/dist/entities/media.entity.d.ts.map +1 -1
  21. package/dist/entities/media.entity.js +13 -1
  22. package/dist/entities/media.entity.js.map +1 -1
  23. package/dist/entities/permission-metadata.entity.js +2 -2
  24. package/dist/entities/permission-metadata.entity.js.map +1 -1
  25. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +2 -2
  26. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  27. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +4 -4
  28. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  29. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +1 -1
  30. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
  31. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +3 -3
  32. package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
  33. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +2 -2
  34. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  35. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +4 -4
  36. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  37. package/dist/helpers/schematic.service.d.ts +1 -0
  38. package/dist/helpers/schematic.service.d.ts.map +1 -1
  39. package/dist/helpers/schematic.service.js +3 -0
  40. package/dist/helpers/schematic.service.js.map +1 -1
  41. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  42. package/dist/seeders/module-metadata-seeder.service.js +14 -2
  43. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  44. package/dist/seeders/seed-data/solid-core-metadata.json +95 -68
  45. package/dist/services/authentication.service.d.ts.map +1 -1
  46. package/dist/services/authentication.service.js +1 -0
  47. package/dist/services/authentication.service.js.map +1 -1
  48. package/dist/services/crud.service.js +9 -9
  49. package/dist/services/crud.service.js.map +1 -1
  50. package/dist/services/field-metadata.service.d.ts.map +1 -1
  51. package/dist/services/field-metadata.service.js +14 -21
  52. package/dist/services/field-metadata.service.js.map +1 -1
  53. package/dist/services/media.service.d.ts.map +1 -1
  54. package/dist/services/media.service.js +17 -3
  55. package/dist/services/media.service.js.map +1 -1
  56. package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
  57. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +4 -1
  58. package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
  59. package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
  60. package/dist/services/mediaStorageProviders/file-storage-provider.js +6 -3
  61. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  62. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  63. package/dist/services/menu-item-metadata.service.js +10 -1
  64. package/dist/services/menu-item-metadata.service.js.map +1 -1
  65. package/dist/services/model-metadata.service.d.ts.map +1 -1
  66. package/dist/services/model-metadata.service.js +1 -0
  67. package/dist/services/model-metadata.service.js.map +1 -1
  68. package/dist/services/role-metadata.service.d.ts +1 -1
  69. package/dist/services/role-metadata.service.d.ts.map +1 -1
  70. package/dist/services/role-metadata.service.js +1 -1
  71. package/dist/services/role-metadata.service.js.map +1 -1
  72. package/dist/services/user.service.d.ts +1 -0
  73. package/dist/services/user.service.d.ts.map +1 -1
  74. package/dist/services/user.service.js +14 -0
  75. package/dist/services/user.service.js.map +1 -1
  76. package/dist/services/view-metadata.service.js +1 -1
  77. package/dist/services/view-metadata.service.js.map +1 -1
  78. package/dist/subscribers/model.subscriber.js +1 -1
  79. package/dist/subscribers/model.subscriber.js.map +1 -1
  80. package/dist/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +2 -1
  82. package/src/controllers/user.controller.ts +8 -0
  83. package/src/dtos/create-field-metadata.dto.ts +7 -12
  84. package/src/dtos/create-media.dto.ts +15 -3
  85. package/src/entities/field-metadata.entity.ts +8 -11
  86. package/src/entities/media-storage-provider-metadata.entity.ts +1 -1
  87. package/src/entities/media.entity.ts +9 -0
  88. package/src/entities/mysql-issues +14 -0
  89. package/src/entities/permission-metadata.entity.ts +2 -2
  90. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +6 -6
  91. package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +4 -4
  92. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +6 -6
  93. package/src/helpers/schematic.service.ts +5 -1
  94. package/src/seeders/module-metadata-seeder.service.ts +15 -3
  95. package/src/seeders/seed-data/solid-core-metadata.json +95 -68
  96. package/src/services/authentication.service.ts +2 -0
  97. package/src/services/crud.service.ts +9 -9
  98. package/src/services/field-metadata.service.ts +14 -21
  99. package/src/services/media.service.ts +35 -5
  100. package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +4 -1
  101. package/src/services/mediaStorageProviders/file-storage-provider.ts +6 -3
  102. package/src/services/menu-item-metadata.service.ts +8 -2
  103. package/src/services/model-metadata.service.ts +1 -0
  104. package/src/services/role-metadata.service.ts +2 -2
  105. package/src/services/user.service.ts +15 -0
  106. package/src/services/view-metadata.service.ts +2 -2
  107. package/src/subscribers/model.subscriber.ts +1 -1
@@ -10,6 +10,9 @@ import { CrudHelperService } from "./crud-helper.service";
10
10
  import { FileService } from "src/services/file.service";
11
11
  import { ConfigService } from "@nestjs/config";
12
12
  import { MediaStorageProviderType } from "../dtos/create-media-storage-provider-metadata.dto";
13
+ import { FileStorageProvider } from "./mediaStorageProviders/file-storage-provider";
14
+ import { FileS3StorageProvider } from "./mediaStorageProviders/file-s3-storage-provider";
15
+ import { getMediaStorageProvider } from "./mediaStorageProviders";
13
16
 
14
17
  @Injectable()
15
18
  export class MediaService {
@@ -32,8 +35,8 @@ export class MediaService {
32
35
  async findMany(basicFilterDto: BasicFilterDto) {
33
36
  const alias = 'media';
34
37
  // Extract the required keys from the input query
35
- let { limit, offset} = basicFilterDto;
36
-
38
+ let { limit, offset } = basicFilterDto;
39
+
37
40
  // Create above query on pincode table using query builder
38
41
  var qb: SelectQueryBuilder<Media> = this.mediaRepo.createQueryBuilder(alias)
39
42
  qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
@@ -174,8 +177,35 @@ export class MediaService {
174
177
  }
175
178
 
176
179
  async remove(id: number) {
177
- const lov = await this.findOne(id);
178
- return this.mediaRepo.remove(lov);
180
+ // const lov = await this.findOne(id);
181
+ const media = await this.mediaRepo.findOne({
182
+ where: {
183
+ id: id,
184
+ },
185
+ relations: ['mediaStorageProviderMetadata', 'fieldMetadata', 'fieldMetadata.model','fieldMetadata.mediaStorageProvider'],
186
+ });
187
+ const modelEntity = await this.modelMetadataRepo.findOne({
188
+ where: {
189
+ id: media.entityId,
190
+ }
191
+ }
192
+ );
193
+ // if (media.mediaStorageProviderMetadata.type === 'filesystem') {
194
+ // const fileStorageProvider = new FileStorageProvider(this.configService, this.fileService, this);
195
+
196
+ // await fileStorageProvider.delete(media, media.fieldMetadata);
197
+
198
+ // } else if (media.mediaStorageProviderMetadata.type === 'aws-s3') {
199
+ // const fileStorageProvider = new FileS3StorageProvider(this.configService, this.fileService, this);
200
+ // await fileStorageProvider.delete(media, media.fieldMetadata);
201
+
202
+ // } else {
203
+ // }
204
+ const storageProviderType = media.mediaStorageProviderMetadata.type as MediaStorageProviderType;
205
+ const storageProvider = getMediaStorageProvider(this.configService, this.fileService, this, storageProviderType);
206
+ await storageProvider.delete(modelEntity, media.fieldMetadata);
207
+
208
+ return this.mediaRepo.remove(media);
179
209
  }
180
210
 
181
211
  async delete(id: number) {
@@ -215,7 +245,7 @@ export class MediaService {
215
245
  // }
216
246
 
217
247
  async findByEntityIdAndFieldIdAndModelMetadataId(entityId: number, fieldMetadataId: number, modelMetadataId: number, relations = {}) {
218
- return this.mediaRepo.find({
248
+ return await this.mediaRepo.find({
219
249
  where: {
220
250
  modelMetadata: {
221
251
  id: modelMetadataId
@@ -51,6 +51,9 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
51
51
  entityId: entity.id,
52
52
  modelMetadataId: mediaFieldMetadata.model.id,
53
53
  relativeUri: awsFileUrl,
54
+ mimeType: file.mimetype,
55
+ fileSize: file.size,
56
+ originalFileName: file.originalname,
54
57
  mediaStorageProviderMetadataId: mediaFieldMetadata.mediaStorageProvider.id,
55
58
  fieldMetadataId: mediaFieldMetadata.id
56
59
  }) as unknown as Media;
@@ -64,7 +67,7 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
64
67
  if (!(entity instanceof CommonEntity)) {
65
68
  throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
66
69
  }
67
- const existingMedia = await this.mediaService.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id);
70
+ const existingMedia = await this.mediaService.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id,['mediaStorageProviderMetadata']);
68
71
  this.mediaService.deleteByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id);
69
72
  existingMedia.forEach(media => {
70
73
  this.fileService.deleteFromS3(media.relativeUri, mediaFieldMetadata.mediaStorageProvider.bucketName); //TODO
@@ -25,7 +25,7 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
25
25
  const media = await this.mediaService.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
26
26
  // Add the full URL to the media
27
27
  media.forEach(m => {
28
- m['_full_url'] = this.getFullFilePath(m.relativeUri);
28
+ m['_full_url'] = `${process.env.BASE_URL}/${this.getFullFilePath(m.relativeUri)}`;
29
29
  });
30
30
  return media;
31
31
  }
@@ -46,6 +46,9 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
46
46
  entityId: entity.id,
47
47
  modelMetadataId: mediaFieldMetadata.model.id,
48
48
  relativeUri: this.getFileName(file),
49
+ mimeType: file.mimetype,
50
+ fileSize: file.size,
51
+ originalFileName: file.originalname,
49
52
  mediaStorageProviderMetadataId: mediaFieldMetadata.mediaStorageProvider.id,
50
53
  fieldMetadataId: mediaFieldMetadata.id
51
54
  }) as unknown as Media;
@@ -59,7 +62,7 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
59
62
  if (!(entity instanceof CommonEntity)) {
60
63
  throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
61
64
  }
62
- const existingMedia = await this.mediaService.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id);
65
+ const existingMedia = await this.mediaService.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id,['mediaStorageProviderMetadata']);
63
66
  this.mediaService.deleteByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id);
64
67
  existingMedia.forEach(media => {
65
68
  this.fileService.deleteFile(this.getFullFilePath(media.relativeUri));
@@ -67,7 +70,7 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
67
70
  }
68
71
 
69
72
  private getFullFilePath(fileName: string): string {
70
- return `${process.env.BASE_URL}/${this.configService.get('app-builder.fileStorageDir')}/${fileName}`;
73
+ return `${this.configService.get('app-builder.fileStorageDir')}/${fileName}`;
71
74
  }
72
75
 
73
76
  private getFileName(file: Express.Multer.File): string {
@@ -148,9 +148,15 @@ export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
148
148
  // Recursive function to build the tree
149
149
  private buildMenuTree(rootItems: MenuItemMetadata[], allMenuItems: MenuItemMetadata[], activeUser: ActiveUserData): any[] {
150
150
  const menuItemsData = rootItems.map(rootItem => {
151
-
151
+ const allowedMenuItems =allMenuItems.filter(i => {
152
+ if(!i.parentMenuItem){
153
+ return true
154
+ }else{
155
+ const hasPermission = hasReadPermissionOnModel(activeUser, i.action.model.singularName);
156
+ return hasReadPermissionOnModel(activeUser, i.action.model.singularName)
157
+ }});
152
158
  // Get immediate children of the current loop variable menuItem.
153
- const children = allMenuItems.filter(item => item.parentMenuItem && item.parentMenuItem.id === rootItem.id);
159
+ const children = allowedMenuItems.filter(item => item.parentMenuItem && item.parentMenuItem.id === rootItem.id);
154
160
 
155
161
  // TODO: We should specify path only if there are no more children present.
156
162
  // For now adding path everywhere.
@@ -902,6 +902,7 @@ export class ModelMetadataService {
902
902
  dataSource: model.dataSource,
903
903
  table: model.tableName,
904
904
  fields: fieldsForRefresh,
905
+ modelEnableSoftDelete: model.enableSoftDelete
905
906
  },
906
907
  dryRun
907
908
  );
@@ -99,8 +99,8 @@ export class RoleMetadataService extends CRUDService<RoleMetadata> {
99
99
  return await this._addPermissionsToRole(roleName, permissionNames);
100
100
  }
101
101
 
102
- async addPermissionToRole(roleName: string, permissionName: string) {
103
- return await this._addPermissionsToRole(roleName, [permissionName]);
102
+ async addPermissionToRole(roleName: string, permissionName: string[]) {
103
+ return await this._addPermissionsToRole(roleName, permissionName);
104
104
  }
105
105
 
106
106
  private async _addPermissionsToRole(roleName: string, permissionNames: string[]): Promise<RoleMetadata> {
@@ -75,6 +75,21 @@ export class UserService extends CRUDService<User> {
75
75
  // return entity;
76
76
  }
77
77
 
78
+ async updateUser(id: any, updateDto, files) {
79
+ const user = await this.repo.findOne({
80
+ where: { id: id },
81
+ relations: {
82
+ roles: true
83
+ }
84
+ });
85
+ if (!user) {
86
+ throw new Error(`User not found.`);
87
+ }
88
+ const roles = updateDto.roles ? updateDto.roles :[];
89
+ await this.addRolesToUser(user.username, roles);
90
+ await this.update(id, updateDto, files, true);
91
+ }
92
+
78
93
  async addRoleToUser(username: string, roleName: string): Promise<User> {
79
94
  // Find the role, find the user and populate the many 2 many table.
80
95
  const user = await this.repo.findOne({
@@ -86,11 +86,11 @@ export class ViewMetadataService extends CRUDService<ViewMetadata> {
86
86
  const field = fields[i];
87
87
 
88
88
  // For fields of type relation & relationType many-to-one
89
- // We fetch metadata regarding the relationModelSingularName
89
+ // We fetch metadata regarding the relationCoModelSingularName
90
90
  if (field.type === 'relation') {
91
91
  const relationModel = await this.modelMetadataRepo.find({
92
92
  where: {
93
- singularName: field.relationModelSingularName
93
+ singularName: field.relationCoModelSingularName
94
94
  },
95
95
  relations: {
96
96
  userKeyField: true
@@ -67,7 +67,7 @@ export class ModelSubscriber implements EntitySubscriberInterface<ModelMetadata>
67
67
  model: event.entity,
68
68
  },
69
69
  ];
70
- transactionManager.save(FieldMetadata, systemFieldsMetadata);
70
+ await transactionManager.save(FieldMetadata, systemFieldsMetadata);
71
71
  // Save to the database.
72
72
  // fieldMetadataRepo.save(systemFieldsMetadata);
73
73