@solidxai/core 0.1.13-beta.20 → 0.1.13-beta.21

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 (57) hide show
  1. package/CHANGELOG.md +590 -0
  2. package/CLAUDE.md +5 -6
  3. package/dist/constants/media-file-types.d.ts.map +1 -1
  4. package/dist/constants/media-file-types.js +1 -0
  5. package/dist/constants/media-file-types.js.map +1 -1
  6. package/dist/dtos/create-field-metadata.dto.d.ts +1 -0
  7. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  8. package/dist/dtos/create-field-metadata.dto.js +12 -1
  9. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  10. package/dist/entities/field-metadata.entity.d.ts +1 -0
  11. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  12. package/dist/entities/field-metadata.entity.js +5 -1
  13. package/dist/entities/field-metadata.entity.js.map +1 -1
  14. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +6 -0
  15. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
  16. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +54 -27
  17. package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
  18. package/dist/services/chatter-message.service.d.ts +1 -0
  19. package/dist/services/chatter-message.service.d.ts.map +1 -1
  20. package/dist/services/chatter-message.service.js +44 -12
  21. package/dist/services/chatter-message.service.js.map +1 -1
  22. package/dist/services/crud.service.d.ts.map +1 -1
  23. package/dist/services/crud.service.js +1 -0
  24. package/dist/services/crud.service.js.map +1 -1
  25. package/dist/services/field-metadata.service.d.ts.map +1 -1
  26. package/dist/services/field-metadata.service.js +2 -0
  27. package/dist/services/field-metadata.service.js.map +1 -1
  28. package/dist/services/media.service.d.ts.map +1 -1
  29. package/dist/services/media.service.js +1 -0
  30. package/dist/services/media.service.js.map +1 -1
  31. package/dist/services/module-metadata.service.d.ts.map +1 -1
  32. package/dist/services/module-metadata.service.js +7 -0
  33. package/dist/services/module-metadata.service.js.map +1 -1
  34. package/dist/services/setting.service.d.ts.map +1 -1
  35. package/dist/services/setting.service.js +4 -0
  36. package/dist/services/setting.service.js.map +1 -1
  37. package/dist/services/settings/default-settings-provider.service.d.ts +20 -0
  38. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  39. package/dist/services/settings/default-settings-provider.service.js +14 -0
  40. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  41. package/dist/solid-core.module.d.ts.map +1 -1
  42. package/dist/solid-core.module.js +6 -0
  43. package/dist/solid-core.module.js.map +1 -1
  44. package/package.json +1 -1
  45. package/src/constants/media-file-types.ts +1 -0
  46. package/src/dtos/create-field-metadata.dto.ts +14 -1
  47. package/src/entities/field-metadata.entity.ts +3 -0
  48. package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +73 -34
  49. package/src/services/chatter-message.service.ts +56 -14
  50. package/src/services/crud.service.ts +1 -0
  51. package/src/services/field-metadata.service.ts +2 -0
  52. package/src/services/media.service.ts +1 -0
  53. package/src/services/module-metadata.service.ts +7 -0
  54. package/src/services/setting.service.ts +5 -0
  55. package/src/services/settings/default-settings-provider.service.ts +14 -0
  56. package/src/solid-core.module.ts +13 -0
  57. package/postman/mpin.postman_collection.json +0 -1045
@@ -1 +1 @@
1
- {"version":3,"file":"field-metadata.service.js","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '../helpers/string.helper';\nimport { Injectable, Logger, NotFoundException, OnApplicationBootstrap } from '@nestjs/common';\nimport { InjectDataSource } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { ComputedFieldMetadata, SolidRegistry } from 'src/helpers/solid-registry';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { DataSource, Repository, SelectQueryBuilder } from 'typeorm';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { CascadeType, ComputedFieldValueType, CreateFieldMetadataDto, DecryptWhenType, EncryptionType, MSSQLType, PSQLType, RelationType, SelectionValueType, SolidFieldType } from '../dtos/create-field-metadata.dto';\nimport { SelectionDynamicQueryDto } from '../dtos/selection-dynamic-query.dto';\nimport { UpdateFieldMetaDataDto } from '../dtos/update-field-metadata.dto';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ISelectionProviderValues, MediaStorageProvider } from '../interfaces';\nimport { MEDIA_CATEGORIES } from '../constants/media-file-types';\nimport { CrudHelperService } from './crud-helper.service';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport qs from 'qs';\nimport { ResolveS3UrlDto } from 'src/dtos/resolve-s3-url.dto';\nimport { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';\nimport { S3FileService } from './file';\nimport { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';\n\n@Injectable()\nexport class FieldMetadataService implements OnApplicationBootstrap {\n constructor(\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n private readonly fileService: S3FileService,\n private readonly mediaStorageProviderMetadataRepository: MediaStorageProviderMetadataRepository,\n\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly solidRegistry: SolidRegistry,\n private readonly crudHelperService: CrudHelperService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n ) { }\n\n private logger = new Logger(FieldMetadataService.name);\n\n onApplicationBootstrap() {\n this.loadAndRegisterComputedFieldsDetails();\n }\n\n async loadAndRegisterComputedFieldsDetails() {\n // Load all the modules and models and within that load all the computed fields\n const computedFieldsWithModelAndModule = await this.fieldMetadataRepo.findComputedFieldsPopulatedWithModelAndModule();\n\n // Convert the computed fields object above to the ComputedFieldMetadata type\n const computedFieldMetadata: ComputedFieldMetadata[] = computedFieldsWithModelAndModule.map((field) => {\n // const defaultComputedFieldTriggerConfig: ComputedFieldTriggerConfig = {\n // moduleName: field.model.module.name,\n // modelName: field.model.singularName,\n // operations: [ComputedFieldTriggerOperation.create, ComputedFieldTriggerOperation.update, ComputedFieldTriggerOperation.delete], // Default operations, can be overridden\n // }\n return {\n moduleName: field.model.module.name,\n modelName: field.model.singularName,\n fieldName: field.name,\n computedFieldValueType: field.computedFieldValueType as ComputedFieldValueType,\n computedFieldTriggerConfig: field.computedFieldTriggerConfig ?? [], // Ensure it's an array, default to empty if not provided\n computedFieldValueProviderName: field.computedFieldValueProvider,\n computedFieldValueProviderCtxt: field.computedFieldValueProviderCtxt ? JSON.parse(field.computedFieldValueProviderCtxt) : {}, // Parse the context if it exists, default to empty object\n eventContext: {}\n };\n });\n\n // Register the computed fields in the SolidRegistry. Capture only computed field related info\n this.solidRegistry.registerComputedFieldMetadata(computedFieldMetadata);\n }\n\n async updateInverseField(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n if (!field.model || !field.model.module) {\n throw new Error(ERROR_MESSAGES.MODEL_AND_MODULE_REQUIRED_TO_UPDATE_INVERSE_FIELD);\n }\n // Update the inverse field in the db\n const savedInverseField = await this.updateInverseFieldInDb(field, fieldRepository, modelRepository);\n // Update the inverse field in the file\n this.updateRelationInverseFieldInFile(savedInverseField, field.relationCoModelSingularName, field.model.module.name);\n }\n\n private async updateInverseFieldInDb(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>): Promise<FieldMetadata> {\n const { moduleName, modelName } = this.validateForInverseField(field);\n\n // Get the relation model reference\n const relationModel = await this.getRelationModel(modelRepository, field, moduleName);\n\n // const {id, createdAt, updatedAt, deletedAt, ...fieldKeys} = field;\n switch (field.relationType) {\n case RelationType.manyToOne: {\n const fieldName = field.relationCoModelFieldName || `${modelName}s`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.oneToMany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.oneToMany: {\n const fieldName = field.relationCoModelFieldName || `${modelName}`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyToOne,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.manyTomany: {\n const fieldName = field.relationCoModelFieldName;\n // Logic to create a manyToMany inverse field definition\n const inverseFieldManyToMany: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyTomany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: null,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n isRelationManyToManyOwner: false,\n id: null,\n }\n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseFieldManyToMany);\n return savedField;\n }\n default:\n throw new Error(`Invalid relation type for field ${field.name} with relation type ${field.relationType}`);\n }\n }\n\n private async getRelationModel(modelRepository: Repository<ModelMetadata>, field: FieldMetadata, moduleName: string) {\n return await modelRepository.findOne({\n where: {\n singularName: field.relationCoModelSingularName,\n module: {\n name: field.relationModelModuleName ?? moduleName\n }\n }\n });\n }\n\n private async saveInverseField(fieldRepository: Repository<FieldMetadata>, relationModel: ModelMetadata, inverseField: FieldMetadata): Promise<FieldMetadata> {\n const existingInverseField = await fieldRepository.findOne({\n where: {\n model: { id: relationModel.id },\n name: inverseField.name\n }\n });\n\n if (existingInverseField) {\n return existingInverseField; // No need to update if it already exists\n }\n else {\n const savedField = await fieldRepository.save(fieldRepository.create(inverseField));\n return savedField;\n }\n }\n\n private validateForInverseField(field: FieldMetadata) {\n if (field.type !== SolidFieldType.relation) {\n throw new Error(ERROR_MESSAGES.INVALID_INVERSE_FIELD_TYPE);\n }\n const modelName = field.model.singularName;\n const moduleName = field.model.module.name;\n\n if (!modelName || !moduleName) {\n throw new Error(ERROR_MESSAGES.MODEL_NAME_AND_MODULE_NAME_REQUIRED_TO_CREATE_INVERSE_FIELD);\n }\n return { moduleName, modelName };\n }\n\n async find(basicFilterDto: BasicFilterDto) {\n return this.findMany(basicFilterDto);\n }\n\n async findMany(basicFilterDto: BasicFilterDto) {\n const alias = 'fieldMetadata';\n // Extract the required keys from the input query\n let { limit, offset, populateMedia } = basicFilterDto;\n\n // Create above query on pincode table using query builder\n var qb: SelectQueryBuilder<FieldMetadata> = await this.fieldMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)\n qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);\n\n // Get the records and the count\n const [entities, count] = await qb.getManyAndCount();\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n const r = {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n return r\n }\n\n async findOne(id: any, query?: any) {\n // const { fields, filters, populate } = basicFilterDto;\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query && query?.populate,\n });\n if (!entity) {\n throw new NotFoundException(`entity #${id} not found`);\n }\n return entity;\n }\n\n async findByNameAndModelName(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n return entity;\n }\n\n async selectionStaticValues(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n if (!entity) {\n return [];\n }\n\n const selectionStaticValues = entity.selectionStaticValues;\n if (!selectionStaticValues) {\n return [];\n }\n\n return this.convertToSelectionProviderValues(selectionStaticValues);\n }\n\n convertToSelectionProviderValues(selectionStaticValues: string[]): ISelectionProviderValues[] {\n // return selectionStaticValues.split(',').map((item) => {\n // const [value, label] = item.split(':');\n // return { label, value };\n // });\n return selectionStaticValues.map((item) => {\n const [value, label] = item.split(':');\n return { label, value };\n });\n }\n\n async create(createDto: CreateFieldMetadataDto) {\n createDto['model'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['modelId']\n },\n });\n createDto['mediaStorageProvider'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['mediaStorageProviderId']\n },\n });\n\n const moduleMetadata = this.fieldMetadataRepo.create(createDto);\n return this.fieldMetadataRepo.save(moduleMetadata);\n }\n\n // async update(id: number, updateCountryDto: UpdateCountryDto) {\n\n // const country = await this.fieldMetadataRepo.preload({\n // id,\n // ...updateCountryDto,\n // });\n\n // if (!country) {\n // throw new NotFoundException(`Country ${id} not found`);\n // }\n // return this.moduleMetadataRepo.save(country);\n // }\n\n async delete(id: number) {\n const entity = await this.findOne(id);\n return this.fieldMetadataRepo.remove(entity);\n }\n\n async findFieldDefaultMetaData() {\n\n // Function to convert enum to array of objects\n const enumToResponseArray = (enumObj: any) => {\n return Object.entries(enumObj).map(([key, value]) => ({\n label: value,\n value: value,\n }));\n };\n\n // Orm Data type and Solid Dat Type Mapping\n const ormFieldTypeForSolid = this.getOrmFieldTypes();\n\n // Fetch Data Source Type \n const dataSourceTypes = Object.keys(ormFieldTypeForSolid); // [\"psql\"]\n\n const fieldTypes = Object.entries(ormFieldTypeForSolid.postgres).map(([key, value]) => ({\n type: key,\n label: key,\n value: key,\n fieldType: key,\n ormTypes: value.ormTypes,\n fields: this.fetchCurrentFields(key)\n }));\n\n const dataSource = this.solidRegistry.getSolidDatabaseModules().map((solidDatabaseModule) => {\n return {\n 'name': solidDatabaseModule.instance.name(),\n 'type': solidDatabaseModule.instance.type()\n }\n });\n\n // Creating response arrays for each enum\n // Get all selection providers. \n const sps = [];\n const selectionProviders = this.solidRegistry.getSelectionProviders();\n for (let i = 0; i < selectionProviders.length; i++) {\n const selectionProvider = selectionProviders[i];\n sps.push({\n provider: selectionProvider.instance.name(),\n help: selectionProvider.instance.help(),\n });\n }\n\n const cps = [];\n const computedProviders = this.solidRegistry.getComputedFieldProviders();\n for (let i = 0; i < computedProviders.length; i++) {\n const computedProvider = computedProviders[i];\n cps.push({\n provider: computedProvider.instance.name(),\n help: computedProvider.instance.help(),\n });\n }\n\n const r = {\n // Field Types with ormtypes, available fields \n fieldTypes: fieldTypes,\n encryptionTypes: enumToResponseArray(EncryptionType),\n ormType: ormFieldTypeForSolid,\n decryptWhenTypes: enumToResponseArray(DecryptWhenType),\n mediaTypes: MEDIA_CATEGORIES.map((value) => ({ label: value, value })),\n relationTypes: enumToResponseArray(RelationType),\n selectionDynamicProviders: sps,\n computedProviders: cps,\n cascadeTypes: enumToResponseArray(CascadeType),\n selectionValueTypes: enumToResponseArray(SelectionValueType),\n computedFieldValueTypes: enumToResponseArray(ComputedFieldValueType),\n dataSourceType: dataSourceTypes,\n dataSource: dataSource,\n };\n\n return r\n }\n\n private getOrmFieldTypes() {\n return {\n \"postgres\": {\n // Numeric types\n \"int\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"A 4-byte integer for general numeric data.\" }]\n },\n \"bigint\": {\n \"ormTypes\": [{ label: PSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }]\n },\n \"decimal\": {\n \"ormTypes\": [{ label: PSQLType.decimal, description: \"A high-precision numeric type, ideal for financial data.\" }]\n },\n\n // Text types\n \"shortText\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"A variable-length string for short text.\" }]\n },\n \"longText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or unbounded strings.\" }]\n },\n \"richText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or formatted content.\" }]\n },\n \"json\": {\n \"ormTypes\": [\n // { label: PSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: PSQLType.json, description: \"Stores JSON data without indexing.\" },\n { label: PSQLType.jsonb, description: \"Stores JSON data with indexing for faster queries.\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n \"ormTypes\": [{ label: PSQLType.boolean, description: \"Stores true or false values.\" }]\n },\n\n // Date and time types\n \"date\": {\n \"ormTypes\": [{ label: PSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }]\n },\n \"datetime\": {\n \"ormTypes\": [\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n \"time\": {\n \"ormTypes\": [\n { label: PSQLType.time, description: \"Stores time values (HH:MM:SS).\" },\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n\n // Relation\n \"relation\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"Used for foreign keys referencing other entities.\" }]\n },\n\n // Media types\n \"mediaSingle\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }]\n },\n \"mediaMultiple\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }]\n },\n\n // Email and password\n \"email\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores email addresses.\" }]\n },\n \"password\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores hashed or plain-text passwords.\" }]\n },\n\n // Selection types\n \"selectionStatic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for predefined selection options.\" }]\n },\n \"selectionDynamic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for dynamic selection options.\" }]\n },\n\n // Computed and external ID\n \"computed\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Represents computed or derived fields.\" }]\n },\n \"uuid\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores universally unique identifiers (UUIDs).\" }]\n }\n },\n \"mssql\": {\n // Numeric types\n \"int\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"A 4-byte integer for general numeric data.\" }\n ]\n },\n \"bigint\": {\n ormTypes: [\n { label: MSSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }\n ]\n },\n \"decimal\": {\n ormTypes: [\n { label: MSSQLType.numeric, description: \"A high-precision numeric type for financial or exact values.\" },\n { label: MSSQLType.decimal, description: \"A high-precision decimal type for financial or exact values.\" }\n ]\n },\n\n // Text types\n \"shortText\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"A variable-length string for short text.\" },\n { label: MSSQLType.nvarchar, description: \"A unicode supported variable-length string for short text.\" }\n ]\n },\n \"longText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large or unbounded string type.\" }\n ]\n },\n \"richText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large text field for formatted or long content.\" }\n ]\n },\n \"json\": {\n ormTypes: [\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.nvarchar, description: \"Stores JSON data as string (MSSQL doesn't have native JSON type).\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n ormTypes: [\n { label: MSSQLType.bit, description: \"Stores true or false values as 0 or 1.\" }\n ]\n },\n\n // Date and time types\n \"date\": {\n ormTypes: [\n { label: MSSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }\n ]\n },\n \"datetime\": {\n ormTypes: [\n { label: MSSQLType.datetime, description: \"Stores date and time without timezone.\" },\n { label: MSSQLType.datetime2, description: \"High-precision date and time type.\" }\n ]\n },\n \"time\": {\n ormTypes: [\n { label: MSSQLType.time, description: \"Stores time values (HH:MM:SS).\" }\n ]\n },\n\n // Relation\n \"relation\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"Used for foreign keys referencing other entities.\" }\n ]\n },\n\n // Media types\n \"mediaSingle\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }\n ]\n },\n \"mediaMultiple\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }\n ]\n },\n\n // Email and password\n \"email\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores email addresses.\" }\n ]\n },\n \"password\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores hashed or plain-text passwords.\" }\n ]\n },\n\n // Selection types\n \"selectionStatic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for predefined selection options.\" }\n ]\n },\n \"selectionDynamic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for dynamic selection options.\" }\n ]\n },\n\n // Computed and external ID\n \"computed\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Represents computed or derived fields.\" }\n ]\n },\n \"uuid\": {\n ormTypes: [\n { label: MSSQLType.uniqueidentifier, description: \"Stores universally unique identifiers (UUIDs).\" }\n ]\n }\n }\n };\n }\n\n async fetchCurrentFieldsBasedOnType(type: string) {\n return this.fetchCurrentFields(type);\n }\n\n private fetchCurrentFields(solidFieldType: string) {\n switch (solidFieldType) {\n case SolidFieldType.int:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.bigint:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n // case SolidFieldType.float:\n // return [\n // \"name\",\n // \"displayName\",\n // \"description\",\n // \"type\",\n // \"ormType\",\n // \"isSystem\",\n // \"defaultValue\",\n // \"required\",\n // \"unique\",\n // \"index\",\n // \"private\",\n // \"encrypt\",\n // \"encryptionType\",\n // \"decryptWhen\"\n // ];\n\n case SolidFieldType.decimal:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.shortText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.longtext:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.richText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.json:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.boolean:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n // \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.date:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.datetime:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.time:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.relation:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"relationType\",\n \"relationCoModelFieldName\",\n \"relationCreateInverse\",\n \"relationCoModelSingularName\",\n \"relationCoModelColumnName\",\n \"relationModelModuleName\",\n \"relationCascade\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"relationJoinTableName\",\n \"isRelationManyToManyOwner\",\n \"relationFieldFixedFilter\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.mediaSingle:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.mediaMultiple:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.email:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.password:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"min\",\n \"max\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.selectionStatic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"selectionStaticValues\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n\n case SolidFieldType.selectionDynamic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"selectionDynamicProvider\",\n \"selectionDynamicProviderCtxt\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n case SolidFieldType.computed:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"computedFieldValueType\",\n \"computedFieldTriggerConfig\",\n \"computedFieldValueProvider\",\n \"computedFieldValueProviderCtxt\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.uuid:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"uuid\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n default:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n }\n }\n\n async fetchAllDataSources() {\n // Initialize the data source\n // await AppDataSource.initialize();\n\n // // Get all entities metadata\n // const entities = AppDataSource.entityMetadatas;\n\n // // Create an array to hold the data sources\n // const dataSources = entities.map(entity => ({\n // name: entity.name,\n // tableName: entity.tableName,\n // columns: entity.columns.map(column => ({\n // propertyName: column.propertyName,\n // databaseName: column.databaseName,\n // type: column.type,\n // })),\n // }));\n\n // return dataSources;\n }\n\n async upsert(updateDto: UpdateFieldMetaDataDto) {\n // First check if module already exists using name\n const existingFieldMetadata = await this.fieldMetadataRepo.findOne({\n where: {\n //@ts-ignore\n model: { id: updateDto.model.id },\n name: updateDto.name\n }\n })\n\n // if found\n if (existingFieldMetadata) {\n const hasChanges = Object.entries(updateDto).some(([key, value]) => {\n if (key === 'model') {\n return existingFieldMetadata.model?.id !== value?.id;\n }\n if (key === 'mediaStorageProvider') {\n return existingFieldMetadata.mediaStorageProvider?.id !== value?.id;\n }\n const currentValue = existingFieldMetadata[key];\n if (Array.isArray(currentValue) || Array.isArray(value)) {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n if (value && typeof value === 'object') {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n return currentValue !== value;\n });\n\n if (!hasChanges) {\n return existingFieldMetadata;\n }\n\n const updatedFieldMetadata = { ...existingFieldMetadata, ...updateDto };\n return this.fieldMetadataRepo.save(updatedFieldMetadata);\n }\n // if not found - create new \n else {\n const fieldMetadata = this.fieldMetadataRepo.create(updateDto);\n return this.fieldMetadataRepo.save(fieldMetadata);\n }\n }\n\n async getSelectionDynamicValues(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.values(query.query, selectionDynamicProviderCtxt);\n }\n\n async getSelectionDynamicValue(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.value(query.optionValue, selectionDynamicProviderCtxt);\n }\n\n private async updateRelationInverseFieldInFile(savedInverseField: FieldMetadata, inverseModelName: string, moduleName: string) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Create the config object for the inverse field\n const fieldObject: Record<string, any> = await this.createFieldConfig(savedInverseField);\n\n // Find the field config object in the json file\n const model = metaData.moduleMetadata.models.find((model: any) => model.singularName === inverseModelName);\n\n // Replace the current field object with the above field object\n const fieldIndex = model.fields.findIndex((field: any) => field.name === savedInverseField.name);\n if (fieldIndex === -1) {\n model.fields.push(fieldObject);\n }\n else {\n model.fields[fieldIndex] = fieldObject;\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n } catch (error: any) {\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n //Moved existing reusable logic to a separate function\n async createFieldConfig(field: FieldMetadata) {\n const fieldsRequiredBasedOnType = await this.fetchCurrentFieldsBasedOnType(field.type);\n const fieldObject: Record<string, any> = {};\n\n // Assign default or placeholder values for required fields\n fieldsRequiredBasedOnType.forEach((requiredField) => {\n fieldObject[requiredField] = field[requiredField];\n });\n\n if (field.type == \"mediaSingle\" || field.type == \"mediaMultiple\") {\n if (field.mediaStorageProvider) {\n delete fieldObject.mediaStorageProviderId\n fieldObject.mediaStorageProviderUserKey = field.mediaStorageProvider.name\n }\n }\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = field.isMarkedForRemoval;\n }\n\n return fieldObject;\n }\n\n async resolveS3Url(resolveS3UrlDto: ResolveS3UrlDto) {\n const normalizedKey = this.normalizeS3Key(resolveS3UrlDto.s3Key);\n\n let resolvedBucketName = resolveS3UrlDto.bucketName;\n if (resolveS3UrlDto.mediaStorageProviderUserKey) {\n const mediaStorageProvider = await this.mediaStorageProviderMetadataRepository.findOne({\n where: {\n name: resolveS3UrlDto.mediaStorageProviderUserKey\n }\n });\n if (!mediaStorageProvider) {\n throw new NotFoundException(`MediaStorageProviderMetadata with user key ${resolveS3UrlDto.mediaStorageProviderUserKey} not found`);\n }\n resolvedBucketName = mediaStorageProvider.bucketName;\n }\n this.logger.debug(`INSIDE::resolveS3Url:: resolvedBucketName: ${resolvedBucketName}`)\n\n const expiryInSeconds = resolveS3UrlDto.isPrivate == \"true\" ? 60 * 60 : 0;\n const url = await this.fileService.getUrl(`${resolvedBucketName}:${normalizedKey}`, {\n expiresIn: expiryInSeconds,\n });\n\n return { url: url }\n }\n\n private normalizeS3Key(input: string): string {\n try {\n const url = new URL(input);\n\n // remove leading slash from pathname\n return decodeURIComponent(url.pathname.replace(/^\\/+/, \"\"));\n } catch {\n // not a valid URL → treat as raw S3 key\n return input;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"field-metadata.service.js","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { classify } from '../helpers/string.helper';\nimport { Injectable, Logger, NotFoundException, OnApplicationBootstrap } from '@nestjs/common';\nimport { InjectDataSource } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { ComputedFieldMetadata, SolidRegistry } from 'src/helpers/solid-registry';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { DataSource, Repository, SelectQueryBuilder } from 'typeorm';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { CascadeType, ComputedFieldValueType, CreateFieldMetadataDto, DecryptWhenType, EncryptionType, MSSQLType, PSQLType, RelationType, SelectionValueType, SolidFieldType } from '../dtos/create-field-metadata.dto';\nimport { SelectionDynamicQueryDto } from '../dtos/selection-dynamic-query.dto';\nimport { UpdateFieldMetaDataDto } from '../dtos/update-field-metadata.dto';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ISelectionProviderValues, MediaStorageProvider } from '../interfaces';\nimport { MEDIA_CATEGORIES } from '../constants/media-file-types';\nimport { CrudHelperService } from './crud-helper.service';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport qs from 'qs';\nimport { ResolveS3UrlDto } from 'src/dtos/resolve-s3-url.dto';\nimport { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';\nimport { S3FileService } from './file';\nimport { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';\n\n@Injectable()\nexport class FieldMetadataService implements OnApplicationBootstrap {\n constructor(\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n private readonly fileService: S3FileService,\n private readonly mediaStorageProviderMetadataRepository: MediaStorageProviderMetadataRepository,\n\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly solidRegistry: SolidRegistry,\n private readonly crudHelperService: CrudHelperService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n ) { }\n\n private logger = new Logger(FieldMetadataService.name);\n\n onApplicationBootstrap() {\n this.loadAndRegisterComputedFieldsDetails();\n }\n\n async loadAndRegisterComputedFieldsDetails() {\n // Load all the modules and models and within that load all the computed fields\n const computedFieldsWithModelAndModule = await this.fieldMetadataRepo.findComputedFieldsPopulatedWithModelAndModule();\n\n // Convert the computed fields object above to the ComputedFieldMetadata type\n const computedFieldMetadata: ComputedFieldMetadata[] = computedFieldsWithModelAndModule.map((field) => {\n // const defaultComputedFieldTriggerConfig: ComputedFieldTriggerConfig = {\n // moduleName: field.model.module.name,\n // modelName: field.model.singularName,\n // operations: [ComputedFieldTriggerOperation.create, ComputedFieldTriggerOperation.update, ComputedFieldTriggerOperation.delete], // Default operations, can be overridden\n // }\n return {\n moduleName: field.model.module.name,\n modelName: field.model.singularName,\n fieldName: field.name,\n computedFieldValueType: field.computedFieldValueType as ComputedFieldValueType,\n computedFieldTriggerConfig: field.computedFieldTriggerConfig ?? [], // Ensure it's an array, default to empty if not provided\n computedFieldValueProviderName: field.computedFieldValueProvider,\n computedFieldValueProviderCtxt: field.computedFieldValueProviderCtxt ? JSON.parse(field.computedFieldValueProviderCtxt) : {}, // Parse the context if it exists, default to empty object\n eventContext: {}\n };\n });\n\n // Register the computed fields in the SolidRegistry. Capture only computed field related info\n this.solidRegistry.registerComputedFieldMetadata(computedFieldMetadata);\n }\n\n async updateInverseField(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n if (!field.model || !field.model.module) {\n throw new Error(ERROR_MESSAGES.MODEL_AND_MODULE_REQUIRED_TO_UPDATE_INVERSE_FIELD);\n }\n // Update the inverse field in the db\n const savedInverseField = await this.updateInverseFieldInDb(field, fieldRepository, modelRepository);\n // Update the inverse field in the file\n this.updateRelationInverseFieldInFile(savedInverseField, field.relationCoModelSingularName, field.model.module.name);\n }\n\n private async updateInverseFieldInDb(field: FieldMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>): Promise<FieldMetadata> {\n const { moduleName, modelName } = this.validateForInverseField(field);\n\n // Get the relation model reference\n const relationModel = await this.getRelationModel(modelRepository, field, moduleName);\n\n // const {id, createdAt, updatedAt, deletedAt, ...fieldKeys} = field;\n switch (field.relationType) {\n case RelationType.manyToOne: {\n const fieldName = field.relationCoModelFieldName || `${modelName}s`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.oneToMany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.oneToMany: {\n const fieldName = field.relationCoModelFieldName || `${modelName}`;\n const inverseField: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyToOne,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: field.relationCascade,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n id: null,\n }\n\n // Load the inverse field, \n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseField);\n return savedField;\n }\n case RelationType.manyTomany: {\n const fieldName = field.relationCoModelFieldName;\n // Logic to create a manyToMany inverse field definition\n const inverseFieldManyToMany: FieldMetadata = {\n ...field,\n name: fieldName,\n displayName: classify(fieldName),\n description: classify(fieldName),\n type: SolidFieldType.relation,\n isSystem: field.isSystem,\n relationType: RelationType.manyTomany,\n relationCoModelSingularName: modelName,\n relationCreateInverse: true,\n relationCascade: null,\n relationModelModuleName: moduleName,\n relationCoModelFieldName: field.name,\n required: false,\n unique: false,\n index: false,\n private: false,\n encrypt: false,\n model: relationModel,\n columnName: null,\n relationJoinTableName: null,\n isRelationManyToManyOwner: false,\n id: null,\n }\n const savedField = await this.saveInverseField(fieldRepository, relationModel, inverseFieldManyToMany);\n return savedField;\n }\n default:\n throw new Error(`Invalid relation type for field ${field.name} with relation type ${field.relationType}`);\n }\n }\n\n private async getRelationModel(modelRepository: Repository<ModelMetadata>, field: FieldMetadata, moduleName: string) {\n return await modelRepository.findOne({\n where: {\n singularName: field.relationCoModelSingularName,\n module: {\n name: field.relationModelModuleName ?? moduleName\n }\n }\n });\n }\n\n private async saveInverseField(fieldRepository: Repository<FieldMetadata>, relationModel: ModelMetadata, inverseField: FieldMetadata): Promise<FieldMetadata> {\n const existingInverseField = await fieldRepository.findOne({\n where: {\n model: { id: relationModel.id },\n name: inverseField.name\n }\n });\n\n if (existingInverseField) {\n return existingInverseField; // No need to update if it already exists\n }\n else {\n const savedField = await fieldRepository.save(fieldRepository.create(inverseField));\n return savedField;\n }\n }\n\n private validateForInverseField(field: FieldMetadata) {\n if (field.type !== SolidFieldType.relation) {\n throw new Error(ERROR_MESSAGES.INVALID_INVERSE_FIELD_TYPE);\n }\n const modelName = field.model.singularName;\n const moduleName = field.model.module.name;\n\n if (!modelName || !moduleName) {\n throw new Error(ERROR_MESSAGES.MODEL_NAME_AND_MODULE_NAME_REQUIRED_TO_CREATE_INVERSE_FIELD);\n }\n return { moduleName, modelName };\n }\n\n async find(basicFilterDto: BasicFilterDto) {\n return this.findMany(basicFilterDto);\n }\n\n async findMany(basicFilterDto: BasicFilterDto) {\n const alias = 'fieldMetadata';\n // Extract the required keys from the input query\n let { limit, offset, populateMedia } = basicFilterDto;\n\n // Create above query on pincode table using query builder\n var qb: SelectQueryBuilder<FieldMetadata> = await this.fieldMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)\n qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);\n\n // Get the records and the count\n const [entities, count] = await qb.getManyAndCount();\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n const r = {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n return r\n }\n\n async findOne(id: any, query?: any) {\n // const { fields, filters, populate } = basicFilterDto;\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query && query?.populate,\n });\n if (!entity) {\n throw new NotFoundException(`entity #${id} not found`);\n }\n return entity;\n }\n\n async findByNameAndModelName(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n return entity;\n }\n\n async selectionStaticValues(modelSingularName: string, fieldName: string) {\n\n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n name: fieldName,\n model: {\n singularName: modelSingularName\n }\n },\n });\n\n if (!entity) {\n return [];\n }\n\n const selectionStaticValues = entity.selectionStaticValues;\n if (!selectionStaticValues) {\n return [];\n }\n\n return this.convertToSelectionProviderValues(selectionStaticValues);\n }\n\n convertToSelectionProviderValues(selectionStaticValues: string[]): ISelectionProviderValues[] {\n // return selectionStaticValues.split(',').map((item) => {\n // const [value, label] = item.split(':');\n // return { label, value };\n // });\n return selectionStaticValues.map((item) => {\n const [value, label] = item.split(':');\n return { label, value };\n });\n }\n\n async create(createDto: CreateFieldMetadataDto) {\n createDto['model'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['modelId']\n },\n });\n createDto['mediaStorageProvider'] = await this.dataSource.getRepository(ModelMetadata).findOne({\n where: {\n id: createDto['mediaStorageProviderId']\n },\n });\n\n const moduleMetadata = this.fieldMetadataRepo.create(createDto);\n return this.fieldMetadataRepo.save(moduleMetadata);\n }\n\n // async update(id: number, updateCountryDto: UpdateCountryDto) {\n\n // const country = await this.fieldMetadataRepo.preload({\n // id,\n // ...updateCountryDto,\n // });\n\n // if (!country) {\n // throw new NotFoundException(`Country ${id} not found`);\n // }\n // return this.moduleMetadataRepo.save(country);\n // }\n\n async delete(id: number) {\n const entity = await this.findOne(id);\n return this.fieldMetadataRepo.remove(entity);\n }\n\n async findFieldDefaultMetaData() {\n\n // Function to convert enum to array of objects\n const enumToResponseArray = (enumObj: any) => {\n return Object.entries(enumObj).map(([key, value]) => ({\n label: value,\n value: value,\n }));\n };\n\n // Orm Data type and Solid Dat Type Mapping\n const ormFieldTypeForSolid = this.getOrmFieldTypes();\n\n // Fetch Data Source Type \n const dataSourceTypes = Object.keys(ormFieldTypeForSolid); // [\"psql\"]\n\n const fieldTypes = Object.entries(ormFieldTypeForSolid.postgres).map(([key, value]) => ({\n type: key,\n label: key,\n value: key,\n fieldType: key,\n ormTypes: value.ormTypes,\n fields: this.fetchCurrentFields(key)\n }));\n\n const dataSource = this.solidRegistry.getSolidDatabaseModules().map((solidDatabaseModule) => {\n return {\n 'name': solidDatabaseModule.instance.name(),\n 'type': solidDatabaseModule.instance.type()\n }\n });\n\n // Creating response arrays for each enum\n // Get all selection providers. \n const sps = [];\n const selectionProviders = this.solidRegistry.getSelectionProviders();\n for (let i = 0; i < selectionProviders.length; i++) {\n const selectionProvider = selectionProviders[i];\n sps.push({\n provider: selectionProvider.instance.name(),\n help: selectionProvider.instance.help(),\n });\n }\n\n const cps = [];\n const computedProviders = this.solidRegistry.getComputedFieldProviders();\n for (let i = 0; i < computedProviders.length; i++) {\n const computedProvider = computedProviders[i];\n cps.push({\n provider: computedProvider.instance.name(),\n help: computedProvider.instance.help(),\n });\n }\n\n const r = {\n // Field Types with ormtypes, available fields \n fieldTypes: fieldTypes,\n encryptionTypes: enumToResponseArray(EncryptionType),\n ormType: ormFieldTypeForSolid,\n decryptWhenTypes: enumToResponseArray(DecryptWhenType),\n mediaTypes: MEDIA_CATEGORIES.map((value) => ({ label: value, value })),\n relationTypes: enumToResponseArray(RelationType),\n selectionDynamicProviders: sps,\n computedProviders: cps,\n cascadeTypes: enumToResponseArray(CascadeType),\n selectionValueTypes: enumToResponseArray(SelectionValueType),\n computedFieldValueTypes: enumToResponseArray(ComputedFieldValueType),\n dataSourceType: dataSourceTypes,\n dataSource: dataSource,\n };\n\n return r\n }\n\n private getOrmFieldTypes() {\n return {\n \"postgres\": {\n // Numeric types\n \"int\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"A 4-byte integer for general numeric data.\" }]\n },\n \"bigint\": {\n \"ormTypes\": [{ label: PSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }]\n },\n \"decimal\": {\n \"ormTypes\": [{ label: PSQLType.decimal, description: \"A high-precision numeric type, ideal for financial data.\" }]\n },\n\n // Text types\n \"shortText\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"A variable-length string for short text.\" }]\n },\n \"longText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or unbounded strings.\" }]\n },\n \"richText\": {\n \"ormTypes\": [{ label: PSQLType.text, description: \"A text type for large or formatted content.\" }]\n },\n \"json\": {\n \"ormTypes\": [\n // { label: PSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: PSQLType.json, description: \"Stores JSON data without indexing.\" },\n { label: PSQLType.jsonb, description: \"Stores JSON data with indexing for faster queries.\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n \"ormTypes\": [{ label: PSQLType.boolean, description: \"Stores true or false values.\" }]\n },\n\n // Date and time types\n \"date\": {\n \"ormTypes\": [{ label: PSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }]\n },\n \"datetime\": {\n \"ormTypes\": [\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n \"time\": {\n \"ormTypes\": [\n { label: PSQLType.time, description: \"Stores time values (HH:MM:SS).\" },\n { label: PSQLType.timestamp, description: \"Stores date and time without time zones.\" },\n { label: PSQLType.timestamptz, description: \"Stores date and time with time zones.\" }\n ]\n },\n\n // Relation\n \"relation\": {\n \"ormTypes\": [{ label: PSQLType.integer, description: \"Used for foreign keys referencing other entities.\" }]\n },\n\n // Media types\n \"mediaSingle\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }]\n },\n \"mediaMultiple\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }]\n },\n\n // Email and password\n \"email\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores email addresses.\" }]\n },\n \"password\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores hashed or plain-text passwords.\" }]\n },\n\n // Selection types\n \"selectionStatic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for predefined selection options.\" }]\n },\n \"selectionDynamic\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Used for dynamic selection options.\" }]\n },\n\n // Computed and external ID\n \"computed\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Represents computed or derived fields.\" }]\n },\n \"uuid\": {\n \"ormTypes\": [{ label: PSQLType.varchar, description: \"Stores universally unique identifiers (UUIDs).\" }]\n }\n },\n \"mssql\": {\n // Numeric types\n \"int\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"A 4-byte integer for general numeric data.\" }\n ]\n },\n \"bigint\": {\n ormTypes: [\n { label: MSSQLType.bigint, description: \"An 8-byte integer for large numeric values.\" }\n ]\n },\n \"decimal\": {\n ormTypes: [\n { label: MSSQLType.numeric, description: \"A high-precision numeric type for financial or exact values.\" },\n { label: MSSQLType.decimal, description: \"A high-precision decimal type for financial or exact values.\" }\n ]\n },\n\n // Text types\n \"shortText\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"A variable-length string for short text.\" },\n { label: MSSQLType.nvarchar, description: \"A unicode supported variable-length string for short text.\" }\n ]\n },\n \"longText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large or unbounded string type.\" }\n ]\n },\n \"richText\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"A large text field for formatted or long content.\" }\n ]\n },\n \"json\": {\n ormTypes: [\n { label: MSSQLType.simplejson, description: \"Creates DB agnostic column for storing json style data.\" },\n { label: MSSQLType.nvarchar, description: \"Stores JSON data as string (MSSQL doesn't have native JSON type).\" }\n ]\n },\n\n // Boolean types\n \"boolean\": {\n ormTypes: [\n { label: MSSQLType.bit, description: \"Stores true or false values as 0 or 1.\" }\n ]\n },\n\n // Date and time types\n \"date\": {\n ormTypes: [\n { label: MSSQLType.date, description: \"Stores calendar dates (YYYY-MM-DD).\" }\n ]\n },\n \"datetime\": {\n ormTypes: [\n { label: MSSQLType.datetime, description: \"Stores date and time without timezone.\" },\n { label: MSSQLType.datetime2, description: \"High-precision date and time type.\" }\n ]\n },\n \"time\": {\n ormTypes: [\n { label: MSSQLType.time, description: \"Stores time values (HH:MM:SS).\" }\n ]\n },\n\n // Relation\n \"relation\": {\n ormTypes: [\n { label: MSSQLType.int, description: \"Used for foreign keys referencing other entities.\" }\n ]\n },\n\n // Media types\n \"mediaSingle\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for single media files.\" }\n ]\n },\n \"mediaMultiple\": {\n ormTypes: [\n { label: MSSQLType.varchar, description: \"Stores file paths or URLs for multiple media files.\" }\n ]\n },\n\n // Email and password\n \"email\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores email addresses.\" }\n ]\n },\n \"password\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Stores hashed or plain-text passwords.\" }\n ]\n },\n\n // Selection types\n \"selectionStatic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for predefined selection options.\" }\n ]\n },\n \"selectionDynamic\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Used for dynamic selection options.\" }\n ]\n },\n\n // Computed and external ID\n \"computed\": {\n ormTypes: [\n { label: MSSQLType.nvarchar, description: \"Represents computed or derived fields.\" }\n ]\n },\n \"uuid\": {\n ormTypes: [\n { label: MSSQLType.uniqueidentifier, description: \"Stores universally unique identifiers (UUIDs).\" }\n ]\n }\n }\n };\n }\n\n async fetchCurrentFieldsBasedOnType(type: string) {\n return this.fetchCurrentFields(type);\n }\n\n private fetchCurrentFields(solidFieldType: string) {\n switch (solidFieldType) {\n case SolidFieldType.int:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.bigint:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n // case SolidFieldType.float:\n // return [\n // \"name\",\n // \"displayName\",\n // \"description\",\n // \"type\",\n // \"ormType\",\n // \"isSystem\",\n // \"defaultValue\",\n // \"required\",\n // \"unique\",\n // \"index\",\n // \"private\",\n // \"encrypt\",\n // \"encryptionType\",\n // \"decryptWhen\"\n // ];\n\n case SolidFieldType.decimal:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.shortText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.longtext:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.richText:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.json:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n // \"min\",\n // \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.boolean:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n // \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.date:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.datetime:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.time:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.relation:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"relationType\",\n \"relationCoModelFieldName\",\n \"relationCreateInverse\",\n \"relationCoModelSingularName\",\n \"relationCoModelColumnName\",\n \"relationModelModuleName\",\n \"relationCascade\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"relationJoinTableName\",\n \"isRelationManyToManyOwner\",\n \"relationFieldFixedFilter\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.mediaSingle:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaAllowedExtensions\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.mediaMultiple:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"mediaTypes\",\n \"mediaMaxSizeKb\",\n \"mediaAllowedExtensions\",\n \"mediaStorageProviderId\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.email:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isPrimaryKey\"\n ];\n\n case SolidFieldType.password:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"min\",\n \"max\",\n \"regexPattern\",\n \"regexPatternNotMatchingErrorMsg\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n\n case SolidFieldType.selectionStatic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"defaultValue\",\n \"selectionStaticValues\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n\n case SolidFieldType.selectionDynamic:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"selectionDynamicProvider\",\n \"selectionDynamicProviderCtxt\",\n \"selectionValueType\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\",\n \"isMultiSelect\"\n ];\n case SolidFieldType.computed:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"computedFieldValueType\",\n \"computedFieldTriggerConfig\",\n \"computedFieldValueProvider\",\n \"computedFieldValueProviderCtxt\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\",\n \"isUserKey\",\n \"enableAuditTracking\"\n ];\n\n case SolidFieldType.uuid:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"uuid\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n default:\n return [\n \"name\",\n \"displayName\",\n \"description\",\n \"type\",\n \"ormType\",\n \"isSystem\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\n ];\n }\n }\n\n async fetchAllDataSources() {\n // Initialize the data source\n // await AppDataSource.initialize();\n\n // // Get all entities metadata\n // const entities = AppDataSource.entityMetadatas;\n\n // // Create an array to hold the data sources\n // const dataSources = entities.map(entity => ({\n // name: entity.name,\n // tableName: entity.tableName,\n // columns: entity.columns.map(column => ({\n // propertyName: column.propertyName,\n // databaseName: column.databaseName,\n // type: column.type,\n // })),\n // }));\n\n // return dataSources;\n }\n\n async upsert(updateDto: UpdateFieldMetaDataDto) {\n // First check if module already exists using name\n const existingFieldMetadata = await this.fieldMetadataRepo.findOne({\n where: {\n //@ts-ignore\n model: { id: updateDto.model.id },\n name: updateDto.name\n }\n })\n\n // if found\n if (existingFieldMetadata) {\n const hasChanges = Object.entries(updateDto).some(([key, value]) => {\n if (key === 'model') {\n return existingFieldMetadata.model?.id !== value?.id;\n }\n if (key === 'mediaStorageProvider') {\n return existingFieldMetadata.mediaStorageProvider?.id !== value?.id;\n }\n const currentValue = existingFieldMetadata[key];\n if (Array.isArray(currentValue) || Array.isArray(value)) {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n if (value && typeof value === 'object') {\n return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);\n }\n return currentValue !== value;\n });\n\n if (!hasChanges) {\n return existingFieldMetadata;\n }\n\n const updatedFieldMetadata = { ...existingFieldMetadata, ...updateDto };\n return this.fieldMetadataRepo.save(updatedFieldMetadata);\n }\n // if not found - create new \n else {\n const fieldMetadata = this.fieldMetadataRepo.create(updateDto);\n return this.fieldMetadataRepo.save(fieldMetadata);\n }\n }\n\n async getSelectionDynamicValues(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.values(query.query, selectionDynamicProviderCtxt);\n }\n\n async getSelectionDynamicValue(query: SelectionDynamicQueryDto) {\n // 1. use the id to identify the field. \n const entity = await this.fieldMetadataRepo.findOne({\n where: {\n id: query.fieldId,\n },\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));\n }\n\n // 2. use the field metadata to identify the provider. \n const selectionDynamicProvider = entity.selectionDynamicProvider;\n const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');\n selectionDynamicProviderCtxt['limit'] = query.limit;\n selectionDynamicProviderCtxt['offset'] = query.offset;\n const formValues = query.formValues || {};\n // Parse the form values if they are in string format using qs\n const parsedFormValues = typeof formValues === 'string' ? qs.parse(formValues, { allowDots: true }) : formValues;\n selectionDynamicProviderCtxt['formValues'] = parsedFormValues;\n\n // 3. get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);\n if (!selectionProviderInstance) {\n throw new NotFoundException(ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));\n }\n\n // 4. use the provider to fetch the dynamic values, pass the query string received from the UI.. \n return selectionProviderInstance.value(query.optionValue, selectionDynamicProviderCtxt);\n }\n\n private async updateRelationInverseFieldInFile(savedInverseField: FieldMetadata, inverseModelName: string, moduleName: string) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Create the config object for the inverse field\n const fieldObject: Record<string, any> = await this.createFieldConfig(savedInverseField);\n\n // Find the field config object in the json file\n const model = metaData.moduleMetadata.models.find((model: any) => model.singularName === inverseModelName);\n\n // Replace the current field object with the above field object\n const fieldIndex = model.fields.findIndex((field: any) => field.name === savedInverseField.name);\n if (fieldIndex === -1) {\n model.fields.push(fieldObject);\n }\n else {\n model.fields[fieldIndex] = fieldObject;\n }\n\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n } catch (error: any) {\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n //Moved existing reusable logic to a separate function\n async createFieldConfig(field: FieldMetadata) {\n const fieldsRequiredBasedOnType = await this.fetchCurrentFieldsBasedOnType(field.type);\n const fieldObject: Record<string, any> = {};\n\n // Assign default or placeholder values for required fields\n fieldsRequiredBasedOnType.forEach((requiredField) => {\n fieldObject[requiredField] = field[requiredField];\n });\n\n if (field.type == \"mediaSingle\" || field.type == \"mediaMultiple\") {\n if (field.mediaStorageProvider) {\n delete fieldObject.mediaStorageProviderId\n fieldObject.mediaStorageProviderUserKey = field.mediaStorageProvider.name\n }\n }\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = field.isMarkedForRemoval;\n }\n\n return fieldObject;\n }\n\n async resolveS3Url(resolveS3UrlDto: ResolveS3UrlDto) {\n const normalizedKey = this.normalizeS3Key(resolveS3UrlDto.s3Key);\n\n let resolvedBucketName = resolveS3UrlDto.bucketName;\n if (resolveS3UrlDto.mediaStorageProviderUserKey) {\n const mediaStorageProvider = await this.mediaStorageProviderMetadataRepository.findOne({\n where: {\n name: resolveS3UrlDto.mediaStorageProviderUserKey\n }\n });\n if (!mediaStorageProvider) {\n throw new NotFoundException(`MediaStorageProviderMetadata with user key ${resolveS3UrlDto.mediaStorageProviderUserKey} not found`);\n }\n resolvedBucketName = mediaStorageProvider.bucketName;\n }\n this.logger.debug(`INSIDE::resolveS3Url:: resolvedBucketName: ${resolvedBucketName}`)\n\n const expiryInSeconds = resolveS3UrlDto.isPrivate == \"true\" ? 60 * 60 : 0;\n const url = await this.fileService.getUrl(`${resolvedBucketName}:${normalizedKey}`, {\n expiresIn: expiryInSeconds,\n });\n\n return { url: url }\n }\n\n private normalizeS3Key(input: string): string {\n try {\n const url = new URL(input);\n\n // remove leading slash from pathname\n return decodeURIComponent(url.pathname.replace(/^\\/+/, \"\"));\n } catch {\n // not a valid URL → treat as raw S3 key\n return input;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"media.service.d.ts","sourceRoot":"","sources":["../../src/services/media.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAW,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAIlF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,sCAAsC,EAAE,MAAM,2DAA2D,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAInF,qBACa,YAAa,SAAQ,WAAW,CAAC,KAAK,CAAC;IAIhD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,eAAe,EAAE,eAAe;IACzC,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAExC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,eAAe;IAQ9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gCAAgC;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAtB/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;gBAG7C,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EACpB,uBAAuB,EAAE,uBAAuB,EAExD,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,eAAe,EAQb,iBAAiB,EAAE,uBAAuB,EAC1C,gCAAgC,EAAE,sCAAsC,EACxE,iBAAiB,EAAE,uBAAuB,EAClD,SAAS,EAAE,SAAS;IAKzB,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,mBAAmB,GAAE,GAAQ;IAalE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,GAAQ,EAAE,mBAAmB,GAAE,GAAQ;IAQlE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAE,GAAQ;IAmDxF,MAAM,CAAC,EAAE,EAAE,MAAM;IAqBjB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BhI,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,mBAAmB,GAAE,GAAQ;IAmBhD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,mBAAmB,GAAE,GAAQ;YAyB/C,oBAAoB;YAqBpB,oBAAoB;YAMpB,mBAAmB;YAKnB,eAAe;YAsBf,kBAAkB;YAyClB,2BAA2B;CAgB1C"}
1
+ {"version":3,"file":"media.service.d.ts","sourceRoot":"","sources":["../../src/services/media.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAW,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAIlF,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,sCAAsC,EAAE,MAAM,2DAA2D,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAInF,qBACa,YAAa,SAAQ,WAAW,CAAC,KAAK,CAAC;IAIhD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,eAAe,EAAE,eAAe;IACzC,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAExC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAGrC,QAAQ,CAAC,IAAI,EAAE,eAAe;IAQ9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gCAAgC;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAtB/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;gBAG7C,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EACpB,uBAAuB,EAAE,uBAAuB,EAExD,aAAa,EAAE,aAAa,EAG5B,IAAI,EAAE,eAAe,EAQb,iBAAiB,EAAE,uBAAuB,EAC1C,gCAAgC,EAAE,sCAAsC,EACxE,iBAAiB,EAAE,uBAAuB,EAClD,SAAS,EAAE,SAAS;IAKzB,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,mBAAmB,GAAE,GAAQ;IAalE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,GAAQ,EAAE,mBAAmB,GAAE,GAAQ;IAQlE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAE,GAAQ;IAoDxF,MAAM,CAAC,EAAE,EAAE,MAAM;IAqBjB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BhI,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,mBAAmB,GAAE,GAAQ;IAmBhD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,mBAAmB,GAAE,GAAQ;YAyB/C,oBAAoB;YAqBpB,oBAAoB;YAMpB,mBAAmB;YAKnB,eAAe;YAsBf,kBAAkB;YAyClB,2BAA2B;CAgB1C"}
@@ -132,6 +132,7 @@ let MediaService = MediaService_1 = class MediaService extends crud_service_1.CR
132
132
  fieldName: 'files',
133
133
  mediaMaxSizeKb: createDto['fieldMetadata']?.mediaMaxSizeKb,
134
134
  mediaTypes: createDto['fieldMetadata']?.mediaTypes || [],
135
+ mediaAllowedExtensions: createDto['fieldMetadata']?.mediaAllowedExtensions || [],
135
136
  isUpdate: false,
136
137
  });
137
138
  const validationErrors = validator.validate(createDto, files);
@@ -1 +1 @@
1
- {"version":3,"file":"media.service.js","sourceRoot":"","sources":["../../src/services/media.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager, In, Not } from 'typeorm';\nimport * as path from 'path';\nimport { Readable } from 'stream';\n\nimport { ConfigService } from '@nestjs/config';\nimport { CRUDService } from 'src/services/crud.service';\nimport { DiskFileService, S3FileService } from 'src/services/file';\nimport { classify } from 'src/helpers/string.helper';\nimport { MediaDownloadUrlService } from 'src/services/media-download-url.service';\n\n\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { BasicFilterDto } from 'src/dtos/basic-filters.dto';\nimport { MediaStorageProviderType } from 'src/dtos/create-media-storage-provider-metadata.dto';\nimport { Media } from 'src/entities/media.entity';\nimport { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';\nimport { MediaFieldCrudManager, SolidMediaType } from 'src/helpers/field-crud-managers/MediaFieldCrudManager';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';\nimport { MediaRepository } from 'src/repository/media.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { buildDiskMediaPath, getEffectiveS3Region, resolveMediaIsPublic, } from 'src/services/media-storage.utils';\nimport { getMediaStorageProvider } from \"./mediaStorageProviders\";\n\n@Injectable()\nexport class MediaService extends CRUDService<Media> {\n private readonly logger = new Logger(MediaService.name);\n\n constructor(\n readonly configService: ConfigService,\n readonly diskFileService: DiskFileService,\n readonly s3FileService: S3FileService,\n private readonly mediaDownloadUrlService: MediaDownloadUrlService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(Media, 'default')\n // readonly repo: Repository<Media>,\n readonly repo: MediaRepository,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n // @InjectRepository(MediaStorageProviderMetadata)\n // private readonly mediaStorageProviderMetadataRepo: Repository<MediaStorageProviderMetadata>,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly mediaStorageProviderMetadataRepo: MediaStorageProviderMetadataRepository,\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n readonly moduleRef: ModuleRef,\n ) {\n super(entityManager, repo, 'media', 'solid-core', moduleRef);\n }\n\n async find(basicFilterDto: BasicFilterDto, solidRequestContext: any = {}) {\n const data = await super.find(basicFilterDto, solidRequestContext);\n if (data.records) {\n await this.decorateMediaRecords(data.records);\n }\n if (data.groupRecords) {\n for (const group of data.groupRecords) {\n await this.decorateMediaRecords(group.groupData.records);\n }\n }\n return data\n }\n\n async findOne(id: number, query: any = {}, solidRequestContext: any = {}) {\n const media = await super.findOne(id, query, solidRequestContext);\n if (media) {\n await this.decorateMediaRecord(media);\n }\n return media;\n }\n\n async upload(createDto: any, files: Array<Express.Multer.File>, _solidRequestContext: any = {}) {\n\n if (!files || files.length === 0) {\n throw new NotFoundException(ERROR_MESSAGES.FILE_NOT_FOUND);\n\n }\n\n createDto['fieldMetadata'] = await this.fieldMetadataRepo.findOne({\n where: {\n id: createDto['fieldMetadataId']\n },\n relations: ['mediaStorageProvider', 'model'],\n });\n createDto['modelMetadata'] = await this.modelMetadataRepo.findOne({\n where: {\n id: createDto['modelMetadataId']\n },\n });\n createDto['mediaStorageProviderMetadata'] = await this.mediaStorageProviderMetadataRepo.findOne({\n where: {\n id: createDto['mediaStorageProviderMetadataId']\n },\n });\n createDto['mediaStorageProviderMetadata'] = createDto['mediaStorageProviderMetadata'] || createDto['fieldMetadata']?.mediaStorageProvider;\n createDto['modelMetadata'] = createDto['modelMetadata'] || createDto['fieldMetadata']?.model;\n\n if (!createDto['mediaStorageProviderMetadata']) {\n throw new NotFoundException('Media storage provider metadata not found');\n }\n\n createDto['fieldMetadata'].mediaStorageProvider = createDto['mediaStorageProviderMetadata'];\n\n const validator = new MediaFieldCrudManager({\n type: createDto['fieldMetadata']?.type as SolidMediaType,\n required: true,\n fieldName: 'files',\n mediaMaxSizeKb: createDto['fieldMetadata']?.mediaMaxSizeKb,\n mediaTypes: createDto['fieldMetadata']?.mediaTypes || [],\n isUpdate: false,\n });\n const validationErrors = validator.validate(createDto, files);\n if (validationErrors.length > 0) {\n throw new BadRequestException(validationErrors.map(error => error.error).join(', '));\n }\n\n const storageProviderType = createDto['mediaStorageProviderMetadata'].type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n\n return storageProvider.store(files, { id: Number(createDto['entityId']) }, createDto['fieldMetadata']);\n }\n\n async remove(id: number) {\n // const lov = await this.findOne(id);\n const media = await this.repo.findOne({\n where: {\n id: id,\n },\n relations: ['mediaStorageProviderMetadata', 'fieldMetadata', 'fieldMetadata.model', 'fieldMetadata.mediaStorageProvider'],\n });\n const modelEntity = await this.modelMetadataRepo.findOne({\n where: {\n id: media.entityId,\n }\n }\n );\n const storageProviderType = media.mediaStorageProviderMetadata.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n await storageProvider.delete(modelEntity, media.fieldMetadata);\n\n return this.repo.remove(media);\n }\n\n async fileDownloadStream(media: Media): Promise<{ stream: Readable | null, fileName: string, mimeType: string, redirectUrl?: string }> {\n const loadedMedia = await this.repo.findOne({\n where: { id: media.id },\n relations: ['mediaStorageProviderMetadata'],\n });\n\n if (!loadedMedia || !loadedMedia.mediaStorageProviderMetadata) {\n throw new NotFoundException(`Media with id ${media.id} not found`);\n }\n\n const fileName = loadedMedia.originalFileName || path.basename(loadedMedia.relativeUri || `${loadedMedia.id}`);\n const mimeType = loadedMedia.mimeType || 'application/octet-stream';\n\n switch (loadedMedia.mediaStorageProviderMetadata.type as MediaStorageProviderType) {\n case MediaStorageProviderType.Filesystem:\n return {\n stream: await this.diskFileService.readStream(\n buildDiskMediaPath(loadedMedia.relativeUri, this.settingService, loadedMedia.mediaStorageProviderMetadata),\n ),\n fileName,\n mimeType,\n };\n default:\n throw new Error(`Unsupported media storage provider type ${loadedMedia.mediaStorageProviderMetadata.type}`);\n }\n }\n\n async delete(id: number, solidRequestContext: any = {}) {\n const media = await this.repo.findOne({\n where: { id },\n relations: ['mediaStorageProviderMetadata', 'modelMetadata'],\n });\n\n if (media) {\n await this.assertMediaDeletable([media]);\n }\n\n const result = await super.delete(id, solidRequestContext);\n\n if (media) {\n await this.deletePhysicalFile(media);\n }\n\n return result;\n }\n\n async deleteMany(ids: number[], solidRequestContext: any = {}) {\n const mediaRecords = await this.repo.find({\n where: {\n id: In(ids),\n },\n relations: ['mediaStorageProviderMetadata', 'modelMetadata'],\n });\n\n await this.assertMediaDeletable(mediaRecords);\n\n const result = await super.deleteMany(ids, solidRequestContext);\n\n for (const media of mediaRecords) {\n await this.deletePhysicalFile(media);\n }\n\n return result;\n }\n\n /**\n * Media belonging to a published draft/publish-enabled record must survive edits made to\n * later drafts (see DraftPublishHelperService.cloneMediaForVersion) - deleting it directly\n * would strip the published version's media out from under it. Mirrors the equivalent\n * entity-level guard in DraftPublishHelperService.assertDraftPublishDeleteAllowed.\n */\n private async assertMediaDeletable(mediaRecords: Media[]): Promise<void> {\n const blockedIds: number[] = [];\n\n for (const media of mediaRecords) {\n if (!media.modelMetadata?.draftPublishWorkflow) continue;\n\n const entityRepository = this.entityManager.getRepository(classify(media.modelMetadata.singularName));\n const owningEntity = await entityRepository.findOne({ where: { id: media.entityId } as any });\n\n if (owningEntity && (owningEntity as any).isPublished === true) {\n blockedIds.push(media.id);\n }\n }\n\n if (blockedIds.length > 0) {\n throw new BadRequestException(\n 'Media belonging to a published record cannot be deleted. Edit the record to create a draft first'\n );\n }\n }\n\n private async decorateMediaRecords(medias: Media[]): Promise<void> {\n for (const media of medias) {\n await this.decorateMediaRecord(media);\n }\n }\n\n private async decorateMediaRecord(media: Media): Promise<void> {\n const mediaStorageProvider = await this.resolveMediaStorageProvider(media);\n media.relativeUri = await this.resolveMediaUrl(media, mediaStorageProvider);\n }\n\n private async resolveMediaUrl(media: Media, mediaStorageProvider?: MediaStorageProviderMetadata): Promise<string> {\n const resolvedMediaStorageProvider = mediaStorageProvider || await this.resolveMediaStorageProvider(media);\n const isPublic = resolveMediaIsPublic(resolvedMediaStorageProvider);\n\n if (isPublic === false) {\n return this.mediaDownloadUrlService.getPrivateUrl(media.id, media.relativeUri, resolvedMediaStorageProvider);\n }\n\n if (resolvedMediaStorageProvider?.type === MediaStorageProviderType.Filesystem) {\n return this.diskFileService.getUrl(buildDiskMediaPath(media.relativeUri, this.settingService, resolvedMediaStorageProvider));\n }\n\n if (resolvedMediaStorageProvider?.type === MediaStorageProviderType.AwsS3) {\n return this.s3FileService.getUrl(\n `${resolvedMediaStorageProvider.bucketName}:${media.relativeUri}`,\n { region: getEffectiveS3Region(this.configService, resolvedMediaStorageProvider.region), expiresIn: 0 },\n );\n }\n\n return media.relativeUri;\n }\n\n private async deletePhysicalFile(media: Media): Promise<void> {\n if (!media?.relativeUri) {\n return;\n }\n\n try {\n // Draft/publish versioning may clone a Media row that reuses the same\n // relativeUri (see DraftPublishHelperService.cloneMediaForVersion) instead of\n // duplicating the underlying file. Skip the physical delete if another row\n // still references it.\n const stillReferenced = await this.repo.exists({\n where: { relativeUri: media.relativeUri, id: Not(media.id) },\n });\n if (stillReferenced) {\n return;\n }\n\n const mediaStorageProvider = await this.resolveMediaStorageProvider(media);\n if (!mediaStorageProvider) {\n return;\n }\n\n switch (mediaStorageProvider.type as MediaStorageProviderType) {\n case MediaStorageProviderType.Filesystem:\n await this.diskFileService.delete(buildDiskMediaPath(media.relativeUri, this.settingService, mediaStorageProvider));\n return;\n case MediaStorageProviderType.AwsS3:\n await this.s3FileService.delete(\n `${mediaStorageProvider.bucketName}:${media.relativeUri}`,\n { region: getEffectiveS3Region(this.configService, mediaStorageProvider.region) },\n );\n return;\n default:\n this.logger.warn(`Skipping physical delete for unsupported media storage provider type ${mediaStorageProvider.type}`);\n }\n } catch (error: any) {\n const message = error?.message ?? String(error);\n this.logger.warn(`Failed to delete physical media file for media id ${media.id}: ${message}`);\n }\n }\n\n private async resolveMediaStorageProvider(media: Media): Promise<MediaStorageProviderMetadata | undefined> {\n if (media.mediaStorageProviderMetadata) {\n return media.mediaStorageProviderMetadata;\n }\n\n if (!media.id) {\n return undefined;\n }\n\n const loadedMedia = await this.repo.findOne({\n where: { id: media.id },\n relations: ['mediaStorageProviderMetadata'],\n });\n\n return loadedMedia?.mediaStorageProviderMetadata;\n }\n}\n"]}
1
+ {"version":3,"file":"media.service.js","sourceRoot":"","sources":["../../src/services/media.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager, In, Not } from 'typeorm';\nimport * as path from 'path';\nimport { Readable } from 'stream';\n\nimport { ConfigService } from '@nestjs/config';\nimport { CRUDService } from 'src/services/crud.service';\nimport { DiskFileService, S3FileService } from 'src/services/file';\nimport { classify } from 'src/helpers/string.helper';\nimport { MediaDownloadUrlService } from 'src/services/media-download-url.service';\n\n\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { BasicFilterDto } from 'src/dtos/basic-filters.dto';\nimport { MediaStorageProviderType } from 'src/dtos/create-media-storage-provider-metadata.dto';\nimport { Media } from 'src/entities/media.entity';\nimport { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';\nimport { MediaFieldCrudManager, SolidMediaType } from 'src/helpers/field-crud-managers/MediaFieldCrudManager';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';\nimport { MediaRepository } from 'src/repository/media.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { buildDiskMediaPath, getEffectiveS3Region, resolveMediaIsPublic, } from 'src/services/media-storage.utils';\nimport { getMediaStorageProvider } from \"./mediaStorageProviders\";\n\n@Injectable()\nexport class MediaService extends CRUDService<Media> {\n private readonly logger = new Logger(MediaService.name);\n\n constructor(\n readonly configService: ConfigService,\n readonly diskFileService: DiskFileService,\n readonly s3FileService: S3FileService,\n private readonly mediaDownloadUrlService: MediaDownloadUrlService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(Media, 'default')\n // readonly repo: Repository<Media>,\n readonly repo: MediaRepository,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n // @InjectRepository(MediaStorageProviderMetadata)\n // private readonly mediaStorageProviderMetadataRepo: Repository<MediaStorageProviderMetadata>,\n // @InjectRepository(FieldMetadata)\n // private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n private readonly mediaStorageProviderMetadataRepo: MediaStorageProviderMetadataRepository,\n private readonly fieldMetadataRepo: FieldMetadataRepository,\n readonly moduleRef: ModuleRef,\n ) {\n super(entityManager, repo, 'media', 'solid-core', moduleRef);\n }\n\n async find(basicFilterDto: BasicFilterDto, solidRequestContext: any = {}) {\n const data = await super.find(basicFilterDto, solidRequestContext);\n if (data.records) {\n await this.decorateMediaRecords(data.records);\n }\n if (data.groupRecords) {\n for (const group of data.groupRecords) {\n await this.decorateMediaRecords(group.groupData.records);\n }\n }\n return data\n }\n\n async findOne(id: number, query: any = {}, solidRequestContext: any = {}) {\n const media = await super.findOne(id, query, solidRequestContext);\n if (media) {\n await this.decorateMediaRecord(media);\n }\n return media;\n }\n\n async upload(createDto: any, files: Array<Express.Multer.File>, _solidRequestContext: any = {}) {\n\n if (!files || files.length === 0) {\n throw new NotFoundException(ERROR_MESSAGES.FILE_NOT_FOUND);\n\n }\n\n createDto['fieldMetadata'] = await this.fieldMetadataRepo.findOne({\n where: {\n id: createDto['fieldMetadataId']\n },\n relations: ['mediaStorageProvider', 'model'],\n });\n createDto['modelMetadata'] = await this.modelMetadataRepo.findOne({\n where: {\n id: createDto['modelMetadataId']\n },\n });\n createDto['mediaStorageProviderMetadata'] = await this.mediaStorageProviderMetadataRepo.findOne({\n where: {\n id: createDto['mediaStorageProviderMetadataId']\n },\n });\n createDto['mediaStorageProviderMetadata'] = createDto['mediaStorageProviderMetadata'] || createDto['fieldMetadata']?.mediaStorageProvider;\n createDto['modelMetadata'] = createDto['modelMetadata'] || createDto['fieldMetadata']?.model;\n\n if (!createDto['mediaStorageProviderMetadata']) {\n throw new NotFoundException('Media storage provider metadata not found');\n }\n\n createDto['fieldMetadata'].mediaStorageProvider = createDto['mediaStorageProviderMetadata'];\n\n const validator = new MediaFieldCrudManager({\n type: createDto['fieldMetadata']?.type as SolidMediaType,\n required: true,\n fieldName: 'files',\n mediaMaxSizeKb: createDto['fieldMetadata']?.mediaMaxSizeKb,\n mediaTypes: createDto['fieldMetadata']?.mediaTypes || [],\n mediaAllowedExtensions: createDto['fieldMetadata']?.mediaAllowedExtensions || [],\n isUpdate: false,\n });\n const validationErrors = validator.validate(createDto, files);\n if (validationErrors.length > 0) {\n throw new BadRequestException(validationErrors.map(error => error.error).join(', '));\n }\n\n const storageProviderType = createDto['mediaStorageProviderMetadata'].type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n\n return storageProvider.store(files, { id: Number(createDto['entityId']) }, createDto['fieldMetadata']);\n }\n\n async remove(id: number) {\n // const lov = await this.findOne(id);\n const media = await this.repo.findOne({\n where: {\n id: id,\n },\n relations: ['mediaStorageProviderMetadata', 'fieldMetadata', 'fieldMetadata.model', 'fieldMetadata.mediaStorageProvider'],\n });\n const modelEntity = await this.modelMetadataRepo.findOne({\n where: {\n id: media.entityId,\n }\n }\n );\n const storageProviderType = media.mediaStorageProviderMetadata.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n await storageProvider.delete(modelEntity, media.fieldMetadata);\n\n return this.repo.remove(media);\n }\n\n async fileDownloadStream(media: Media): Promise<{ stream: Readable | null, fileName: string, mimeType: string, redirectUrl?: string }> {\n const loadedMedia = await this.repo.findOne({\n where: { id: media.id },\n relations: ['mediaStorageProviderMetadata'],\n });\n\n if (!loadedMedia || !loadedMedia.mediaStorageProviderMetadata) {\n throw new NotFoundException(`Media with id ${media.id} not found`);\n }\n\n const fileName = loadedMedia.originalFileName || path.basename(loadedMedia.relativeUri || `${loadedMedia.id}`);\n const mimeType = loadedMedia.mimeType || 'application/octet-stream';\n\n switch (loadedMedia.mediaStorageProviderMetadata.type as MediaStorageProviderType) {\n case MediaStorageProviderType.Filesystem:\n return {\n stream: await this.diskFileService.readStream(\n buildDiskMediaPath(loadedMedia.relativeUri, this.settingService, loadedMedia.mediaStorageProviderMetadata),\n ),\n fileName,\n mimeType,\n };\n default:\n throw new Error(`Unsupported media storage provider type ${loadedMedia.mediaStorageProviderMetadata.type}`);\n }\n }\n\n async delete(id: number, solidRequestContext: any = {}) {\n const media = await this.repo.findOne({\n where: { id },\n relations: ['mediaStorageProviderMetadata', 'modelMetadata'],\n });\n\n if (media) {\n await this.assertMediaDeletable([media]);\n }\n\n const result = await super.delete(id, solidRequestContext);\n\n if (media) {\n await this.deletePhysicalFile(media);\n }\n\n return result;\n }\n\n async deleteMany(ids: number[], solidRequestContext: any = {}) {\n const mediaRecords = await this.repo.find({\n where: {\n id: In(ids),\n },\n relations: ['mediaStorageProviderMetadata', 'modelMetadata'],\n });\n\n await this.assertMediaDeletable(mediaRecords);\n\n const result = await super.deleteMany(ids, solidRequestContext);\n\n for (const media of mediaRecords) {\n await this.deletePhysicalFile(media);\n }\n\n return result;\n }\n\n /**\n * Media belonging to a published draft/publish-enabled record must survive edits made to\n * later drafts (see DraftPublishHelperService.cloneMediaForVersion) - deleting it directly\n * would strip the published version's media out from under it. Mirrors the equivalent\n * entity-level guard in DraftPublishHelperService.assertDraftPublishDeleteAllowed.\n */\n private async assertMediaDeletable(mediaRecords: Media[]): Promise<void> {\n const blockedIds: number[] = [];\n\n for (const media of mediaRecords) {\n if (!media.modelMetadata?.draftPublishWorkflow) continue;\n\n const entityRepository = this.entityManager.getRepository(classify(media.modelMetadata.singularName));\n const owningEntity = await entityRepository.findOne({ where: { id: media.entityId } as any });\n\n if (owningEntity && (owningEntity as any).isPublished === true) {\n blockedIds.push(media.id);\n }\n }\n\n if (blockedIds.length > 0) {\n throw new BadRequestException(\n 'Media belonging to a published record cannot be deleted. Edit the record to create a draft first'\n );\n }\n }\n\n private async decorateMediaRecords(medias: Media[]): Promise<void> {\n for (const media of medias) {\n await this.decorateMediaRecord(media);\n }\n }\n\n private async decorateMediaRecord(media: Media): Promise<void> {\n const mediaStorageProvider = await this.resolveMediaStorageProvider(media);\n media.relativeUri = await this.resolveMediaUrl(media, mediaStorageProvider);\n }\n\n private async resolveMediaUrl(media: Media, mediaStorageProvider?: MediaStorageProviderMetadata): Promise<string> {\n const resolvedMediaStorageProvider = mediaStorageProvider || await this.resolveMediaStorageProvider(media);\n const isPublic = resolveMediaIsPublic(resolvedMediaStorageProvider);\n\n if (isPublic === false) {\n return this.mediaDownloadUrlService.getPrivateUrl(media.id, media.relativeUri, resolvedMediaStorageProvider);\n }\n\n if (resolvedMediaStorageProvider?.type === MediaStorageProviderType.Filesystem) {\n return this.diskFileService.getUrl(buildDiskMediaPath(media.relativeUri, this.settingService, resolvedMediaStorageProvider));\n }\n\n if (resolvedMediaStorageProvider?.type === MediaStorageProviderType.AwsS3) {\n return this.s3FileService.getUrl(\n `${resolvedMediaStorageProvider.bucketName}:${media.relativeUri}`,\n { region: getEffectiveS3Region(this.configService, resolvedMediaStorageProvider.region), expiresIn: 0 },\n );\n }\n\n return media.relativeUri;\n }\n\n private async deletePhysicalFile(media: Media): Promise<void> {\n if (!media?.relativeUri) {\n return;\n }\n\n try {\n // Draft/publish versioning may clone a Media row that reuses the same\n // relativeUri (see DraftPublishHelperService.cloneMediaForVersion) instead of\n // duplicating the underlying file. Skip the physical delete if another row\n // still references it.\n const stillReferenced = await this.repo.exists({\n where: { relativeUri: media.relativeUri, id: Not(media.id) },\n });\n if (stillReferenced) {\n return;\n }\n\n const mediaStorageProvider = await this.resolveMediaStorageProvider(media);\n if (!mediaStorageProvider) {\n return;\n }\n\n switch (mediaStorageProvider.type as MediaStorageProviderType) {\n case MediaStorageProviderType.Filesystem:\n await this.diskFileService.delete(buildDiskMediaPath(media.relativeUri, this.settingService, mediaStorageProvider));\n return;\n case MediaStorageProviderType.AwsS3:\n await this.s3FileService.delete(\n `${mediaStorageProvider.bucketName}:${media.relativeUri}`,\n { region: getEffectiveS3Region(this.configService, mediaStorageProvider.region) },\n );\n return;\n default:\n this.logger.warn(`Skipping physical delete for unsupported media storage provider type ${mediaStorageProvider.type}`);\n }\n } catch (error: any) {\n const message = error?.message ?? String(error);\n this.logger.warn(`Failed to delete physical media file for media id ${media.id}: ${message}`);\n }\n }\n\n private async resolveMediaStorageProvider(media: Media): Promise<MediaStorageProviderMetadata | undefined> {\n if (media.mediaStorageProviderMetadata) {\n return media.mediaStorageProviderMetadata;\n }\n\n if (!media.id) {\n return undefined;\n }\n\n const loadedMedia = await this.repo.findOne({\n where: { id: media.id },\n relations: ['mediaStorageProviderMetadata'],\n });\n\n return loadedMedia?.mediaStorageProviderMetadata;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"module-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/module-metadata.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/module-metadata.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,aAAa,EAA0B,MAAM,SAAS,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AASpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,gDAAgD,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAEL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAA+B,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBACa,qBAAqB;IAK9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAG3B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAEzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAlB9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;gBAI9C,UAAU,EAAE,UAAU,EAGtB,kBAAkB,EAAE,wBAAwB,EAC5C,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,eAAe,EAC5B,cAAc,EAAE,cAAc,EAE9B,wBAAwB,EAAE,+BAA+B,EAEzD,oBAAoB,EAAE,oBAAoB,EAC1C,aAAa,EAAE,aAAa,EAC5B,2BAA2B,EAAE,2BAA2B;IAGrE,QAAQ,CAAC,cAAc,EAAE,cAAc;;;;;;;;;;;IAgCvC,IAAI,CAAC,cAAc,EAAE,cAAc;;;;;;;;;;;IAInC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,KAAK;IAa7C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,KAAK;IAgBlC,MAAM,CAAC,SAAS,EAAE,uBAAuB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IAe5E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,uBAAuB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IAcxG,YAAY,CAAC,MAAM,EAAE,cAAc;IAqEnC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IAetG,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IAuBlI,YAAY,CAAC,MAAM,EAAE,cAAc;IAmDnC,MAAM,CAAC,uBAAuB,EAAE,uBAAuB;IAqBvD,YAAY,CAAC,IAAI,EAAE,MAAM;IAQzB,MAAM,CAAC,EAAE,EAAE,MAAM;IAOjB,eAAe,CAAC,cAAc,EAAE,MAAM;YA8C9B,gCAAgC;YAiDhC,yBAAyB;IA6CjC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAyBvC,iBAAiB;IAMjB,sBAAsB,CAAC,QAAQ,EAAE,MAAM;;;;;IAyBvC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUrD,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;YAuBrD,qBAAqB;YAgBrB,yBAAyB;IAkBvC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,WAAW;CAKpB"}