@solidstarters/solid-core 1.2.68 → 1.2.70
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/services/crud.service.d.ts +4 -3
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +25 -16
- package/dist/services/crud.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/services/crud.service.ts +34 -18
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidstarters/solid-core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.70",
|
|
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",
|
|
@@ -34,8 +34,7 @@ import { FileService } from "./file.service";
|
|
|
34
34
|
import { getMediaStorageProvider } from "./mediaStorageProviders";
|
|
35
35
|
import { ModelMetadataService } from "./model-metadata.service";
|
|
36
36
|
import { ModuleMetadataService } from "./module-metadata.service";
|
|
37
|
-
|
|
38
|
-
const DEFAULT_OFFSET = 0;
|
|
37
|
+
import { isArray } from "class-validator";
|
|
39
38
|
export class CRUDService<T> { // Add two generic value i.e Person,CreatePersonDto, so we get the proper types in our service
|
|
40
39
|
|
|
41
40
|
constructor(
|
|
@@ -497,16 +496,15 @@ export class CRUDService<T> { // Add two generic value i.e Person,CreatePersonDt
|
|
|
497
496
|
|
|
498
497
|
// Will iterate through every entity & all populateMedia & call getMediaDetails for each field
|
|
499
498
|
for (const entity of entities) {
|
|
500
|
-
const mediaObj: Record<string, any> = {};
|
|
501
499
|
for (const mediaFieldPath of populateMedia) {
|
|
502
|
-
|
|
500
|
+
await this.populateMediaObject(mediaFieldPath, model, entity);
|
|
503
501
|
}
|
|
504
|
-
entity['_media'] = mediaObj;
|
|
505
502
|
}
|
|
506
503
|
return entities;
|
|
507
504
|
}
|
|
508
505
|
|
|
509
|
-
|
|
506
|
+
// Adds the media with full URL to the entity / nested entity
|
|
507
|
+
private async populateMediaObject(mediaFieldPath: string, model: ModelMetadata, entity: T) {
|
|
510
508
|
if (mediaFieldPath.includes('.')) { // mediaFieldPath is a nested field
|
|
511
509
|
const pathParts = mediaFieldPath.split('.');
|
|
512
510
|
const mediaFieldMetadata = await this.getFieldMetadataRecursively(pathParts, model.fields);
|
|
@@ -515,12 +513,16 @@ export class CRUDService<T> { // Add two generic value i.e Person,CreatePersonDt
|
|
|
515
513
|
}
|
|
516
514
|
|
|
517
515
|
// We can assume that the media field entity model is already populated as part of the entity data
|
|
518
|
-
const
|
|
519
|
-
if (!
|
|
516
|
+
const mediaFieldEntities = this.getMediaFieldEntities(entity, pathParts);
|
|
517
|
+
if (!mediaFieldEntities || mediaFieldEntities.length === 0) {
|
|
520
518
|
throw new BadRequestException(`Media field path ${mediaFieldPath} is not populated in model ${this.modelName}`);
|
|
521
519
|
}
|
|
522
|
-
|
|
523
|
-
|
|
520
|
+
// Populate the media field entities with the full URL
|
|
521
|
+
for (const mediaFieldEntity of mediaFieldEntities) {
|
|
522
|
+
const mediaWithFullUrl = await this.getMediaWithFullUrl(mediaFieldEntity, mediaFieldMetadata);
|
|
523
|
+
this.appendMediaKey(mediaWithFullUrl, mediaFieldEntity, mediaFieldPath);
|
|
524
|
+
// mediaFieldEntity['_media'][mediaFieldPath] = mediaWithFullUrl
|
|
525
|
+
}
|
|
524
526
|
}
|
|
525
527
|
else {
|
|
526
528
|
// mediaFieldPath is a single field
|
|
@@ -529,29 +531,43 @@ export class CRUDService<T> { // Add two generic value i.e Person,CreatePersonDt
|
|
|
529
531
|
throw new BadRequestException(`Media field ${mediaFieldPath} not found in model ${this.modelName}`);
|
|
530
532
|
}
|
|
531
533
|
const mediaWithFullUrl = await this.getMediaWithFullUrl(entity, mediaFieldMetadata);
|
|
532
|
-
|
|
534
|
+
this.appendMediaKey(mediaWithFullUrl, entity, mediaFieldPath);
|
|
535
|
+
// entity['_media'][mediaFieldPath] = mediaWithFullUrl;
|
|
533
536
|
}
|
|
534
537
|
}
|
|
535
538
|
|
|
536
|
-
|
|
537
|
-
|
|
539
|
+
// // Add the media with full URL to the entity
|
|
540
|
+
private appendMediaKey(mediaWithFullUrl: MediaWithFullUrl[], entity: T, mediaFieldPath: string) {
|
|
541
|
+
// if _media key already exists, append the new media to the existing array
|
|
542
|
+
if (entity['_media']) {
|
|
543
|
+
entity['_media'][mediaFieldPath] = mediaWithFullUrl;
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
entity['_media'] = {
|
|
547
|
+
[mediaFieldPath]: mediaWithFullUrl
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
private getMediaFieldEntities(entity: T, mediaPathParts: string[]): T[] {
|
|
553
|
+
let entityPart = entity;
|
|
538
554
|
for (let i = 0; i < mediaPathParts.length - 1; i++) {
|
|
539
555
|
const pathPart = mediaPathParts[i];
|
|
540
|
-
if (
|
|
541
|
-
|
|
556
|
+
if (entity[pathPart]) {
|
|
557
|
+
entityPart = entity[pathPart];
|
|
542
558
|
} else {
|
|
543
559
|
throw new BadRequestException(`Media field ${pathPart} not found in entity ${JSON.stringify(entity)}`);
|
|
544
560
|
}
|
|
545
561
|
}
|
|
546
|
-
return
|
|
562
|
+
return isArray(entityPart) ? entityPart : [entityPart];
|
|
547
563
|
}
|
|
548
564
|
|
|
549
|
-
async getMediaWithFullUrl(mediaEntity: any, mediaFieldMetadata: FieldMetadata): Promise<MediaWithFullUrl>{
|
|
565
|
+
async getMediaWithFullUrl(mediaEntity: any, mediaFieldMetadata: FieldMetadata): Promise<MediaWithFullUrl[]>{
|
|
550
566
|
const storageProviderMetadata = mediaFieldMetadata.mediaStorageProvider;
|
|
551
567
|
const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;
|
|
552
568
|
const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);
|
|
553
569
|
const mediaDetails = await storageProvider.retrieve(mediaEntity, mediaFieldMetadata);
|
|
554
|
-
return mediaDetails as MediaWithFullUrl;
|
|
570
|
+
return mediaDetails as MediaWithFullUrl[];
|
|
555
571
|
}
|
|
556
572
|
|
|
557
573
|
async findOne(id: number, query: any, solidRequestContext: any = {}) {
|