@solidstarters/solid-core 1.2.143 → 1.2.145

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 (133) hide show
  1. package/dist/config/common.config.d.ts +2 -0
  2. package/dist/config/common.config.d.ts.map +1 -1
  3. package/dist/config/common.config.js +3 -2
  4. package/dist/config/common.config.js.map +1 -1
  5. package/dist/constants/error-messages.d.ts +83 -0
  6. package/dist/constants/error-messages.d.ts.map +1 -0
  7. package/dist/constants/error-messages.js +86 -0
  8. package/dist/constants/error-messages.js.map +1 -0
  9. package/dist/constants/success-messages.d.ts +11 -0
  10. package/dist/constants/success-messages.d.ts.map +1 -0
  11. package/dist/constants/success-messages.js +14 -0
  12. package/dist/constants/success-messages.js.map +1 -0
  13. package/dist/index.d.ts +7 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +10 -4
  16. package/dist/index.js.map +1 -1
  17. package/dist/interfaces.js.map +1 -1
  18. package/dist/jobs/api-email-subscriber.service.d.ts +1 -1
  19. package/dist/jobs/api-email-subscriber.service.d.ts.map +1 -1
  20. package/dist/jobs/api-email-subscriber.service.js +2 -2
  21. package/dist/jobs/api-email-subscriber.service.js.map +1 -1
  22. package/dist/jobs/database/api-email-subscriber-database.service.d.ts +1 -1
  23. package/dist/jobs/database/api-email-subscriber-database.service.d.ts.map +1 -1
  24. package/dist/jobs/database/api-email-subscriber-database.service.js +2 -2
  25. package/dist/jobs/database/api-email-subscriber-database.service.js.map +1 -1
  26. package/dist/jobs/database/email-subscriber-database.service.d.ts +1 -1
  27. package/dist/jobs/database/email-subscriber-database.service.d.ts.map +1 -1
  28. package/dist/jobs/database/email-subscriber-database.service.js +2 -2
  29. package/dist/jobs/database/email-subscriber-database.service.js.map +1 -1
  30. package/dist/jobs/email-subscriber.service.d.ts +1 -1
  31. package/dist/jobs/email-subscriber.service.d.ts.map +1 -1
  32. package/dist/jobs/email-subscriber.service.js +2 -2
  33. package/dist/jobs/email-subscriber.service.js.map +1 -1
  34. package/dist/seeders/seed-data/solid-core-metadata.json +12 -12
  35. package/dist/services/ai-interaction.service.d.ts.map +1 -1
  36. package/dist/services/ai-interaction.service.js +4 -3
  37. package/dist/services/ai-interaction.service.js.map +1 -1
  38. package/dist/services/authentication.service.d.ts +1 -1
  39. package/dist/services/authentication.service.d.ts.map +1 -1
  40. package/dist/services/authentication.service.js +68 -66
  41. package/dist/services/authentication.service.js.map +1 -1
  42. package/dist/services/crud-helper.service.d.ts.map +1 -1
  43. package/dist/services/crud-helper.service.js +3 -2
  44. package/dist/services/crud-helper.service.js.map +1 -1
  45. package/dist/services/crud.service.d.ts.map +1 -1
  46. package/dist/services/crud.service.js +23 -21
  47. package/dist/services/crud.service.js.map +1 -1
  48. package/dist/services/csv.service.d.ts.map +1 -1
  49. package/dist/services/csv.service.js +3 -2
  50. package/dist/services/csv.service.js.map +1 -1
  51. package/dist/services/excel.service.d.ts.map +1 -1
  52. package/dist/services/excel.service.js +3 -2
  53. package/dist/services/excel.service.js.map +1 -1
  54. package/dist/services/export-transaction.service.d.ts.map +1 -1
  55. package/dist/services/export-transaction.service.js +2 -1
  56. package/dist/services/export-transaction.service.js.map +1 -1
  57. package/dist/services/field-metadata.service.d.ts.map +1 -1
  58. package/dist/services/field-metadata.service.js +9 -8
  59. package/dist/services/field-metadata.service.js.map +1 -1
  60. package/dist/services/file.service.d.ts.map +1 -1
  61. package/dist/services/file.service.js +5 -4
  62. package/dist/services/file.service.js.map +1 -1
  63. package/dist/services/import-transaction.service.d.ts.map +1 -1
  64. package/dist/services/import-transaction.service.js +11 -9
  65. package/dist/services/import-transaction.service.js.map +1 -1
  66. package/dist/services/mail/{ElasticEmailService.d.ts → elastic-email.service.d.ts} +1 -1
  67. package/dist/services/mail/elastic-email.service.d.ts.map +1 -0
  68. package/dist/services/mail/{ElasticEmailService.js → elastic-email.service.js} +1 -1
  69. package/dist/services/mail/elastic-email.service.js.map +1 -0
  70. package/dist/services/mail/{SMTPEmailService.d.ts → smtp-email.service.d.ts} +3 -3
  71. package/dist/services/mail/smtp-email.service.d.ts.map +1 -0
  72. package/dist/services/mail/{SMTPEmailService.js → smtp-email.service.js} +8 -6
  73. package/dist/services/mail/smtp-email.service.js.map +1 -0
  74. package/dist/services/media-storage-provider-metadata.service.d.ts.map +1 -1
  75. package/dist/services/media-storage-provider-metadata.service.js +4 -3
  76. package/dist/services/media-storage-provider-metadata.service.js.map +1 -1
  77. package/dist/services/media.service.d.ts.map +1 -1
  78. package/dist/services/media.service.js +2 -1
  79. package/dist/services/media.service.js.map +1 -1
  80. package/dist/services/model-metadata.service.d.ts.map +1 -1
  81. package/dist/services/model-metadata.service.js +11 -10
  82. package/dist/services/model-metadata.service.js.map +1 -1
  83. package/dist/services/module-metadata.service.d.ts.map +1 -1
  84. package/dist/services/module-metadata.service.js +11 -10
  85. package/dist/services/module-metadata.service.js.map +1 -1
  86. package/dist/services/role-metadata.service.d.ts.map +1 -1
  87. package/dist/services/role-metadata.service.js +3 -2
  88. package/dist/services/role-metadata.service.js.map +1 -1
  89. package/dist/services/sql-expression-resolver.service.d.ts.map +1 -1
  90. package/dist/services/sql-expression-resolver.service.js +2 -1
  91. package/dist/services/sql-expression-resolver.service.js.map +1 -1
  92. package/dist/services/user.service.d.ts.map +1 -1
  93. package/dist/services/user.service.js +11 -10
  94. package/dist/services/user.service.js.map +1 -1
  95. package/dist/solid-core.module.d.ts.map +1 -1
  96. package/dist/solid-core.module.js +9 -7
  97. package/dist/solid-core.module.js.map +1 -1
  98. package/dist/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +1 -1
  100. package/src/config/common.config.ts +3 -2
  101. package/src/constants/error-messages.ts +123 -0
  102. package/src/constants/success-messages.ts +13 -0
  103. package/src/index.ts +10 -4
  104. package/src/interfaces.ts +3 -3
  105. package/src/jobs/api-email-subscriber.service.ts +1 -1
  106. package/src/jobs/database/api-email-subscriber-database.service.ts +1 -1
  107. package/src/jobs/database/email-subscriber-database.service.ts +1 -1
  108. package/src/jobs/email-subscriber.service.ts +1 -1
  109. package/src/seeders/seed-data/solid-core-metadata.json +12 -12
  110. package/src/services/ai-interaction.service.ts +4 -3
  111. package/src/services/authentication.service.ts +67 -65
  112. package/src/services/crud-helper.service.ts +3 -2
  113. package/src/services/crud.service.ts +23 -23
  114. package/src/services/csv.service.ts +3 -2
  115. package/src/services/excel.service.ts +3 -2
  116. package/src/services/export-transaction.service.ts +2 -1
  117. package/src/services/field-metadata.service.ts +9 -8
  118. package/src/services/file.service.ts +5 -4
  119. package/src/services/import-transaction.service.ts +11 -9
  120. package/src/services/mail/{SMTPEmailService.ts → smtp-email.service.ts} +7 -5
  121. package/src/services/media-storage-provider-metadata.service.ts +4 -3
  122. package/src/services/media.service.ts +2 -1
  123. package/src/services/model-metadata.service.ts +11 -10
  124. package/src/services/module-metadata.service.ts +11 -10
  125. package/src/services/role-metadata.service.ts +3 -2
  126. package/src/services/sql-expression-resolver.service.ts +2 -1
  127. package/src/services/user.service.ts +11 -10
  128. package/src/solid-core.module.ts +5 -3
  129. package/dist/services/mail/ElasticEmailService.d.ts.map +0 -1
  130. package/dist/services/mail/ElasticEmailService.js.map +0 -1
  131. package/dist/services/mail/SMTPEmailService.d.ts.map +0 -1
  132. package/dist/services/mail/SMTPEmailService.js.map +0 -1
  133. /package/src/services/mail/{ElasticEmailService.ts → elastic-email.service.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"export-transaction.service.js","sourceRoot":"","sources":["../../src/services/export-transaction.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService } from '@nestjs/config';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { CRUDService } from 'src/services/crud.service';\nimport { FileService } from 'src/services/file.service';\nimport { MediaStorageProviderMetadataService } from 'src/services/media-storage-provider-metadata.service';\nimport { MediaService } from 'src/services/media.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\n\n\nimport { classify, dasherize } from '@angular-devkit/core/src/utils/strings';\nimport { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';\nimport { validate } from 'class-validator';\nimport { BasicFilterDto } from 'src/dtos/basic-filters.dto';\nimport { CreateExportTransactionDto } from 'src/dtos/create-export-transaction.dto';\nimport { MediaStorageProviderType } from 'src/dtos/create-media-storage-provider-metadata.dto';\nimport { FieldMetadata } from 'src/entities/field-metadata.entity';\nimport { Readable } from 'stream';\nimport { ExportTransaction } from '../entities/export-transaction.entity';\nimport { CsvService } from './csv.service';\nimport { ExcelService } from './excel.service';\nimport { getMediaStorageProvider } from './mediaStorageProviders';\nimport { SolidIntrospectService } from './solid-introspect.service';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { UpdateExportTemplateDto } from 'src/dtos/update-export-template.dto';\n\nconst EXPORT_CHUNK_SIZE = 100;\nenum ExportStatus {\n STARTED = 'started',\n COMPLETED = 'completed',\n FAILED = 'failed',\n}\n\nenum ExportFormat {\n CSV = 'csv',\n EXCEL = 'excel',\n}\n\nexport interface ExportTransactionFileInfo {\n exportStream: Readable;\n fileName: string;\n mimeType: string;\n exportTransaction: ExportTransaction;\n}\n\n@Injectable()\nexport class ExportTransactionService extends CRUDService<ExportTransaction> {\n private logger = new Logger(ExportTransactionService.name);\n\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n @InjectRepository(ExportTransaction, 'default')\n readonly repo: Repository<ExportTransaction>,\n readonly introspectService: SolidIntrospectService,\n readonly excelService: ExcelService,\n readonly csvService: CsvService,\n // readonly fieldMetadataService: FieldMetadataService,\n @InjectRepository(FieldMetadata, 'default')\n readonly fieldRepo: Repository<FieldMetadata>,\n @InjectRepository(ModelMetadata, 'default')\n readonly ModelMetadataRepo : Repository<ModelMetadata>,\n readonly moduleRef: ModuleRef\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'exportTransaction', 'solid-core',moduleRef);\n }\n\n // Return the export stream\n async triggerExportSync(id: number, exportTransactionEntity: any, updateDto: UpdateExportTemplateDto , filters: any): Promise<ExportTransactionFileInfo> {\n try {\n // const loadedExportTransaction = await this.loadExportTransaction(id);\n // from updateDto, get modelId and get modelMetadata\n const modeldata = await this.ModelMetadataRepo.findOne({\n where: { id: updateDto?.modelMetadataId},\n relations: { fields: true},\n })\n const modelName = modeldata?.singularName;\n const modelTemplateName = modelName;\n const fields = JSON.parse(updateDto?.fields);\n const templateFormat = updateDto?.templateFormat;\n const { exportStream, templateName, uuid, exportTransaction } = await this.getExportStreamDetails(modelName, modelTemplateName, fields, modeldata, templateFormat, id, exportTransactionEntity, filters);\n this.updateExportTransaction(id, ExportStatus.COMPLETED);\n const fileName = this.getFileName(templateName, uuid, templateFormat);\n const mimeType = this.getMimeType(templateFormat);\n return { exportStream, fileName, mimeType, exportTransaction };\n } catch (error) {\n this.updateExportTransaction(id, ExportStatus.FAILED, error.message);\n throw error;\n }\n }\n\n // Store the export stream using the appropriate storage provider\n async triggerExportAsync(id: number, exportTransactionEntity: any, updateDto: UpdateExportTemplateDto, filters:any): Promise<void> {\n try {\n // const loadedExportTransaction = await this.loadExportTransaction(id)\n // from updateDto, get modelId and get modelMetadata\n const modeldata = await this.ModelMetadataRepo.findOne({\n where: { id: updateDto?.modelMetadataId},\n relations: { fields: true},\n })\n const modelName = modeldata?.singularName;\n const modelTemplateName = modelName;\n const fields = JSON.parse(updateDto?.fields);\n const templateFormat = updateDto?.templateFormat;\n const { exportStream, templateName, uuid, exportTransaction } = await this.getExportStreamDetails(modelName, modelTemplateName, fields, modeldata, templateFormat, id, exportTransactionEntity, filters);\n // const fileFormat = loadedExportTransaction.exportTemplate.templateFormat;\n // Store the file using the appropriate storage provider\n await this.storeExportStream(exportStream, exportTransaction, this.getFileName(templateName, uuid, templateFormat));\n this.updateExportTransaction(id, ExportStatus.COMPLETED);\n } catch (error) {\n this.updateExportTransaction(id, ExportStatus.FAILED, error.message);\n throw error;\n\n }\n }\n\n private async loadExportTransaction(id: number) {\n return await this.repo.findOne({\n where: { id: id },\n relations: { exportTemplate: { modelMetadata: {fields: true} }},\n }\n );\n }\n\n private async updateExportTransaction(id: number, status: string, error?: string) {\n await this.repo.update(id, { status, error });\n }\n\n private async getExportStreamDetails(modelName: string, templateName: string, fields:any, modelData:any, templateFormat:string, id:number, exportTransaction: any, filters: any) {\n // Get the columns which need to be exported & the model id\n // const fields = JSON.parse(exportTransaction.exportTemplate.fields);\n\n // // Get the appropriate service for the model by trying to fetch a model service matching a particular name\n // const modelName = exportTransaction.exportTemplate.modelMetadata.singularName;\n const modelService = this.introspectService.getProvider(`${classify(modelName)}Service`);\n // const templateName = exportTransaction.exportTemplate.templateName;\n const uuid = String(id); //TODO can be renamed to exportTransactionUUID\n // const modelData = exportTransaction.exportTemplate.modelMetadata;\n\n // Get the data records function\n //const dataRecordsFunc = await this.getDataRecordsFunc(fields, modelService,modelData, filters);\n const dataRecordsFunc = await this.getDataRecordsFunc(fields, modelService, modelData, filters);\n\n // Get the export passthru stream (since it is a passthru stream, nothing is stored in memory & it is streamed directly when the stream is read)\n // let exportStream = await this.getExportStream(exportTransaction.exportTemplate.templateFormat, dataRecordsFunc);\n // return { exportStream, templateName, uuid, exportTransaction };\n\n let exportStream = await this.getExportStream(templateFormat, dataRecordsFunc);\n return { exportStream, templateName, uuid, exportTransaction };\n }\n\n private async getExportStream(templateFormat: string, dataRecordsFunc: (chunkIndex: number, chunkSize: number) => Promise<any[]>) {\n let exportStream = null;\n switch (templateFormat) {\n case ExportFormat.EXCEL:\n exportStream = await this.excelService.createExcelStream(dataRecordsFunc, EXPORT_CHUNK_SIZE);\n break;\n case ExportFormat.CSV:\n exportStream = await this.csvService.createCsvStream(dataRecordsFunc, EXPORT_CHUNK_SIZE);\n break;\n default:\n throw new Error('Invalid export format');\n }\n return exportStream;\n }\n\n private async storeExportStream(exportStream: Readable, exportTransaction: ExportTransaction, fileName: string) {\n const exportedFileMediaField = await this.fieldRepo.findOne({\n where: {\n name: 'exportedFile',\n model: {\n singularName: 'exportTransaction'\n },\n },\n relations: ['model', 'mediaStorageProvider'],\n });\n // const storageProvider = new FileStorageProvider<ExportTransaction>(this.configService, this.fileService, this.mediaService);\n const storageProviderMetadata = exportedFileMediaField.mediaStorageProvider;\n\n // // Use the storage provider metadata to get the appropriate storage provider implementation\n const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;\n\n // // Get the storage provider implementation\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n\n //Commented the below code since we will be direclty images from server on call from ui \n await storageProvider.storeStreams([[exportStream, fileName]], exportTransaction, exportedFileMediaField)\n }\n\n private getFileName(templateName: string, exportTransactionUUID: string, fileFormat: string): string {\n const extension = (fileFormat === ExportFormat.EXCEL) ? 'xlsx' : 'csv';\n return `${dasherize(templateName)}-${exportTransactionUUID}.${extension}`;\n }\n\n private getMimeType(fileFormat: string): string {\n return (fileFormat === ExportFormat.EXCEL) ? 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'text/csv';\n }\n\n private async getDataRecordsFunc(fields: any, modelService: InstanceWrapper<any>, modelMetadata: any, filters:any): Promise<(chunkIndex: number, chunkSize: number) => Promise<any[]>> {\n // Return a function which will take the chunkIndex & chunkSize and return the data\n // Get the relation fields to populate\n const relatedFieldNames = modelMetadata?.fields\n .filter((field: { relationType: any; }) => field.relationType !== null)\n .map((field: { name: any; }) => field.name);\n\n //Get the model metadata of relation field with userKey details\n const relatedModelsUserKeyMap = new Map<string, string>();\n for (const field of modelMetadata?.fields || []) {\n if (field.relationType && field.relationCoModelSingularName && fields.includes(field.name)) {\n const relatedModelMetadata = await this.ModelMetadataRepo.findOne({\n where: { singularName: field.relationCoModelSingularName },\n relations: ['userKeyField'],\n });\n\n if (relatedModelMetadata?.userKeyField?.name) {\n relatedModelsUserKeyMap.set(field.name, relatedModelMetadata.userKeyField.name);\n }\n }\n }\n\n return async (chunkIndex: number, chunkSize: number) => {\n const offset = chunkIndex * chunkSize;\n const recordFilterDto: BasicFilterDto = {\n limit: chunkSize,\n offset,\n populate: relatedFieldNames\n };\n const cleanedFilters = cleanNullsFromObject(filters);\n\n if (cleanedFilters && Object.keys(cleanedFilters).length > 0) {\n recordFilterDto.filters = cleanedFilters;\n }\n\n //Get the non relation fields which are in fields array passed to this function\n const nonRelationalFieldSet = new Set(\n modelMetadata?.fields\n .filter((field: { name: any; relationType: any; }) => fields.includes(field.name) && field.relationType === null)\n .map((field: { name: any; }) => field.name)\n );\n const data = await modelService.instance.find(recordFilterDto);\n const records = data.records ?? [];\n const cleanedRecords = records.map((record: Record<string, any>) => {\n const newRecord: Record<string, any> = {};\n \n // Include non-relational fields\n for (const key of nonRelationalFieldSet as Set<string>) {\n newRecord[key] = record[key];\n }\n \n // Include userKey from each related field\n for (const [relatedFieldName, userKeyFieldName] of relatedModelsUserKeyMap.entries()) {\n const relatedData = record[relatedFieldName];\n \n if (Array.isArray(relatedData)) {\n // For many-to-many or one-to-many\n const values = relatedData.map(item => item?.[userKeyFieldName]).filter(Boolean);\n newRecord[relatedFieldName] = values.join(', ');\n } else if (relatedData && typeof relatedData === 'object') {\n // For many-to-one or one-to-one\n newRecord[relatedFieldName] = relatedData?.[userKeyFieldName] ?? null;\n } else {\n newRecord[relatedFieldName] = null;\n }\n }\n \n return newRecord;\n });\n return cleanedRecords\n }\n}\n\n async toDto(data: Partial<CreateExportTransactionDto>): Promise<CreateExportTransactionDto> {\n const dto = new CreateExportTransactionDto(data);\n const errors = await validate(dto);\n if (errors.length > 0) {\n console.error(\"Validation failed:\", errors);\n return null;\n }\n return dto;\n }\n}\n\nfunction cleanNullsFromObject(obj: any): any {\n if (Array.isArray(obj)) {\n return obj\n .filter(item => item !== null && item !== undefined)\n .map(cleanNullsFromObject);\n } else if (typeof obj === 'object' && obj !== null) {\n const newObj: any = {};\n for (const key in obj) {\n const value = obj[key];\n if (value !== null && value !== undefined) {\n const cleanedValue = cleanNullsFromObject(value);\n // Only assign non-empty objects/arrays or non-null primitives\n if (\n (typeof cleanedValue === 'object' && Object.keys(cleanedValue).length > 0) ||\n (Array.isArray(cleanedValue) && cleanedValue.length > 0) ||\n typeof cleanedValue !== 'object'\n ) {\n newObj[key] = cleanedValue;\n }\n }\n }\n return newObj;\n }\n return obj;\n}\n\n"]}
1
+ {"version":3,"file":"export-transaction.service.js","sourceRoot":"","sources":["../../src/services/export-transaction.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService } from '@nestjs/config';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { CRUDService } from 'src/services/crud.service';\nimport { FileService } from 'src/services/file.service';\nimport { MediaStorageProviderMetadataService } from 'src/services/media-storage-provider-metadata.service';\nimport { MediaService } from 'src/services/media.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\n\n\nimport { classify, dasherize } from '@angular-devkit/core/src/utils/strings';\nimport { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';\nimport { validate } from 'class-validator';\nimport { BasicFilterDto } from 'src/dtos/basic-filters.dto';\nimport { CreateExportTransactionDto } from 'src/dtos/create-export-transaction.dto';\nimport { MediaStorageProviderType } from 'src/dtos/create-media-storage-provider-metadata.dto';\nimport { FieldMetadata } from 'src/entities/field-metadata.entity';\nimport { Readable } from 'stream';\nimport { ExportTransaction } from '../entities/export-transaction.entity';\nimport { CsvService } from './csv.service';\nimport { ExcelService } from './excel.service';\nimport { getMediaStorageProvider } from './mediaStorageProviders';\nimport { SolidIntrospectService } from './solid-introspect.service';\nimport { ModelMetadata } from 'src/entities/model-metadata.entity';\nimport { UpdateExportTemplateDto } from 'src/dtos/update-export-template.dto';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\n\nconst EXPORT_CHUNK_SIZE = 100;\nenum ExportStatus {\n STARTED = 'started',\n COMPLETED = 'completed',\n FAILED = 'failed',\n}\n\nenum ExportFormat {\n CSV = 'csv',\n EXCEL = 'excel',\n}\n\nexport interface ExportTransactionFileInfo {\n exportStream: Readable;\n fileName: string;\n mimeType: string;\n exportTransaction: ExportTransaction;\n}\n\n@Injectable()\nexport class ExportTransactionService extends CRUDService<ExportTransaction> {\n private logger = new Logger(ExportTransactionService.name);\n\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n @InjectRepository(ExportTransaction, 'default')\n readonly repo: Repository<ExportTransaction>,\n readonly introspectService: SolidIntrospectService,\n readonly excelService: ExcelService,\n readonly csvService: CsvService,\n // readonly fieldMetadataService: FieldMetadataService,\n @InjectRepository(FieldMetadata, 'default')\n readonly fieldRepo: Repository<FieldMetadata>,\n @InjectRepository(ModelMetadata, 'default')\n readonly ModelMetadataRepo : Repository<ModelMetadata>,\n readonly moduleRef: ModuleRef\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'exportTransaction', 'solid-core',moduleRef);\n }\n\n // Return the export stream\n async triggerExportSync(id: number, exportTransactionEntity: any, updateDto: UpdateExportTemplateDto , filters: any): Promise<ExportTransactionFileInfo> {\n try {\n // const loadedExportTransaction = await this.loadExportTransaction(id);\n // from updateDto, get modelId and get modelMetadata\n const modeldata = await this.ModelMetadataRepo.findOne({\n where: { id: updateDto?.modelMetadataId},\n relations: { fields: true},\n })\n const modelName = modeldata?.singularName;\n const modelTemplateName = modelName;\n const fields = JSON.parse(updateDto?.fields);\n const templateFormat = updateDto?.templateFormat;\n const { exportStream, templateName, uuid, exportTransaction } = await this.getExportStreamDetails(modelName, modelTemplateName, fields, modeldata, templateFormat, id, exportTransactionEntity, filters);\n this.updateExportTransaction(id, ExportStatus.COMPLETED);\n const fileName = this.getFileName(templateName, uuid, templateFormat);\n const mimeType = this.getMimeType(templateFormat);\n return { exportStream, fileName, mimeType, exportTransaction };\n } catch (error) {\n this.updateExportTransaction(id, ExportStatus.FAILED, error.message);\n throw error;\n }\n }\n\n // Store the export stream using the appropriate storage provider\n async triggerExportAsync(id: number, exportTransactionEntity: any, updateDto: UpdateExportTemplateDto, filters:any): Promise<void> {\n try {\n // const loadedExportTransaction = await this.loadExportTransaction(id)\n // from updateDto, get modelId and get modelMetadata\n const modeldata = await this.ModelMetadataRepo.findOne({\n where: { id: updateDto?.modelMetadataId},\n relations: { fields: true},\n })\n const modelName = modeldata?.singularName;\n const modelTemplateName = modelName;\n const fields = JSON.parse(updateDto?.fields);\n const templateFormat = updateDto?.templateFormat;\n const { exportStream, templateName, uuid, exportTransaction } = await this.getExportStreamDetails(modelName, modelTemplateName, fields, modeldata, templateFormat, id, exportTransactionEntity, filters);\n // const fileFormat = loadedExportTransaction.exportTemplate.templateFormat;\n // Store the file using the appropriate storage provider\n await this.storeExportStream(exportStream, exportTransaction, this.getFileName(templateName, uuid, templateFormat));\n this.updateExportTransaction(id, ExportStatus.COMPLETED);\n } catch (error) {\n this.updateExportTransaction(id, ExportStatus.FAILED, error.message);\n throw error;\n\n }\n }\n\n private async loadExportTransaction(id: number) {\n return await this.repo.findOne({\n where: { id: id },\n relations: { exportTemplate: { modelMetadata: {fields: true} }},\n }\n );\n }\n\n private async updateExportTransaction(id: number, status: string, error?: string) {\n await this.repo.update(id, { status, error });\n }\n\n private async getExportStreamDetails(modelName: string, templateName: string, fields:any, modelData:any, templateFormat:string, id:number, exportTransaction: any, filters: any) {\n // Get the columns which need to be exported & the model id\n // const fields = JSON.parse(exportTransaction.exportTemplate.fields);\n\n // // Get the appropriate service for the model by trying to fetch a model service matching a particular name\n // const modelName = exportTransaction.exportTemplate.modelMetadata.singularName;\n const modelService = this.introspectService.getProvider(`${classify(modelName)}Service`);\n // const templateName = exportTransaction.exportTemplate.templateName;\n const uuid = String(id); //TODO can be renamed to exportTransactionUUID\n // const modelData = exportTransaction.exportTemplate.modelMetadata;\n\n // Get the data records function\n //const dataRecordsFunc = await this.getDataRecordsFunc(fields, modelService,modelData, filters);\n const dataRecordsFunc = await this.getDataRecordsFunc(fields, modelService, modelData, filters);\n\n // Get the export passthru stream (since it is a passthru stream, nothing is stored in memory & it is streamed directly when the stream is read)\n // let exportStream = await this.getExportStream(exportTransaction.exportTemplate.templateFormat, dataRecordsFunc);\n // return { exportStream, templateName, uuid, exportTransaction };\n\n let exportStream = await this.getExportStream(templateFormat, dataRecordsFunc);\n return { exportStream, templateName, uuid, exportTransaction };\n }\n\n private async getExportStream(templateFormat: string, dataRecordsFunc: (chunkIndex: number, chunkSize: number) => Promise<any[]>) {\n let exportStream = null;\n switch (templateFormat) {\n case ExportFormat.EXCEL:\n exportStream = await this.excelService.createExcelStream(dataRecordsFunc, EXPORT_CHUNK_SIZE);\n break;\n case ExportFormat.CSV:\n exportStream = await this.csvService.createCsvStream(dataRecordsFunc, EXPORT_CHUNK_SIZE);\n break;\n default:\n throw new Error(ERROR_MESSAGES.INVALID_FORMAT('export' + templateFormat));\n }\n return exportStream;\n }\n\n private async storeExportStream(exportStream: Readable, exportTransaction: ExportTransaction, fileName: string) {\n const exportedFileMediaField = await this.fieldRepo.findOne({\n where: {\n name: 'exportedFile',\n model: {\n singularName: 'exportTransaction'\n },\n },\n relations: ['model', 'mediaStorageProvider'],\n });\n // const storageProvider = new FileStorageProvider<ExportTransaction>(this.configService, this.fileService, this.mediaService);\n const storageProviderMetadata = exportedFileMediaField.mediaStorageProvider;\n\n // // Use the storage provider metadata to get the appropriate storage provider implementation\n const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;\n\n // // Get the storage provider implementation\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n\n //Commented the below code since we will be direclty images from server on call from ui \n await storageProvider.storeStreams([[exportStream, fileName]], exportTransaction, exportedFileMediaField)\n }\n\n private getFileName(templateName: string, exportTransactionUUID: string, fileFormat: string): string {\n const extension = (fileFormat === ExportFormat.EXCEL) ? 'xlsx' : 'csv';\n return `${dasherize(templateName)}-${exportTransactionUUID}.${extension}`;\n }\n\n private getMimeType(fileFormat: string): string {\n return (fileFormat === ExportFormat.EXCEL) ? 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' : 'text/csv';\n }\n\n private async getDataRecordsFunc(fields: any, modelService: InstanceWrapper<any>, modelMetadata: any, filters:any): Promise<(chunkIndex: number, chunkSize: number) => Promise<any[]>> {\n // Return a function which will take the chunkIndex & chunkSize and return the data\n // Get the relation fields to populate\n const relatedFieldNames = modelMetadata?.fields\n .filter((field: { relationType: any; }) => field.relationType !== null)\n .map((field: { name: any; }) => field.name);\n\n //Get the model metadata of relation field with userKey details\n const relatedModelsUserKeyMap = new Map<string, string>();\n for (const field of modelMetadata?.fields || []) {\n if (field.relationType && field.relationCoModelSingularName && fields.includes(field.name)) {\n const relatedModelMetadata = await this.ModelMetadataRepo.findOne({\n where: { singularName: field.relationCoModelSingularName },\n relations: ['userKeyField'],\n });\n\n if (relatedModelMetadata?.userKeyField?.name) {\n relatedModelsUserKeyMap.set(field.name, relatedModelMetadata.userKeyField.name);\n }\n }\n }\n\n return async (chunkIndex: number, chunkSize: number) => {\n const offset = chunkIndex * chunkSize;\n const recordFilterDto: BasicFilterDto = {\n limit: chunkSize,\n offset,\n populate: relatedFieldNames\n };\n const cleanedFilters = cleanNullsFromObject(filters);\n\n if (cleanedFilters && Object.keys(cleanedFilters).length > 0) {\n recordFilterDto.filters = cleanedFilters;\n }\n\n //Get the non relation fields which are in fields array passed to this function\n const nonRelationalFieldSet = new Set(\n modelMetadata?.fields\n .filter((field: { name: any; relationType: any; }) => fields.includes(field.name) && field.relationType === null)\n .map((field: { name: any; }) => field.name)\n );\n const data = await modelService.instance.find(recordFilterDto);\n const records = data.records ?? [];\n const cleanedRecords = records.map((record: Record<string, any>) => {\n const newRecord: Record<string, any> = {};\n \n // Include non-relational fields\n for (const key of nonRelationalFieldSet as Set<string>) {\n newRecord[key] = record[key];\n }\n \n // Include userKey from each related field\n for (const [relatedFieldName, userKeyFieldName] of relatedModelsUserKeyMap.entries()) {\n const relatedData = record[relatedFieldName];\n \n if (Array.isArray(relatedData)) {\n // For many-to-many or one-to-many\n const values = relatedData.map(item => item?.[userKeyFieldName]).filter(Boolean);\n newRecord[relatedFieldName] = values.join(', ');\n } else if (relatedData && typeof relatedData === 'object') {\n // For many-to-one or one-to-one\n newRecord[relatedFieldName] = relatedData?.[userKeyFieldName] ?? null;\n } else {\n newRecord[relatedFieldName] = null;\n }\n }\n \n return newRecord;\n });\n return cleanedRecords\n }\n}\n\n async toDto(data: Partial<CreateExportTransactionDto>): Promise<CreateExportTransactionDto> {\n const dto = new CreateExportTransactionDto(data);\n const errors = await validate(dto);\n if (errors.length > 0) {\n console.error(\"Validation failed:\", errors);\n return null;\n }\n return dto;\n }\n}\n\nfunction cleanNullsFromObject(obj: any): any {\n if (Array.isArray(obj)) {\n return obj\n .filter(item => item !== null && item !== undefined)\n .map(cleanNullsFromObject);\n } else if (typeof obj === 'object' && obj !== null) {\n const newObj: any = {};\n for (const key in obj) {\n const value = obj[key];\n if (value !== null && value !== undefined) {\n const cleanedValue = cleanNullsFromObject(value);\n // Only assign non-empty objects/arrays or non-null primitives\n if (\n (typeof cleanedValue === 'object' && Object.keys(cleanedValue).length > 0) ||\n (Array.isArray(cleanedValue) && cleanedValue.length > 0) ||\n typeof cleanedValue !== 'object'\n ) {\n newObj[key] = cleanedValue;\n }\n }\n }\n return newObj;\n }\n return obj;\n}\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"field-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAyB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAuC,sBAAsB,EAA8C,QAAQ,EAAoD,MAAM,mCAAmC,CAAC;AACxN,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,qBACa,oBAAqB,YAAW,sBAAsB;IAE3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,2BAA2B;gBAL3B,iBAAiB,EAAE,uBAAuB,EAE1C,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,2BAA2B,EAAE,2BAA2B;IAG7E,OAAO,CAAC,MAAM,CAAyC;IAEvD,sBAAsB;IAIjB,oCAAoC;IA0BnC,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC;YAUvH,sBAAsB;YAuGtB,gBAAgB;YAWhB,gBAAgB;IAiB9B,OAAO,CAAC,uBAAuB;IAazB,QAAQ,CAAC,cAAc,EAAE,cAAc;;;;;;;;;;;IAgCvC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG;IAc5B,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAcnE,qBAAqB,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAuBxE,gCAAgC,CAAC,qBAAqB,EAAE,MAAM,EAAE,GAAG,wBAAwB,EAAE;IAWvF,MAAM,CAAC,SAAS,EAAE,sBAAsB;IA6BxC,MAAM,CAAC,EAAE,EAAE,MAAM;IAKjB,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqKxB,6BAA6B,CAAC,IAAI,EAAE,MAAM;IAIhD,OAAO,CAAC,kBAAkB;IA4dpB,mBAAmB;IAqBnB,MAAM,CAAC,SAAS,EAAE,sBAAsB;IAsBxC,yBAAyB,CAAC,KAAK,EAAE,wBAAwB;IA2BzD,wBAAwB,CAAC,KAAK,EAAE,wBAAwB;YA2BhD,gCAAgC;IA8BxC,iBAAiB,CAAC,KAAK,EAAE,aAAa;CAqB/C"}
1
+ {"version":3,"file":"field-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/field-metadata.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAyB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAsB,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAuC,sBAAsB,EAA8C,QAAQ,EAAoD,MAAM,mCAAmC,CAAC;AACxN,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,qBACa,oBAAqB,YAAW,sBAAsB;IAE3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,2BAA2B;gBAL3B,iBAAiB,EAAE,uBAAuB,EAE1C,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,2BAA2B,EAAE,2BAA2B;IAG7E,OAAO,CAAC,MAAM,CAAyC;IAEvD,sBAAsB;IAIjB,oCAAoC;IA0BnC,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC;YAUvH,sBAAsB;YAuGtB,gBAAgB;YAWhB,gBAAgB;IAiB9B,OAAO,CAAC,uBAAuB;IAazB,QAAQ,CAAC,cAAc,EAAE,cAAc;;;;;;;;;;;IAgCvC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG;IAc5B,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAcnE,qBAAqB,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAuBxE,gCAAgC,CAAC,qBAAqB,EAAE,MAAM,EAAE,GAAG,wBAAwB,EAAE;IAWvF,MAAM,CAAC,SAAS,EAAE,sBAAsB;IA6BxC,MAAM,CAAC,EAAE,EAAE,MAAM;IAKjB,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqKxB,6BAA6B,CAAC,IAAI,EAAE,MAAM;IAIhD,OAAO,CAAC,kBAAkB;IA4dpB,mBAAmB;IAqBnB,MAAM,CAAC,SAAS,EAAE,sBAAsB;IAsBxC,yBAAyB,CAAC,KAAK,EAAE,wBAAwB;IA2BzD,wBAAwB,CAAC,KAAK,EAAE,wBAAwB;YA2BhD,gCAAgC;IA8BxC,iBAAiB,CAAC,KAAK,EAAE,aAAa;CAqB/C"}
@@ -58,6 +58,7 @@ const typeorm_2 = require("typeorm");
58
58
  const create_field_metadata_dto_1 = require("../dtos/create-field-metadata.dto");
59
59
  const model_metadata_entity_1 = require("../entities/model-metadata.entity");
60
60
  const crud_helper_service_1 = require("./crud-helper.service");
61
+ const error_messages_1 = require("../constants/error-messages");
61
62
  let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
62
63
  constructor(fieldMetadataRepo, dataSource, solidRegistry, crudHelperService, moduleMetadataHelperService) {
63
64
  this.fieldMetadataRepo = fieldMetadataRepo;
@@ -87,7 +88,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
87
88
  }
88
89
  async updateInverseField(field, fieldRepository, modelRepository) {
89
90
  if (!field.model || !field.model.module) {
90
- throw new Error('Model and module are required to update inverse field');
91
+ throw new Error(error_messages_1.ERROR_MESSAGES.MODEL_AND_MODULE_REQUIRED_TO_UPDATE_INVERSE_FIELD);
91
92
  }
92
93
  const savedInverseField = await this.updateInverseFieldInDb(field, fieldRepository, modelRepository);
93
94
  this.updateRelationInverseFieldInFile(savedInverseField, field.relationCoModelSingularName, field.model.module.name);
@@ -212,12 +213,12 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
212
213
  }
213
214
  validateForInverseField(field) {
214
215
  if (field.type !== create_field_metadata_dto_1.SolidFieldType.relation) {
215
- throw new Error('Only relation fields can have inverse fields');
216
+ throw new Error(error_messages_1.ERROR_MESSAGES.INVALID_INVERSE_FIELD_TYPE);
216
217
  }
217
218
  const modelName = field.model.singularName;
218
219
  const moduleName = field.model.module.name;
219
220
  if (!modelName || !moduleName) {
220
- throw new Error('Model name and module name are required to create inverse field');
221
+ throw new Error(error_messages_1.ERROR_MESSAGES.MODEL_NAME_AND_MODULE_NAME_REQUIRED_TO_CREATE_INVERSE_FIELD);
221
222
  }
222
223
  return { moduleName, modelName };
223
224
  }
@@ -897,7 +898,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
897
898
  },
898
899
  });
899
900
  if (!entity) {
900
- throw new common_1.NotFoundException(`No field with id #${query.fieldId} exists`);
901
+ throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));
901
902
  }
902
903
  const selectionDynamicProvider = entity.selectionDynamicProvider;
903
904
  const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');
@@ -905,7 +906,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
905
906
  selectionDynamicProviderCtxt['offset'] = query.offset;
906
907
  const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);
907
908
  if (!selectionProviderInstance) {
908
- throw new common_1.NotFoundException(`Field incorrectly configured. No provider with name ${selectionDynamicProvider} registered in backend.`);
909
+ throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));
909
910
  }
910
911
  return selectionProviderInstance.values(query.query, selectionDynamicProviderCtxt);
911
912
  }
@@ -916,7 +917,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
916
917
  },
917
918
  });
918
919
  if (!entity) {
919
- throw new common_1.NotFoundException(`No field with id #${query.fieldId} exists`);
920
+ throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.FIELD_NOT_FOUND(query.fieldId));
920
921
  }
921
922
  const selectionDynamicProvider = entity.selectionDynamicProvider;
922
923
  const selectionDynamicProviderCtxt = JSON.parse(entity.selectionDynamicProviderCtxt ? entity.selectionDynamicProviderCtxt : '{}');
@@ -924,7 +925,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
924
925
  selectionDynamicProviderCtxt['offset'] = query.offset;
925
926
  const selectionProviderInstance = this.solidRegistry.getSelectionProviderInstance(selectionDynamicProvider);
926
927
  if (!selectionProviderInstance) {
927
- throw new common_1.NotFoundException(`Field incorrectly configured. No provider with name ${selectionDynamicProvider} registered in backend.`);
928
+ throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.PROVIDER_NOT_FOUND(selectionDynamicProvider));
928
929
  }
929
930
  return selectionProviderInstance.value(query.optionValue, selectionDynamicProviderCtxt);
930
931
  }
@@ -946,7 +947,7 @@ let FieldMetadataService = FieldMetadataService_1 = class FieldMetadataService {
946
947
  }
947
948
  catch (error) {
948
949
  this.logger.error('File creation failed:', error);
949
- throw new Error('File creation failed, rolling back transaction');
950
+ throw new Error(error_messages_1.ERROR_MESSAGES.FILE_WRITE_FAILED);
950
951
  }
951
952
  }
952
953
  async createFieldConfig(field) {
@@ -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 '@angular-devkit/core/src/utils/strings';\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, MediaType, 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 } from '../interfaces';\nimport { CrudHelperService } from './crud-helper.service';\n\n\n@Injectable()\nexport class FieldMetadataService implements OnApplicationBootstrap {\n constructor(\n private readonly fieldMetadataRepo: FieldMetadataRepository,\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 };\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('Model and module are 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('Only relation fields can have inverse fields');\n }\n const modelName = field.model.singularName;\n const moduleName = field.model.module.name;\n\n if (!modelName || !moduleName) {\n throw new Error('Model name and module name are required to create inverse field');\n }\n return { moduleName, modelName };\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> = this.fieldMetadataRepo.createQueryBuilder(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 = {\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.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 };\n\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: enumToResponseArray(MediaType),\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 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 ];\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 ];\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 \"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 ];\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 \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\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\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 ];\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 ];\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\n\n\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 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(`No field with id #${query.fieldId} exists`);\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\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(`Field incorrectly configured. No provider with name ${selectionDynamicProvider} registered in backend.`);\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(`No field with id #${query.fieldId} exists`);\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\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(`Field incorrectly configured. No provider with name ${selectionDynamicProvider} registered in backend.`);\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) {\n this.logger.error('File creation failed:', error);\n throw new Error('File creation failed, rolling back transaction'); // 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\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 '@angular-devkit/core/src/utils/strings';\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, MediaType, 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 } from '../interfaces';\nimport { CrudHelperService } from './crud-helper.service';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\n\n\n@Injectable()\nexport class FieldMetadataService implements OnApplicationBootstrap {\n constructor(\n private readonly fieldMetadataRepo: FieldMetadataRepository,\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 };\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 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> = this.fieldMetadataRepo.createQueryBuilder(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 = {\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.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 };\n\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: enumToResponseArray(MediaType),\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 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 ];\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 ];\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 \"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 ];\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 \"min\",\n \"max\",\n \"required\",\n \"unique\",\n \"index\",\n \"private\",\n \"encrypt\",\n \"encryptionType\",\n \"decryptWhen\",\n \"columnName\"\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\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 ];\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 ];\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\n\n\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 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\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\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) {\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\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"file.service.d.ts","sourceRoot":"","sources":["../../src/services/file.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAA6B,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,qBACa,WAAW;IAOpB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IALtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAIpC,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC;IAavE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAWpD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpE,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2B5G,OAAO,CAAC,qBAAqB;IAIvB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BhH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYzE,OAAO,CAAC,eAAe;IAUV,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAS/F"}
1
+ {"version":3,"file":"file.service.d.ts","sourceRoot":"","sources":["../../src/services/file.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,YAA6B,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,qBACa,WAAW;IAOpB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IALtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAIpC,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC;IAavE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAWpD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpE,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2B5G,OAAO,CAAC,qBAAqB;IAIvB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BhH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYzE,OAAO,CAAC,eAAe;IAUV,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAS/F"}