@solidstarters/solid-core 1.2.184 → 1.2.186
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/iam.config.d.ts +2 -0
- package/dist/config/iam.config.d.ts.map +1 -1
- package/dist/config/iam.config.js +1 -0
- package/dist/config/iam.config.js.map +1 -1
- package/dist/dtos/selection-dynamic-query.dto.d.ts +1 -0
- package/dist/dtos/selection-dynamic-query.dto.d.ts.map +1 -1
- package/dist/dtos/selection-dynamic-query.dto.js +6 -1
- package/dist/dtos/selection-dynamic-query.dto.js.map +1 -1
- package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/module-metadata-helper.service.js +8 -3
- package/dist/helpers/module-metadata-helper.service.js.map +1 -1
- package/dist/interfaces.d.ts +25 -1
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +3 -2
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +48 -48
- package/dist/services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service.d.ts +10 -0
- package/dist/services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service.d.ts.map +1 -0
- package/dist/services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service.js +35 -0
- package/dist/services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service.js.map +1 -0
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +10 -0
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.d.ts +16 -0
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.d.ts.map +1 -0
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.js +73 -0
- package/dist/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.js.map +1 -0
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.d.ts +16 -0
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.d.ts.map +1 -0
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.js +74 -0
- package/dist/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.js.map +1 -0
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.d.ts +16 -0
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.d.ts.map +1 -0
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.js +151 -0
- package/dist/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.js.map +1 -0
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +14 -12
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +4 -2
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.d.ts +15 -0
- package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
- package/dist/services/solid-ts-morph.service.js +68 -0
- package/dist/services/solid-ts-morph.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +8 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/config/iam.config.ts +2 -1
- package/src/dtos/selection-dynamic-query.dto.ts +4 -0
- package/src/helpers/module-metadata-helper.service.ts +10 -3
- package/src/interfaces.ts +28 -1
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +4 -3
- package/src/seeders/seed-data/solid-core-metadata.json +48 -48
- package/src/services/computed-fields/entity/uuid-externalid-entity-computed-field-provider.service.ts +34 -0
- package/src/services/field-metadata.service.ts +10 -0
- package/src/services/genai/mcp-handlers/solid-add-controller-handler-method-mcp-handler.service.ts +67 -0
- package/src/services/genai/mcp-handlers/solid-add-custom-service-method-mcp-handler.service.ts +69 -0
- package/src/services/genai/mcp-handlers/solid-add-header-button-or-row-button-to-list-view-mcp-handler.service.ts +141 -0
- package/src/services/model-metadata.service.ts +25 -23
- package/src/services/setting.service.ts +4 -2
- package/src/services/solid-ts-morph.service.ts +112 -0
- package/src/solid-core.module.ts +10 -1
- package/src/controllers/user.controller.ts.bkp +0 -78
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-metadata.service.js","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { InjectDataSource, InjectRepository } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ModuleMetadata } from '../entities/module-metadata.entity';\n\nimport { SolidFieldType } from 'src/dtos/create-field-metadata.dto';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';\nimport { ActionMetadata } from '../entities/action-metadata.entity';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { MenuItemMetadata } from '../entities/menu-item-metadata.entity';\nimport { ViewMetadata } from '../entities/view-metadata.entity';\nimport {\n REFRESH_MODEL_COMMAND,\n REMOVE_FIELDS_COMMAND,\n SchematicService\n} from '../helpers/schematic.service';\nimport { CodeGenerationOptions } from '../interfaces';\nimport { CrudHelperService } from './crud-helper.service';\nimport { FieldMetadataService } from './field-metadata.service';\nimport { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';\nimport { RoleMetadataService } from './role-metadata.service';\nimport { PermissionMetadata } from 'src/entities/permission-metadata.entity';\nimport { classify, dasherize } from '@angular-devkit/core/src/utils/strings';\nimport { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\n\n@Injectable()\nexport class ModelMetadataService {\n private logger = new Logger('ModelMetadataService');\n constructor(\n @InjectRepository(ModelMetadata)\n private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @InjectRepository(FieldMetadata)\n private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n private readonly schematicService: SchematicService,\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly crudHelperService: CrudHelperService,\n private readonly mediaStorageProviderMetadataService: MediaStorageProviderMetadataService,\n private readonly fieldMetadataService: FieldMetadataService,\n private readonly roleService: RoleMetadataService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n // No longer used. \n // private readonly generateCodePublihser: GenerateCodePublisherDatabase,\n ) { }\n\n async findMany(basicFilterDto: BasicFilterDto) {\n const alias = 'modelMetadata';\n // Extract the required keys from the input query\n let { limit, offset } = basicFilterDto;\n\n // Create above query on pincode table using query builder\n var qb: SelectQueryBuilder<ModelMetadata> = this.modelMetadataRepo.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.modelMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query?.populate, //FIXME: Check with jenender and change to relations to avoid confusion\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(`#${id}`));\n }\n return entity;\n }\n\n async findOneBySingularName(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async findOneByUserKey(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async create(createDto: CreateModelMetadataDto) {\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.createInDB(manager, createDto);\n await this.createInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n return model\n });\n } catch (error) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n // Iterate through the fields in the createDto & get all the relation fields which have create inverse as true\n private async handleInverseRelationFieldsUpdates(model: ModelMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n const fields: FieldMetadata[] = await this.getRelationInverseFields(model.id, fieldRepository);\n\n // Call a function which will iterate through each field and create an inverse field entry for the respective model i.e call updateInverseField on the related model\n for (const field of fields) {\n await this.fieldMetadataService.updateInverseField(field, fieldRepository, modelRepository);\n }\n }\n\n async update(id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n //To DO start the transaction \n // call create In db\n // call createInfile\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.updateInDb(manager, id, updateModelMetaDataDto)\n await this.updateInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n // return model\n });\n } catch (error) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n async createInDB(manager: EntityManager, createDto: CreateModelMetadataDto) {\n\n //Save the model\n const resolvedModule = await this.dataSource\n .getRepository(ModuleMetadata)\n .findOne({\n where: {\n id: createDto['moduleId'],\n },\n relations: {},\n });\n createDto['module'] = resolvedModule;\n\n if (createDto['parentModelId']) {\n const resolvedParentModel = await this.dataSource\n .getRepository(ModelMetadata)\n .findOne({\n where: {\n id: createDto['parentModelId'],\n },\n relations: {},\n });\n createDto['parentModel'] = resolvedParentModel;\n }\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = createDto;\n const modelMetadata = this.modelMetadataRepo.create(modelMetaDataWithoutFields);\n let model = await manager.save(modelMetadata);\n\n // iterate over all fields and upsert. \n let userKeyField = null;\n const listViewLayout = [];\n const formViewLayout = [];\n\n for (let k = 0; k < fieldsMetadata.length; k++) {\n const fieldMetadata = fieldsMetadata[k];\n\n // TODO: resolve model & mediaStorageProvider. \n fieldMetadata['model'] = model;\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n // console.log(fieldMetadata.displayName);\n // this.logger.debug(fieldMetadata.displayName);\n\n const fieldMetadataObject = this.fieldMetadataRepo.create(fieldMetadata);\n const affectedField = await manager.save(fieldMetadataObject);\n\n if (fieldMetadata.isUserKey) {\n userKeyField = affectedField;\n }\n listViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n formViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n\n }\n\n // Now that we have created fields & model update the model to stamp the userKeyField. \n if (userKeyField) {\n modelMetaDataWithoutFields['userKeyField'] = userKeyField;\n const updatedModelMetadataDto = this.modelMetadataRepo.merge(model, modelMetaDataWithoutFields);\n model = await manager.save(updatedModelMetadataDto);\n }\n\n return model;\n }\n\n async createInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n modelMetaData.fields.push(fieldObject);\n }\n // Update the `models` array\n metaData.moduleMetadata.models.push(modelMetaData);\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\n } catch (error) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async updateInDb(manager: EntityManager, id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = updateModelMetaDataDto;\n const modelRepo = manager.getRepository(ModelMetadata);\n const fieldRepo = manager.getRepository(FieldMetadata);\n // 1. Update the model metadata without fields\n let existingModel = await modelRepo.findOne({\n where: {\n singularName: updateModelMetaDataDto.singularName\n },\n relations: [\"fields\", \"module\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n if (!existingModel) {\n throw new Error(ERROR_MESSAGES.MODEL_NOT_FOUND(updateModelMetaDataDto.singularName));\n }\n\n const updatedModel = modelRepo.merge(existingModel, modelMetaDataWithoutFields);\n await modelRepo.save(updatedModel);\n\n const existingFields = existingModel.fields || [];\n const existingFieldIds = existingFields.map((field) => field.id);\n\n // 2. Synchronize fields\n // const userKeyFieldName = updateModelMetaDataDto.userKeyFieldUserKey;\n let userKeyField = null;\n\n const fieldsToSave: FieldMetadata[] = [];\n const fieldsToDelete: FieldMetadata[] = [];\n\n for (const fieldMetadata of fieldsMetadata) {\n if (fieldMetadata.id) {\n // Existing field\n const existingField = existingFields.find((field) => field.id === fieldMetadata.id);\n if (existingField) {\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n Object.assign(existingField, fieldMetadata);\n fieldsToSave.push(existingField);\n }\n } else {\n // New field\n fieldMetadata['model'] = updatedModel;\n\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n const createdField = fieldRepo.create(fieldMetadata);\n fieldsToSave.push(createdField);\n }\n\n // Check for userKeyField\n // if (fieldMetadata.isUserKey) {\n // userKeyField = fieldMetadata;\n // }\n }\n\n // Fields to delete (not in the payload)\n fieldsToDelete.push(...existingFields.filter((field) => !fieldsMetadata.some((f) => f.id === field.id)));\n\n // Save and remove fields\n if (fieldsToSave.length > 0) {\n await fieldRepo.save(fieldsToSave);\n }\n if (fieldsToDelete.length > 0) {\n fieldsToDelete.forEach(field => { field.isMarkedForRemoval = true })\n await fieldRepo.save(fieldsToDelete);\n\n // await this.fieldMetadataRepo.remove(fieldsToDelete);\n }\n\n const finalModel = await modelRepo.findOne({\n where: { id: updatedModel.id },\n relations: [\"fields\", \"userKeyField\"]\n });\n\n // 3. Update model with userKeyField if specified\n const userKeyFields = fieldsMetadata.filter(field => field.isUserKey);\n\n if (userKeyFields.length > 0) {\n const newUserKeyField = userKeyFields[userKeyFields.length - 1];\n const savedUserKeyField = await fieldRepo.findOne({ where: { id: newUserKeyField.id } });\n\n if (savedUserKeyField) {\n finalModel.userKeyField = savedUserKeyField;\n await modelRepo.save(finalModel);\n }\n\n const otherUserKeyFields = userKeyFields.filter(field => field.id !== newUserKeyField.id);\n\n for (const field of otherUserKeyFields) {\n const existingField = await fieldRepo.findOne({ where: { id: field.id } });\n if (existingField) {\n existingField.isUserKey = false;\n await fieldRepo.save(existingField);\n }\n }\n } else {\n if (finalModel.userKeyField) {\n finalModel.userKeyField = null;\n await modelRepo.save(finalModel);\n }\n }\n\n return updatedModel;\n\n }\n\n async updateInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n order: {\n fields: {\n id: \"ASC\",\n },\n },\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (!field.isSystem) {\n\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = true;\n }\n modelMetaData.fields.push(fieldObject);\n }\n }\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelMetaData.singularName\n );\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\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\n } catch (error) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async upsert(updateDto: UpdateModelMetaDataDto) {\n // First check if module already exists using name\n const existingModelMetadata = await this.modelMetadataRepo.findOne({\n where: {\n singularName: updateDto.singularName\n }\n })\n\n // if found\n if (existingModelMetadata) {\n const updatedModelMetadata = { ...existingModelMetadata, ...updateDto };\n const updatedModel = await this.modelMetadataRepo.save(updatedModelMetadata);\n return updatedModel\n }\n // if not found - create new \n else {\n const modelMetadata = this.modelMetadataRepo.create(updateDto);\n return this.modelMetadataRepo.save(modelMetadata);\n }\n }\n\n async removeBySingularName(singularName: string) {\n try {\n const entity = await this.findOneBySingularName(singularName);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r;\n } catch (error) {\n }\n }\n\n async deleteMany(ids: number[]): Promise<any> {\n if (!ids || ids.length === 0) {\n throw new Error(ERROR_MESSAGES.DELETE_IDS_REQUIRED);\n }\n const removedEntities = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n //@ts-ignore\n id: id,\n }\n });\n // if (!entity) {\n // throw new Error(`Entity with id ${ id } not found`);\n // }\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n removedEntities.push(r);\n }\n\n return removedEntities\n }\n\n async remove(id: number) {\n const entity = await this.findOne(id);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r\n }\n\n async cleanupOnDelete(modelEntityId: number) {\n const modelEntity = await this.modelMetadataRepo.findOne({\n where: {\n // @ts-ignore\n id: modelEntityId,\n },\n relations: ['module']\n });\n\n if (!modelEntity) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata`);\n return;\n }\n if (modelEntity.id !== modelEntityId) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata id ${modelEntity.id} not matching with the one passed as argument ${modelEntityId}`);\n return;\n }\n\n this.logger.log(`Cleaning up for model: ${modelEntity.singularName} belonging to module: ${modelEntity.module.name}`);\n\n const modulePath = await this.moduleMetadataHelperService.getModulePath(modelEntity.module.name);\n // /Users/harishpatel/Code/javascript/school-fees-portal/solid-api/src/solid-core\n this.logger.log(`Module path: ${modulePath}`);\n\n const filesToDelete = [];\n // <singularName>.entity.ts | The TypeORM model that needs to be deleted. | Automatic\n const entityFilePath = `${modulePath}/entities/${dasherize(modelEntity.singularName)}.entity.ts`;\n filesToDelete.push(entityFilePath);\n this.logger.log(`About to delete entity file path: ${entityFilePath}`);\n\n // <singularName>.create.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const createDtoFilePath = `${modulePath}/dtos/create-${dasherize(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(createDtoFilePath);\n this.logger.log(`About to delete create DTO file path: ${createDtoFilePath}`);\n\n // <singularName>.update.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const updateDtoFilePath = `${modulePath}/dtos/update-${dasherize(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(updateDtoFilePath);\n this.logger.log(`About to delete update DTO file path: ${updateDtoFilePath}`);\n\n // <singularName>.repository.ts | The TypeORM model that needs to be deleted. | Automatic\n const repositoryFilePath = `${modulePath}/repositories/${dasherize(modelEntity.singularName)}.repository.ts`;\n filesToDelete.push(repositoryFilePath);\n this.logger.log(`About to delete repository file path: ${repositoryFilePath}`);\n\n // <singularName>.service.ts | The TypeORM model that needs to be deleted. | Automatic\n const serviceFilePath = `${modulePath}/services/${dasherize(modelEntity.singularName)}.service.ts`;\n filesToDelete.push(serviceFilePath);\n this.logger.log(`About to delete service file path: ${serviceFilePath}`);\n\n // <singularName>.controller.ts | The TypeORM model that needs to be deleted. | Automatic\n const controllerFilePath = `${modulePath}/controllers/${dasherize(modelEntity.singularName)}.controller.ts`;\n filesToDelete.push(controllerFilePath);\n this.logger.log(`About to delete controller file path: ${controllerFilePath}`);\n\n for (let i = 0; i < filesToDelete.length; i++) {\n const fileToDelete = filesToDelete[i];\n try {\n await fs.unlink(fileToDelete);\n this.logger.log(`Deleted file: ${fileToDelete}`);\n } catch (error) {\n this.logger.error(`Error deleting file: ${fileToDelete}`, error);\n }\n }\n\n // Delete the permissions, menu, actions & views related to this model.\n const controllerName = `${classify(modelEntity.singularName)}Controller`;\n const permissionNames = [\n `${controllerName}.delete`,\n `${controllerName}.deleteMany`,\n `${controllerName}.findOne`,\n `${controllerName}.findMany`,\n `${controllerName}.recover`,\n `${controllerName}.recoverMany`,\n `${controllerName}.partialUpdate`,\n `${controllerName}.update`,\n `${controllerName}.insertMany`,\n `${controllerName}.create`,\n ];\n const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);\n const permissionsToDelete = await permissionsRepo.find({\n where: { name: In(permissionNames) },\n relations: ['roles'],\n });\n\n // Remove role associations first\n for (const permission of permissionsToDelete) {\n if (permission.roles?.length) {\n await this.dataSource\n .createQueryBuilder()\n .relation(PermissionMetadata, 'roles')\n .of(permission) // permission instance or its ID\n .remove(permission.roles); // remove all linked roles\n }\n }\n\n await permissionsRepo.remove(permissionsToDelete);\n\n // Delete actions\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });\n await actionRepo.delete({ model: { id: modelEntity.id } });\n\n // Delete menu items\n const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);\n if (action) {\n const menuItems = await menuItemRepo.find({ where: { action: { id: action.id } } });\n for (let i = 0; i < menuItems.length; i++) {\n const menuItem = menuItems[i];\n await menuItemRepo.remove(menuItem);\n }\n }\n\n // Delete view \n const viewRepo = this.dataSource.getRepository(ViewMetadata);\n await viewRepo.delete({ model: { id: modelEntity.id } })\n\n // <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelEntity.singularName\n );\n\n // Remove the model to be deleted from the metadata\n if (existingModelIndex !== -1) {\n metaData.moduleMetadata.models.splice(existingModelIndex, 1);\n }\n\n // Remove references to this model in the menu, action & view sections.\n metaData.moduleMetadata.menus = metaData.moduleMetadata.menus.filter(\n (menu: any) => menu.modelUserKey !== modelEntity.singularName\n );\n metaData.moduleMetadata.actions = metaData.moduleMetadata.actions.filter(\n (action: any) => action.modelUserKey !== modelEntity.singularName\n );\n metaData.moduleMetadata.views = metaData.moduleMetadata.views.filter(\n (view: any) => view.modelUserKey !== modelEntity.singularName\n );\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n // <moduleName>.module.ts | Remove all references and imports of the above files. | Manual (X)\n // const moduleFilePath = path.resolve(modulePath, `${dasherize(modelEntity.module.name)}.module.ts`);\n\n // this.logger.log(`Working on module file ${moduleFilePath}`);\n // const project = new Project();\n // const sourceFile = project.addSourceFileAtPath(moduleFilePath);\n\n // // Remove import declarations related to deleted files\n // sourceFile.getImportDeclarations().forEach(importDecl => {\n // const moduleSpecifier = importDecl.getModuleSpecifierValue();\n // const resolvedPath = importDecl.getModuleSpecifierSourceFile()?.getFilePath() || '';\n // if (filesToDelete.some(file => resolvedPath.endsWith(file))) {\n // importDecl.remove();\n // }\n // });\n\n // // Remove identifiers from `@Module` metadata (imports, providers, controllers)\n // const moduleDecorator = sourceFile.getFirstDescendantByKind(SyntaxKind.Decorator);\n // const objectLiteral = moduleDecorator?.getCallExpression()?.getArguments()?.[0];\n\n // if (objectLiteral && objectLiteral.getKind() === SyntaxKind.ObjectLiteralExpression) {\n // const objectLiteralExpr = objectLiteral.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n // for (const propName of ['imports', 'providers', 'controllers', 'exports']) {\n // const prop = objectLiteralExpr.getProperty(propName);\n // if (prop && prop.getKind() === SyntaxKind.PropertyAssignment) {\n // const elements = prop.getFirstDescendantByKind(SyntaxKind.ArrayLiteralExpression);\n // elements?.getElements().forEach(el => {\n // const text = el.getText();\n // if (filesToDelete.some(file => text.toLowerCase().includes(file.split('.')[0]))) {\n // // @ts-ignore\n // el.remove();\n // }\n // });\n // }\n // }\n // }\n\n // // Save changes\n // sourceFile.saveSync();\n\n // Run seeder to reflect the removal. \n\n // - | Drop database table | Removes the database table from the DB, this is a very risky step. Best to review all relations to other models etc and then do this manually | Manual (X)\n\n }\n\n @DisallowInProduction()\n async handleGenerateCode(options: CodeGenerationOptions): Promise<any> {\n const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];\n\n // Generate the code for the passed model\n const { model, removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(options);\n affectedModelIds.push(model.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n\n // Generate the code for models which are linked to fields having an inverse relation\n await this.generateCodeForInverseModels(model, options, affectedModelIds, refreshModelCodeOutputLines, removeFieldCodeOutputLines);\n\n // Generate the VAM config for all the affected models\n for (const modelId of affectedModelIds) {\n await this.generateVAMConfig(modelId);\n }\n\n // Return the aggregated code output\n return `${removeFieldCodeOutputLines.join('\\n')} \\n ${refreshModelCodeOutputLines.join('\\n')}`;\n }\n\n private async generateCodeForInverseModels(model: ModelMetadata, options: CodeGenerationOptions, affectedModelIds: any[], refreshModelCodeOutputLines: any[], removeFieldCodeOutputLines: any[]) {\n const coModelSingularNames = model.fields.\n filter(field => field.type === SolidFieldType.relation && field.relationCreateInverse === true)\n .map(field => field.relationCoModelSingularName);\n\n for (const singularName of coModelSingularNames) {\n const coModel = await this.findOneBySingularName(singularName);\n const inverseOptions: CodeGenerationOptions = {\n modelId: coModel.id,\n dryRun: options.dryRun\n };\n const { removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(inverseOptions);\n affectedModelIds.push(coModel.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n }\n }\n\n // Generate the View, Action and Menu configuration for the model\n async generateVAMConfig(modelId: number) {\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const model = await modelRepository.findOne({\n where: {\n id: modelId\n },\n relations: [\"fields\", \"module\"]\n });\n await this.populateVAMConfigInDb(model);\n await this.populateVAMConfigInFile(model);\n });\n } catch (error) {\n this.logger.error('generateVAMConfig Transaction failed:', error);\n throw error;\n }\n }\n\n private async populateVAMConfigInFile(model: ModelMetadata) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const listViewLayoutFields = [{ type: \"field\", attrs: { name: `id` } }];\n const formViewLayoutFields = [];\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n listViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n formViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n }\n this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData);\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error) {\n // console.error('File creation failed:', error);\n this.logger.error('File updation failed for View, action, menus config:', error);\n throw new Error('File updation failed for View, action, menus config'); // Trigger rollback\n }\n }\n\n // Populate the View, Actions and Menus in the config file\n private populateVAMConfigInFileInternal(formViewLayoutFields: any[], model: ModelMetadata, listViewLayoutFields: { type: string; attrs: { name: string; }; }[], metaData: any) {\n const column1Fields = [];\n const column2Fields = [];\n\n // Distribute fields between two columns\n for (let i = 0; i < formViewLayoutFields.length; i++) {\n if (i % 2 === 0) {\n column1Fields.push(formViewLayoutFields[i]);\n } else {\n column2Fields.push(formViewLayoutFields[i]);\n }\n }\n const actionName = `${model.singularName}-list-action`;\n const viewName = `${model.singularName}-list-view`;\n const formViewName = `${model.singularName}-form-view`;\n const menuName = `${model.singularName}-menu-item`;\n\n const action = {\n displayName: `${model.displayName} List Action`,\n name: actionName,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n viewUserKey: viewName,\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`\n };\n\n const menu = {\n displayName: `${model.displayName}`,\n name: menuName,\n sequenceNumber: 1,\n actionUserKey: actionName,\n moduleUserKey: `${model.module.name}`,\n parentMenuItemUserKey: \"\"\n };\n\n const modelListview = {\n name: viewName,\n displayName: `${model.displayName}`,\n type: \"list\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [\n 10,\n 25,\n 50\n ],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayoutFields\n }\n };\n\n\n const modelFormView = {\n name: formViewName,\n displayName: `${model.displayName}`,\n type: \"form\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-6\" },\n children: column1Fields\n },\n {\n type: \"column\",\n attrs: { name: \"group-2\", label: \"\", className: \"col-6\" },\n children: column2Fields\n }\n ]\n },\n ]\n }\n ]\n }\n };\n\n // Utility function to check if an item with the same name already exists\n const notExists = (arr: any[], name: string) => !arr.some(item => item.name === name);\n\n if (notExists(metaData.menus, menuName)) {\n metaData.menus.push(menu);\n }\n\n if (notExists(metaData.actions, actionName)) {\n metaData.actions.push(action);\n }\n\n if (notExists(metaData.views, viewName)) {\n metaData.views.push(modelListview);\n }\n\n if (notExists(metaData.views, formViewName)) {\n metaData.views.push(modelFormView);\n }\n // metaData.menus.push(menu);\n // metaData.actions.push(action);\n // metaData.views.push(modelListview);\n // metaData.views.push(modelFormView);\n }\n\n //Populate the View, Actions and Menus in the database\n private async populateVAMConfigInDb(model: ModelMetadata) {\n const jsonFieldsList = model.fields.filter((field: FieldMetadata) => field.isSystem !== true);\n\n const listViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`,\n isSearchable: true,\n }\n }));\n\n const formViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`\n }\n }));\n\n const midIndex = Math.ceil(formViewLayout.length / 2);\n const firstHalf = formViewLayout.slice(0, midIndex);\n const secondHalf = formViewLayout.slice(midIndex);\n\n const resolvedModule = await this.dataSource.getRepository(ModuleMetadata).findOne({\n where: { id: model.module.id }\n });\n\n const viewRepo = this.dataSource.getRepository(ViewMetadata);\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n\n const modelViews = [\n {\n name: `${model.singularName}-list-view`,\n displayName: `${model.displayName}`,\n type: 'list',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [10, 25, 50],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayout\n }, null, 3)\n },\n {\n name: `${model.singularName}-form-view`,\n displayName: `${model.displayName}`,\n type: 'form',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"group-1\", label: \"\", className: \"\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-6\" },\n children: firstHalf\n },\n {\n type: \"column\",\n attrs: { name: \"group-2\", label: \"\", className: \"col-6\" },\n children: secondHalf\n }\n ]\n }\n ]\n }\n ]\n }, null, 3)\n }\n ];\n\n for (const view of modelViews) {\n const existingView = await viewRepo.findOne({ where: { name: view.name } });\n\n if (!existingView) {\n const createdView = viewRepo.create(view);\n await viewRepo.save(createdView);\n }\n }\n\n let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });\n\n const actionData = {\n displayName: `${model.displayName} List View`,\n name: `${model.singularName}-list-view`,\n type: \"solid\",\n domain: \"\" as any,\n context: \"\" as any,\n customComponent: \"\",\n customIsModal: true,\n serverEndpoint: \"\",\n view: view,\n module: resolvedModule,\n model: model\n };\n\n let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });\n\n if (!existingAction) {\n const createdAction = actionRepo.create(actionData);\n existingAction = await actionRepo.save(createdAction);\n }\n\n const adminRole = await this.roleService.findRoleByName('Admin');\n\n const menuData = {\n displayName: `${model.displayName}`,\n name: `${model.singularName}-menu-item`,\n sequenceNumber: 1,\n action: existingAction,\n module: resolvedModule,\n roles: [adminRole],\n parentMenuItemUserKey: \"\"\n };\n\n let existingMenu = await menuRepo.findOne({ where: { name: menuData.name } });\n\n if (!existingMenu) {\n const createdMenu = menuRepo.create(menuData);\n await menuRepo.save(createdMenu);\n }\n }\n\n async generateCode(options: CodeGenerationOptions) {\n const query = {\n populate: [\"module\", \"fields\"]\n };\n\n const model = options.modelId\n ? await this.findOne(options.modelId, query)\n : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n options.fieldIdsForRemoval = model.fields\n .filter(field => field.isMarkedForRemoval)\n .map(field => field.id);\n\n const refreshModelCodeOutput = await this.generateModelCode(options);\n const removeFieldCodeOuput = await this.generateRemoveFieldsCode(options);\n return { model, removeFieldCodeOuput, refreshModelCodeOutput };\n }\n\n async generateRemoveFieldsCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n if (!options.fieldIdsForRemoval || options.fieldIdsForRemoval.length === 0) {\n return \"\";\n }\n\n const query = {\n populate: [\"module\", \"fields\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n //Filter out the fields by id\n const fieldsForRemoval = model.fields.filter((field) => options.fieldIdsForRemoval.includes(+field.id));\n const removeOutput = await this.executeRemoveFieldsCommand(model, fieldsForRemoval, options.dryRun);\n\n // Remove the fields from the database as well. This also checks, if the field is marked for removal\n fieldsForRemoval.forEach((field: FieldMetadata) => {\n if (field.isMarkedForRemoval) {\n this.fieldMetadataService.delete(field.id);\n }\n });\n\n // Remove the fields from metadata json file \n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === model.singularName\n );\n\n const modelMetaData = metaData.moduleMetadata.models[existingModelIndex];\n\n // Remove fields marked for removal from modelMetaData.fields\n modelMetaData.fields = modelMetaData.fields.filter((field: any) => field.isMarkedForRemoval !== true);\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\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\n return removeOutput;\n }\n\n async generateModelCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n const query = {\n populate: [\"module\", \"fields\", \"parentModel\", \"parentModel.module\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n //Execute the schematic command to refresh the model\n const refreshOuput = await this.executeRefreshModelCommand(model, options.dryRun);\n\n return `${refreshOuput}`;\n }\n\n private async executeRefreshModelCommand(model: ModelMetadata, dryRun: boolean = false): Promise<string> {\n const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);\n const output = await this.schematicService.executeSchematicCommand(\n REFRESH_MODEL_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n moduleDisplayName: model.module.displayName,\n dataSource: model.dataSource,\n table: model.tableName,\n fields: fieldsForRefresh,\n modelEnableSoftDelete: model.enableSoftDelete,\n parentModel: model.parentModel?.singularName,\n parentModule: model.parentModel?.module?.name,\n draftPublishWorkflowEnabled: model.draftPublishWorkflow,\n },\n dryRun\n );\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n private async executeRemoveFieldsCommand(model: ModelMetadata, fieldsForRemoval: FieldMetadata[], dryRun: boolean = false): Promise<string> {\n if (!fieldsForRemoval || fieldsForRemoval.length === 0) {\n return \"\";\n }\n const output = await this.schematicService.executeSchematicCommand(\n REMOVE_FIELDS_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n fields: fieldsForRemoval,\n },\n dryRun\n );\n\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n async updateUserKey(data: any) {\n const { modelName, fieldName } = data;\n\n const model = await this.modelMetadataRepo.findOne({\n where: { singularName: modelName },\n relations: ['fields', 'userKeyField'],\n });\n\n if (!model) {\n throw new Error(`Model with name ${modelName} not found`);\n }\n\n if (model.userKeyField) {\n throw new Error(`User key is already set to ${model.userKeyField.name}. No changes were made.`);\n }\n\n const fieldToUpdate = model.fields.find(field => field.name === fieldName);\n if (!fieldToUpdate) {\n throw new Error(`Field with name ${fieldName} not found in model ${modelName}`);\n }\n\n fieldToUpdate.isUserKey = true;\n\n model.userKeyField = fieldToUpdate;\n\n await this.modelMetadataRepo.save(model);\n\n return {\n message: `User key has been successfully updated to ${fieldName}.`,\n success: true\n };\n }\n\n private async getRelationInverseFields(modelId: number, repo: Repository<FieldMetadata>): Promise<FieldMetadata[]> {\n return await repo.find({\n where: {\n model: {\n id: modelId\n },\n type: SolidFieldType.relation,\n relationCreateInverse: true\n },\n relations: {\n model: {\n module: true\n }\n }\n });\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"model-metadata.service.js","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { InjectDataSource, InjectRepository } from '@nestjs/typeorm';\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { ModelMetadata } from '../entities/model-metadata.entity';\nimport { ModuleMetadata } from '../entities/module-metadata.entity';\n\nimport { SolidFieldType } from 'src/dtos/create-field-metadata.dto';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';\nimport { ActionMetadata } from '../entities/action-metadata.entity';\nimport { FieldMetadata } from '../entities/field-metadata.entity';\nimport { MenuItemMetadata } from '../entities/menu-item-metadata.entity';\nimport { ViewMetadata } from '../entities/view-metadata.entity';\nimport {\n REFRESH_MODEL_COMMAND,\n REMOVE_FIELDS_COMMAND,\n SchematicService\n} from '../helpers/schematic.service';\nimport { CodeGenerationOptions } from '../interfaces';\nimport { CrudHelperService } from './crud-helper.service';\nimport { FieldMetadataService } from './field-metadata.service';\nimport { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';\nimport { RoleMetadataService } from './role-metadata.service';\nimport { PermissionMetadata } from 'src/entities/permission-metadata.entity';\nimport { classify, dasherize } from '@angular-devkit/core/src/utils/strings';\nimport { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\n\n@Injectable()\nexport class ModelMetadataService {\n private logger = new Logger('ModelMetadataService');\n constructor(\n @InjectRepository(ModelMetadata)\n private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @InjectRepository(FieldMetadata)\n private readonly fieldMetadataRepo: Repository<FieldMetadata>,\n private readonly schematicService: SchematicService,\n @InjectDataSource()\n private readonly dataSource: DataSource,\n private readonly crudHelperService: CrudHelperService,\n private readonly mediaStorageProviderMetadataService: MediaStorageProviderMetadataService,\n private readonly fieldMetadataService: FieldMetadataService,\n private readonly roleService: RoleMetadataService,\n private readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n // No longer used. \n // private readonly generateCodePublihser: GenerateCodePublisherDatabase,\n ) { }\n\n async findMany(basicFilterDto: BasicFilterDto) {\n const alias = 'modelMetadata';\n // Extract the required keys from the input query\n let { limit, offset } = basicFilterDto;\n\n // Create above query on pincode table using query builder\n var qb: SelectQueryBuilder<ModelMetadata> = this.modelMetadataRepo.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.modelMetadataRepo.findOne({\n where: {\n id: id,\n },\n relations: query?.populate, //FIXME: Check with jenender and change to relations to avoid confusion\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(`#${id}`));\n }\n return entity;\n }\n\n async findOneBySingularName(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async findOneByUserKey(singularName: string, relations = {}) {\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n singularName: singularName,\n },\n relations: relations,\n });\n if (!entity) {\n throw new NotFoundException(ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));\n }\n return entity;\n }\n\n async create(createDto: CreateModelMetadataDto) {\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.createInDB(manager, createDto);\n await this.createInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n return model\n });\n } catch (error) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n // Iterate through the fields in the createDto & get all the relation fields which have create inverse as true\n private async handleInverseRelationFieldsUpdates(model: ModelMetadata, fieldRepository: Repository<FieldMetadata>, modelRepository: Repository<ModelMetadata>) {\n const fields: FieldMetadata[] = await this.getRelationInverseFields(model.id, fieldRepository);\n\n // Call a function which will iterate through each field and create an inverse field entry for the respective model i.e call updateInverseField on the related model\n for (const field of fields) {\n await this.fieldMetadataService.updateInverseField(field, fieldRepository, modelRepository);\n }\n }\n\n async update(id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n //To DO start the transaction \n // call create In db\n // call createInfile\n\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const fieldRepository = manager.getRepository(FieldMetadata);\n\n // Step 1: Write initial data to the database\n const model = await this.updateInDb(manager, id, updateModelMetaDataDto)\n await this.updateInFile(model.id, modelRepository);\n\n await this.handleInverseRelationFieldsUpdates(model, fieldRepository, modelRepository);\n\n // return model\n });\n } catch (error) {\n // console.error('Transaction failed:', error);\n this.logger.error('Transaction failed:', error);\n throw error;\n }\n }\n\n async createInDB(manager: EntityManager, createDto: CreateModelMetadataDto) {\n\n //Save the model\n const resolvedModule = await this.dataSource\n .getRepository(ModuleMetadata)\n .findOne({\n where: {\n id: createDto['moduleId'],\n },\n relations: {},\n });\n createDto['module'] = resolvedModule;\n\n if (createDto['parentModelId']) {\n const resolvedParentModel = await this.dataSource\n .getRepository(ModelMetadata)\n .findOne({\n where: {\n id: createDto['parentModelId'],\n },\n relations: {},\n });\n createDto['parentModel'] = resolvedParentModel;\n }\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = createDto;\n const modelMetadata = this.modelMetadataRepo.create(modelMetaDataWithoutFields);\n let model = await manager.save(modelMetadata);\n\n // iterate over all fields and upsert. \n let userKeyField = null;\n const listViewLayout = [];\n const formViewLayout = [];\n\n for (let k = 0; k < fieldsMetadata.length; k++) {\n const fieldMetadata = fieldsMetadata[k];\n\n // TODO: resolve model & mediaStorageProvider. \n fieldMetadata['model'] = model;\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n // console.log(fieldMetadata.displayName);\n // this.logger.debug(fieldMetadata.displayName);\n\n const fieldMetadataObject = this.fieldMetadataRepo.create(fieldMetadata);\n const affectedField = await manager.save(fieldMetadataObject);\n\n if (fieldMetadata.isUserKey) {\n userKeyField = affectedField;\n }\n listViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n formViewLayout.push({ type: \"field\", attrs: { name: `${affectedField.name}` } })\n\n }\n\n // Now that we have created fields & model update the model to stamp the userKeyField. \n if (userKeyField) {\n modelMetaDataWithoutFields['userKeyField'] = userKeyField;\n const updatedModelMetadataDto = this.modelMetadataRepo.merge(model, modelMetaDataWithoutFields);\n model = await manager.save(updatedModelMetadataDto);\n }\n\n return model;\n }\n\n async createInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n modelMetaData.fields.push(fieldObject);\n }\n // Update the `models` array\n metaData.moduleMetadata.models.push(modelMetaData);\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\n } catch (error) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async updateInDb(manager: EntityManager, id: number, updateModelMetaDataDto: UpdateModelMetaDataDto) {\n\n const { fields: fieldsMetadata, ...modelMetaDataWithoutFields } = updateModelMetaDataDto;\n const modelRepo = manager.getRepository(ModelMetadata);\n const fieldRepo = manager.getRepository(FieldMetadata);\n // 1. Update the model metadata without fields\n let existingModel = await modelRepo.findOne({\n where: {\n singularName: updateModelMetaDataDto.singularName\n },\n relations: [\"fields\", \"module\"], //FIXME: Check with jenender and change to relations to avoid confusion\n });\n\n if (!existingModel) {\n throw new Error(ERROR_MESSAGES.MODEL_NOT_FOUND(updateModelMetaDataDto.singularName));\n }\n\n const updatedModel = modelRepo.merge(existingModel, modelMetaDataWithoutFields);\n await modelRepo.save(updatedModel);\n\n const existingFields = existingModel.fields || [];\n const existingFieldIds = existingFields.map((field) => field.id);\n\n // 2. Synchronize fields\n // const userKeyFieldName = updateModelMetaDataDto.userKeyFieldUserKey;\n let userKeyField = null;\n\n const fieldsToSave: FieldMetadata[] = [];\n const fieldsToDelete: FieldMetadata[] = [];\n\n for (const fieldMetadata of fieldsMetadata) {\n if (fieldMetadata.id) {\n // Existing field\n const existingField = existingFields.find((field) => field.id === fieldMetadata.id);\n if (existingField) {\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n Object.assign(existingField, fieldMetadata);\n fieldsToSave.push(existingField);\n }\n } else {\n // New field\n fieldMetadata['model'] = updatedModel;\n\n if (fieldMetadata.mediaStorageProviderId) {\n fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);\n }\n const createdField = fieldRepo.create(fieldMetadata);\n fieldsToSave.push(createdField);\n }\n\n // Check for userKeyField\n // if (fieldMetadata.isUserKey) {\n // userKeyField = fieldMetadata;\n // }\n }\n\n // Fields to delete (not in the payload)\n fieldsToDelete.push(...existingFields.filter((field) => !fieldsMetadata.some((f) => f.id === field.id)));\n\n // Save and remove fields\n if (fieldsToSave.length > 0) {\n await fieldRepo.save(fieldsToSave);\n }\n if (fieldsToDelete.length > 0) {\n fieldsToDelete.forEach(field => { field.isMarkedForRemoval = true })\n await fieldRepo.save(fieldsToDelete);\n\n // await this.fieldMetadataRepo.remove(fieldsToDelete);\n }\n\n const finalModel = await modelRepo.findOne({\n where: { id: updatedModel.id },\n relations: [\"fields\", \"userKeyField\"]\n });\n\n // 3. Update model with userKeyField if specified\n const userKeyFields = fieldsMetadata.filter(field => field.isUserKey);\n\n if (userKeyFields.length > 0) {\n const newUserKeyField = userKeyFields[userKeyFields.length - 1];\n const savedUserKeyField = await fieldRepo.findOne({ where: { id: newUserKeyField.id } });\n\n if (savedUserKeyField) {\n finalModel.userKeyField = savedUserKeyField;\n await modelRepo.save(finalModel);\n }\n\n const otherUserKeyFields = userKeyFields.filter(field => field.id !== newUserKeyField.id);\n\n for (const field of otherUserKeyFields) {\n const existingField = await fieldRepo.findOne({ where: { id: field.id } });\n if (existingField) {\n existingField.isUserKey = false;\n await fieldRepo.save(existingField);\n }\n }\n } else {\n if (finalModel.userKeyField) {\n finalModel.userKeyField = null;\n await modelRepo.save(finalModel);\n }\n }\n\n return updatedModel;\n\n }\n\n async updateInFile(modelId: any, repo: Repository<ModelMetadata>) {\n try {\n\n const model = await repo.findOne({\n where: {\n id: modelId,\n },\n relations: [\"fields\", \"fields.mediaStorageProvider\", \"module\", \"parentModel\"], //FIXME: Check with jenender and change to relations to avoid confusion\n order: {\n fields: {\n id: \"ASC\",\n },\n },\n });\n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const modelMetaData = {\n singularName: model.singularName,\n pluralName: model.pluralName,\n displayName: model.displayName,\n description: model.description,\n dataSource: model.dataSource,\n dataSourceType: model.dataSourceType,\n tableName: model.tableName,\n userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,\n isChild: model?.isChild,\n parentModelUserKey: model?.parentModel?.singularName,\n enableAuditTracking: model?.enableAuditTracking,\n enableSoftDelete: model?.enableSoftDelete,\n draftPublishWorkflow: model?.draftPublishWorkflow,\n internationalisation: model?.internationalisation,\n fields: []\n }\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (!field.isSystem) {\n\n const fieldObject: Record<string, any> = await this.fieldMetadataService.createFieldConfig(field);\n if (field.isMarkedForRemoval) {\n fieldObject.isMarkedForRemoval = true;\n }\n modelMetaData.fields.push(fieldObject);\n }\n }\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelMetaData.singularName\n );\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\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\n } catch (error) {\n // console.error('File creation failed:', error);\n this.logger.error('File creation failed:', error);\n throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback\n }\n }\n\n async upsert(updateDto: UpdateModelMetaDataDto) {\n // First check if module already exists using name\n const existingModelMetadata = await this.modelMetadataRepo.findOne({\n where: {\n singularName: updateDto.singularName\n }\n })\n\n // if found\n if (existingModelMetadata) {\n const updatedModelMetadata = { ...existingModelMetadata, ...updateDto };\n const updatedModel = await this.modelMetadataRepo.save(updatedModelMetadata);\n return updatedModel\n }\n // if not found - create new \n else {\n const modelMetadata = this.modelMetadataRepo.create(updateDto);\n return this.modelMetadataRepo.save(modelMetadata);\n }\n }\n\n async removeBySingularName(singularName: string) {\n try {\n const entity = await this.findOneBySingularName(singularName);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r;\n } catch (error) {\n }\n }\n\n async deleteMany(ids: number[]): Promise<any> {\n if (!ids || ids.length === 0) {\n throw new Error(ERROR_MESSAGES.DELETE_IDS_REQUIRED);\n }\n const removedEntities = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]\n const entity = await this.modelMetadataRepo.findOne({\n where: {\n //@ts-ignore\n id: id,\n }\n });\n // if (!entity) {\n // throw new Error(`Entity with id ${ id } not found`);\n // }\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n removedEntities.push(r);\n }\n\n return removedEntities\n }\n\n async remove(id: number) {\n const entity = await this.findOne(id);\n await this.cleanupOnDelete(entity.id);\n const r = await this.modelMetadataRepo.remove(entity);\n return r\n }\n\n async cleanupOnDelete(modelEntityId: number) {\n const modelEntity = await this.modelMetadataRepo.findOne({\n where: {\n // @ts-ignore\n id: modelEntityId,\n },\n relations: ['module']\n });\n\n if (!modelEntity) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata`);\n return;\n }\n if (modelEntity.id !== modelEntityId) {\n this.logger.log(`Invalid modelEntityId: ${modelEntityId} unable to resolve model metadata id ${modelEntity.id} not matching with the one passed as argument ${modelEntityId}`);\n return;\n }\n\n this.logger.log(`Cleaning up for model: ${modelEntity.singularName} belonging to module: ${modelEntity.module.name}`);\n\n const modulePath = await this.moduleMetadataHelperService.getModulePath(modelEntity.module.name);\n // /Users/harishpatel/Code/javascript/school-fees-portal/solid-api/src/solid-core\n this.logger.log(`Module path: ${modulePath}`);\n\n const filesToDelete = [];\n // <singularName>.entity.ts | The TypeORM model that needs to be deleted. | Automatic\n const entityFilePath = `${modulePath}/entities/${dasherize(modelEntity.singularName)}.entity.ts`;\n filesToDelete.push(entityFilePath);\n this.logger.log(`About to delete entity file path: ${entityFilePath}`);\n\n // <singularName>.create.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const createDtoFilePath = `${modulePath}/dtos/create-${dasherize(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(createDtoFilePath);\n this.logger.log(`About to delete create DTO file path: ${createDtoFilePath}`);\n\n // <singularName>.update.dto.ts | The TypeORM model that needs to be deleted. | Automatic\n const updateDtoFilePath = `${modulePath}/dtos/update-${dasherize(modelEntity.singularName)}.dto.ts`;\n filesToDelete.push(updateDtoFilePath);\n this.logger.log(`About to delete update DTO file path: ${updateDtoFilePath}`);\n\n // <singularName>.repository.ts | The TypeORM model that needs to be deleted. | Automatic\n const repositoryFilePath = `${modulePath}/repositories/${dasherize(modelEntity.singularName)}.repository.ts`;\n filesToDelete.push(repositoryFilePath);\n this.logger.log(`About to delete repository file path: ${repositoryFilePath}`);\n\n // <singularName>.service.ts | The TypeORM model that needs to be deleted. | Automatic\n const serviceFilePath = `${modulePath}/services/${dasherize(modelEntity.singularName)}.service.ts`;\n filesToDelete.push(serviceFilePath);\n this.logger.log(`About to delete service file path: ${serviceFilePath}`);\n\n // <singularName>.controller.ts | The TypeORM model that needs to be deleted. | Automatic\n const controllerFilePath = `${modulePath}/controllers/${dasherize(modelEntity.singularName)}.controller.ts`;\n filesToDelete.push(controllerFilePath);\n this.logger.log(`About to delete controller file path: ${controllerFilePath}`);\n\n for (let i = 0; i < filesToDelete.length; i++) {\n const fileToDelete = filesToDelete[i];\n try {\n await fs.unlink(fileToDelete);\n this.logger.log(`Deleted file: ${fileToDelete}`);\n } catch (error) {\n this.logger.error(`Error deleting file: ${fileToDelete}`, error);\n }\n }\n\n // Delete the permissions, menu, actions & views related to this model.\n const controllerName = `${classify(modelEntity.singularName)}Controller`;\n const permissionNames = [\n `${controllerName}.delete`,\n `${controllerName}.deleteMany`,\n `${controllerName}.findOne`,\n `${controllerName}.findMany`,\n `${controllerName}.recover`,\n `${controllerName}.recoverMany`,\n `${controllerName}.partialUpdate`,\n `${controllerName}.update`,\n `${controllerName}.insertMany`,\n `${controllerName}.create`,\n ];\n const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);\n const permissionsToDelete = await permissionsRepo.find({\n where: { name: In(permissionNames) },\n relations: ['roles'],\n });\n\n // Remove role associations first\n for (const permission of permissionsToDelete) {\n if (permission.roles?.length) {\n await this.dataSource\n .createQueryBuilder()\n .relation(PermissionMetadata, 'roles')\n .of(permission) // permission instance or its ID\n .remove(permission.roles); // remove all linked roles\n }\n }\n\n await permissionsRepo.remove(permissionsToDelete);\n\n // Delete actions\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });\n await actionRepo.delete({ model: { id: modelEntity.id } });\n\n // Delete menu items\n const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);\n if (action) {\n const menuItems = await menuItemRepo.find({ where: { action: { id: action.id } } });\n for (let i = 0; i < menuItems.length; i++) {\n const menuItem = menuItems[i];\n await menuItemRepo.remove(menuItem);\n }\n }\n\n // Delete view \n const viewRepo = this.dataSource.getRepository(ViewMetadata);\n await viewRepo.delete({ model: { id: modelEntity.id } })\n\n // <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n if (metaData) {\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === modelEntity.singularName\n );\n\n // Remove the model to be deleted from the metadata\n if (existingModelIndex !== -1) {\n metaData.moduleMetadata.models.splice(existingModelIndex, 1);\n }\n\n // Remove references to this model in the menu, action & view sections.\n metaData.moduleMetadata.menus = metaData.moduleMetadata.menus.filter(\n (menu: any) => menu.modelUserKey !== modelEntity.singularName\n );\n metaData.moduleMetadata.actions = metaData.moduleMetadata.actions.filter(\n (action: any) => action.modelUserKey !== modelEntity.singularName\n );\n metaData.moduleMetadata.views = metaData.moduleMetadata.views.filter(\n (view: any) => view.modelUserKey !== modelEntity.singularName\n );\n\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n\n // <moduleName>.module.ts | Remove all references and imports of the above files. | Manual (X)\n // const moduleFilePath = path.resolve(modulePath, `${dasherize(modelEntity.module.name)}.module.ts`);\n\n // this.logger.log(`Working on module file ${moduleFilePath}`);\n // const project = new Project();\n // const sourceFile = project.addSourceFileAtPath(moduleFilePath);\n\n // // Remove import declarations related to deleted files\n // sourceFile.getImportDeclarations().forEach(importDecl => {\n // const moduleSpecifier = importDecl.getModuleSpecifierValue();\n // const resolvedPath = importDecl.getModuleSpecifierSourceFile()?.getFilePath() || '';\n // if (filesToDelete.some(file => resolvedPath.endsWith(file))) {\n // importDecl.remove();\n // }\n // });\n\n // // Remove identifiers from `@Module` metadata (imports, providers, controllers)\n // const moduleDecorator = sourceFile.getFirstDescendantByKind(SyntaxKind.Decorator);\n // const objectLiteral = moduleDecorator?.getCallExpression()?.getArguments()?.[0];\n\n // if (objectLiteral && objectLiteral.getKind() === SyntaxKind.ObjectLiteralExpression) {\n // const objectLiteralExpr = objectLiteral.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n // for (const propName of ['imports', 'providers', 'controllers', 'exports']) {\n // const prop = objectLiteralExpr.getProperty(propName);\n // if (prop && prop.getKind() === SyntaxKind.PropertyAssignment) {\n // const elements = prop.getFirstDescendantByKind(SyntaxKind.ArrayLiteralExpression);\n // elements?.getElements().forEach(el => {\n // const text = el.getText();\n // if (filesToDelete.some(file => text.toLowerCase().includes(file.split('.')[0]))) {\n // // @ts-ignore\n // el.remove();\n // }\n // });\n // }\n // }\n // }\n\n // // Save changes\n // sourceFile.saveSync();\n\n // Run seeder to reflect the removal. \n\n // - | Drop database table | Removes the database table from the DB, this is a very risky step. Best to review all relations to other models etc and then do this manually | Manual (X)\n\n }\n\n @DisallowInProduction()\n async handleGenerateCode(options: CodeGenerationOptions): Promise<any> {\n const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];\n\n // Generate the code for the passed model\n const { model, removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(options);\n affectedModelIds.push(model.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n\n // Generate the code for models which are linked to fields having an inverse relation\n await this.generateCodeForInverseModels(model, options, affectedModelIds, refreshModelCodeOutputLines, removeFieldCodeOutputLines);\n\n // Generate the VAM config for all the affected models\n for (const modelId of affectedModelIds) {\n await this.generateVAMConfig(modelId);\n }\n\n // Return the aggregated code output\n return `${removeFieldCodeOutputLines.join('\\n')} \\n ${refreshModelCodeOutputLines.join('\\n')}`;\n }\n\n private async generateCodeForInverseModels(model: ModelMetadata, options: CodeGenerationOptions, affectedModelIds: any[], refreshModelCodeOutputLines: any[], removeFieldCodeOutputLines: any[]) {\n const coModelSingularNames = model.fields.\n filter(field => field.type === SolidFieldType.relation && field.relationCreateInverse === true)\n .map(field => field.relationCoModelSingularName);\n\n for (const singularName of coModelSingularNames) {\n const coModel = await this.findOneBySingularName(singularName);\n const inverseOptions: CodeGenerationOptions = {\n modelId: coModel.id,\n dryRun: options.dryRun\n };\n const { removeFieldCodeOuput, refreshModelCodeOutput } = await this.generateCode(inverseOptions);\n affectedModelIds.push(coModel.id);\n refreshModelCodeOutputLines.push(refreshModelCodeOutput);\n removeFieldCodeOutputLines.push(removeFieldCodeOuput);\n }\n }\n\n // Generate the View, Action and Menu configuration for the model\n async generateVAMConfig(modelId: number) {\n try {\n return await this.dataSource.transaction(async (manager: EntityManager) => {\n const modelRepository = manager.getRepository(ModelMetadata);\n const model = await modelRepository.findOne({\n where: {\n id: modelId\n },\n relations: [\"fields\", \"module\"]\n });\n await this.populateVAMConfigInDb(model);\n await this.populateVAMConfigInFile(model);\n });\n } catch (error) {\n this.logger.error('generateVAMConfig Transaction failed:', error);\n throw error;\n }\n }\n\n private async populateVAMConfigInFile(model: ModelMetadata) {\n try {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n const listViewLayoutFields = [{ type: \"field\", attrs: { name: `id` } }];\n const formViewLayoutFields = [];\n\n for (let i = 0; i < model.fields.length; i++) {\n const field = model.fields[i];\n if (field.isSystem) continue;\n listViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n formViewLayoutFields.push({ type: \"field\", attrs: { name: `${field.name}` } })\n }\n this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData);\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n\n } catch (error) {\n // console.error('File creation failed:', error);\n this.logger.error('File updation failed for View, action, menus config:', error);\n throw new Error('File updation failed for View, action, menus config'); // Trigger rollback\n }\n }\n\n // Populate the View, Actions and Menus in the config file\n private populateVAMConfigInFileInternal(formViewLayoutFields: any[], model: ModelMetadata, listViewLayoutFields: { type: string; attrs: { name: string; }; }[], metaData: any) {\n const column1Fields = [];\n const column2Fields = [];\n\n // Distribute fields between two columns\n for (let i = 0; i < formViewLayoutFields.length; i++) {\n if (i % 2 === 0) {\n column1Fields.push(formViewLayoutFields[i]);\n } else {\n column2Fields.push(formViewLayoutFields[i]);\n }\n }\n const actionName = `${model.singularName}-list-action`;\n const viewName = `${model.singularName}-list-view`;\n const formViewName = `${model.singularName}-form-view`;\n const menuName = `${model.singularName}-menu-item`;\n\n const action = {\n displayName: `${model.displayName} List Action`,\n name: actionName,\n type: \"solid\",\n domain: \"\",\n context: \"\",\n customComponent: ``,\n customIsModal: true,\n serverEndpoint: \"\",\n viewUserKey: viewName,\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`\n };\n\n const menu = {\n displayName: `${model.displayName}`,\n name: menuName,\n sequenceNumber: 1,\n actionUserKey: actionName,\n moduleUserKey: `${model.module.name}`,\n parentMenuItemUserKey: \"\"\n };\n\n const modelListview = {\n name: viewName,\n displayName: `${model.displayName}`,\n type: \"list\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [\n 10,\n 25,\n 50\n ],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayoutFields\n }\n };\n\n\n const modelFormView = {\n name: formViewName,\n displayName: `${model.displayName}`,\n type: \"form\",\n context: \"{}\",\n moduleUserKey: `${model.module.name}`,\n modelUserKey: `${model.singularName}`,\n layout: {\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: column1Fields\n },\n {\n type: \"column\",\n attrs: { name: \"group-2\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: column2Fields\n }\n ]\n },\n ]\n }\n ]\n }\n };\n\n // Utility function to check if an item with the same name already exists\n const notExists = (arr: any[], name: string) => !arr.some(item => item.name === name);\n\n if (notExists(metaData.menus, menuName)) {\n metaData.menus.push(menu);\n }\n\n if (notExists(metaData.actions, actionName)) {\n metaData.actions.push(action);\n }\n\n if (notExists(metaData.views, viewName)) {\n metaData.views.push(modelListview);\n }\n\n if (notExists(metaData.views, formViewName)) {\n metaData.views.push(modelFormView);\n }\n // metaData.menus.push(menu);\n // metaData.actions.push(action);\n // metaData.views.push(modelListview);\n // metaData.views.push(modelFormView);\n }\n\n //Populate the View, Actions and Menus in the database\n private async populateVAMConfigInDb(model: ModelMetadata) {\n const jsonFieldsList = model.fields.filter((field: FieldMetadata) => field.isSystem !== true);\n\n const listViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`,\n isSearchable: true,\n }\n }));\n\n const formViewLayout = jsonFieldsList.map(field => ({\n type: \"field\",\n attrs: {\n name: `${field.name}`\n }\n }));\n\n const midIndex = Math.ceil(formViewLayout.length / 2);\n const firstHalf = formViewLayout.slice(0, midIndex);\n const secondHalf = formViewLayout.slice(midIndex);\n\n const resolvedModule = await this.dataSource.getRepository(ModuleMetadata).findOne({\n where: { id: model.module.id }\n });\n\n const viewRepo = this.dataSource.getRepository(ViewMetadata);\n const actionRepo = this.dataSource.getRepository(ActionMetadata);\n const menuRepo = this.dataSource.getRepository(MenuItemMetadata);\n\n const modelViews = [\n {\n name: `${model.singularName}-list-view`,\n displayName: `${model.displayName}`,\n type: 'list',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"list\",\n attrs: {\n pagination: true,\n pageSizeOptions: [10, 25, 50],\n enableGlobalSearch: true,\n create: true,\n edit: true,\n delete: true\n },\n children: listViewLayout\n }, null, 3)\n },\n {\n name: `${model.singularName}-form-view`,\n displayName: `${model.displayName}`,\n type: 'form',\n context: \"{}\",\n module: resolvedModule,\n model: model,\n layout: JSON.stringify({\n type: \"form\",\n attrs: { name: \"form-1\", label: `${model.displayName}`, className: \"grid\" },\n children: [\n {\n type: \"sheet\",\n attrs: { name: \"sheet-1\" },\n children: [\n {\n type: \"row\",\n attrs: { name: \"group-1\", label: \"\", className: \"\" },\n children: [\n {\n type: \"column\",\n attrs: { name: \"group-1\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: firstHalf\n },\n {\n type: \"column\",\n attrs: { name: \"group-2\", label: \"\", className: \"col-12 sm:col-12 md:col-6 lg:col-6\" },\n children: secondHalf\n }\n ]\n }\n ]\n }\n ]\n }, null, 3)\n }\n ];\n\n for (const view of modelViews) {\n const existingView = await viewRepo.findOne({ where: { name: view.name } });\n\n if (!existingView) {\n const createdView = viewRepo.create(view);\n await viewRepo.save(createdView);\n }\n }\n\n let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });\n\n const actionData = {\n displayName: `${model.displayName} List View`,\n name: `${model.singularName}-list-view`,\n type: \"solid\",\n domain: \"\" as any,\n context: \"\" as any,\n customComponent: \"\",\n customIsModal: true,\n serverEndpoint: \"\",\n view: view,\n module: resolvedModule,\n model: model\n };\n\n let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });\n\n if (!existingAction) {\n const createdAction = actionRepo.create(actionData);\n existingAction = await actionRepo.save(createdAction);\n }\n\n const adminRole = await this.roleService.findRoleByName('Admin');\n\n const menuData = {\n displayName: `${model.displayName}`,\n name: `${model.singularName}-menu-item`,\n sequenceNumber: 1,\n action: existingAction,\n module: resolvedModule,\n roles: [adminRole],\n parentMenuItemUserKey: \"\"\n };\n\n let existingMenu = await menuRepo.findOne({ where: { name: menuData.name } });\n\n if (!existingMenu) {\n const createdMenu = menuRepo.create(menuData);\n await menuRepo.save(createdMenu);\n }\n }\n\n async generateCode(options: CodeGenerationOptions) {\n const query = {\n populate: [\"module\", \"fields\"]\n };\n\n const model = options.modelId\n ? await this.findOne(options.modelId, query)\n : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n options.fieldIdsForRemoval = model.fields\n .filter(field => field.isMarkedForRemoval)\n .map(field => field.id);\n\n const refreshModelCodeOutput = await this.generateModelCode(options);\n const removeFieldCodeOuput = await this.generateRemoveFieldsCode(options);\n return { model, removeFieldCodeOuput, refreshModelCodeOutput };\n }\n\n async generateRemoveFieldsCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n if (!options.fieldIdsForRemoval || options.fieldIdsForRemoval.length === 0) {\n return \"\";\n }\n\n const query = {\n populate: [\"module\", \"fields\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n //Filter out the fields by id\n const fieldsForRemoval = model.fields.filter((field) => options.fieldIdsForRemoval.includes(+field.id));\n const removeOutput = await this.executeRemoveFieldsCommand(model, fieldsForRemoval, options.dryRun);\n\n // Remove the fields from the database as well. This also checks, if the field is marked for removal\n fieldsForRemoval.forEach((field: FieldMetadata) => {\n if (field.isMarkedForRemoval) {\n this.fieldMetadataService.delete(field.id);\n }\n });\n\n // Remove the fields from metadata json file \n\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n\n // Check if the model already exists in `models`\n const existingModelIndex = metaData.moduleMetadata.models.findIndex(\n (existingModel: any) => existingModel.singularName === model.singularName\n );\n\n const modelMetaData = metaData.moduleMetadata.models[existingModelIndex];\n\n // Remove fields marked for removal from modelMetaData.fields\n modelMetaData.fields = modelMetaData.fields.filter((field: any) => field.isMarkedForRemoval !== true);\n\n if (existingModelIndex !== -1) {\n // Update the existing model\n metaData.moduleMetadata.models[existingModelIndex] = modelMetaData;\n } else {\n // Add the new model\n metaData.moduleMetadata.models.push(modelMetaData);\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\n return removeOutput;\n }\n\n async generateModelCode(options: CodeGenerationOptions): Promise<string> {\n if (!options.modelId && !options.modelUserKey) {\n throw new BadRequestException(ERROR_MESSAGES.MODEL_REQUIRED_FOR_CODE_GENERATION);\n }\n\n const query = {\n populate: [\"module\", \"fields\", \"parentModel\", \"parentModel.module\"]\n };\n const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);\n\n //Execute the schematic command to refresh the model\n const refreshOuput = await this.executeRefreshModelCommand(model, options.dryRun);\n\n return `${refreshOuput}`;\n }\n\n private async executeRefreshModelCommand(model: ModelMetadata, dryRun: boolean = false): Promise<string> {\n const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);\n const output = await this.schematicService.executeSchematicCommand(\n REFRESH_MODEL_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n moduleDisplayName: model.module.displayName,\n dataSource: model.dataSource,\n table: model.tableName,\n fields: fieldsForRefresh,\n modelEnableSoftDelete: model.enableSoftDelete,\n parentModel: model.parentModel?.singularName,\n parentModule: model.parentModel?.module?.name,\n draftPublishWorkflowEnabled: model.draftPublishWorkflow,\n },\n dryRun\n );\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n private async executeRemoveFieldsCommand(model: ModelMetadata, fieldsForRemoval: FieldMetadata[], dryRun: boolean = false): Promise<string> {\n if (!fieldsForRemoval || fieldsForRemoval.length === 0) {\n return \"\";\n }\n const output = await this.schematicService.executeSchematicCommand(\n REMOVE_FIELDS_COMMAND,\n {\n module: model.module.name,\n model: model.singularName,\n fields: fieldsForRemoval,\n },\n dryRun\n );\n\n this.logger.debug(`Schematic output : ${output}`);\n return output;\n }\n\n async updateUserKey(data: any) {\n const { modelName, fieldName } = data;\n\n const model = await this.modelMetadataRepo.findOne({\n where: { singularName: modelName },\n relations: ['fields', 'userKeyField'],\n });\n\n if (!model) {\n throw new Error(`Model with name ${modelName} not found`);\n }\n\n if (model.userKeyField) {\n throw new Error(`User key is already set to ${model.userKeyField.name}. No changes were made.`);\n }\n\n const fieldToUpdate = model.fields.find(field => field.name === fieldName);\n if (!fieldToUpdate) {\n throw new Error(`Field with name ${fieldName} not found in model ${modelName}`);\n }\n\n fieldToUpdate.isUserKey = true;\n\n model.userKeyField = fieldToUpdate;\n\n await this.modelMetadataRepo.save(model);\n\n return {\n message: `User key has been successfully updated to ${fieldName}.`,\n success: true\n };\n }\n\n private async getRelationInverseFields(modelId: number, repo: Repository<FieldMetadata>): Promise<FieldMetadata[]> {\n return await repo.find({\n where: {\n model: {\n id: modelId\n },\n type: SolidFieldType.relation,\n relationCreateInverse: true\n },\n relations: {\n model: {\n module: true\n }\n }\n });\n }\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setting.service.d.ts","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,qBACa,cAAe,SAAQ,WAAW,CAAC,OAAO,CAAC;IAEpD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAExD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACd,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAf9C,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EACL,gBAAgB,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,EAErE,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EAE5D,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,SAAS,EAAE,SAAS,EACZ,qBAAqB,EAAE,qBAAqB,EACpB,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC;IAMrE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"setting.service.d.ts","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,qBACa,cAAe,SAAQ,WAAW,CAAC,OAAO,CAAC;IAEpD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAExD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACd,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAf9C,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EACL,gBAAgB,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,EAErE,mBAAmB,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EAE5D,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EACzB,SAAS,EAAE,SAAS,EACZ,qBAAqB,EAAE,qBAAqB,EACpB,cAAc,EAAE,UAAU,CAAC,IAAI,CAAC;IAMrE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4DpC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAkDlD,OAAO,CAAC,kBAAkB;IA2CpB,cAAc,CAAC,UAAU,EAAE,MAAM;IA8BjC,cAAc,CAClB,QAAQ,GAAE,gBAAgB,EAAO,EACjC,aAAa,GAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAM,GAC7C,OAAO,CAAC,OAAO,EAAE,CAAC;IA0Ff,cAAc,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;CAmC5F"}
|
|
@@ -84,7 +84,8 @@ let SettingService = class SettingService extends crud_service_1.CRUDService {
|
|
|
84
84
|
solidXGenAiCodeBuilderConfig: JSON.stringify({
|
|
85
85
|
defaultProvider: "",
|
|
86
86
|
availableProviders: []
|
|
87
|
-
})
|
|
87
|
+
}),
|
|
88
|
+
showNameFieldsForRegistration: this.iamConfiguration.showNameFieldsForRegistration
|
|
88
89
|
};
|
|
89
90
|
const existingSettings = await this.repo.find();
|
|
90
91
|
const existingKeys = new Set(existingSettings.map(s => s.key));
|
|
@@ -176,7 +177,8 @@ let SettingService = class SettingService extends crud_service_1.CRUDService {
|
|
|
176
177
|
defaultProvider: "",
|
|
177
178
|
availableProviders: []
|
|
178
179
|
}),
|
|
179
|
-
iamAutoGeneratedPassword: this.iamConfiguration.iamAutoGeneratedPassword
|
|
180
|
+
iamAutoGeneratedPassword: this.iamConfiguration.iamAutoGeneratedPassword,
|
|
181
|
+
showNameFieldsForRegistration: this.iamConfiguration.showNameFieldsForRegistration
|
|
180
182
|
};
|
|
181
183
|
}
|
|
182
184
|
async getConfigValue(settingKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService, ConfigType } 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 { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport commonConfig from 'src/config/common.config';\nimport { iamConfig } from 'src/config/iam.config';\nimport { Setting } from '../entities/setting.entity';\nimport { RequestContextService } from './request-context.service';\nimport { User } from 'src/entities/user.entity';\nimport { CreateSettingDto } from 'src/dtos/create-setting.dto';\n\n@Injectable()\nexport class SettingService extends CRUDService<Setting> {\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 @Inject(iamConfig.KEY) private readonly iamConfiguration: ConfigType<typeof iamConfig>,\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n @InjectRepository(Setting, 'default')\n readonly repo: Repository<Setting>,\n readonly moduleRef: ModuleRef,\n private readonly requestContextService: RequestContextService,\n @InjectRepository(User) private readonly userRepository: Repository<User>,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'setting', 'solid-core', moduleRef\n );\n }\n\n async seedDefaultSettings(): Promise<void> {\n const settingsSeederData = {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n iamPasswordRegistrationEnabled: this.iamConfiguration.iamPasswordRegistrationEnabled,\n passwordlessRegistration: this.iamConfiguration.passwordlessRegistration,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\",\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: process.env.SOLID_APP_SUBTITLE || \"Lorem Ipsum\",\n appDescription: process.env.SOLID_APP_DESCRIPTION || \"lorem ipsum\",\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail : null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n })\n };\n\n const existingSettings = await this.repo.find();\n const existingKeys = new Set(existingSettings.map(s => s.key));\n\n const settingsToInsert: Setting[] = [];\n for (const [key, value] of Object.entries(settingsSeederData)) {\n if (!existingKeys.has(key)) {\n const setting = new Setting();\n setting.key = key;\n setting.value = typeof value === 'boolean' ? value.toString() :\n Array.isArray(value) ? value.join(',') :\n value === null || value === undefined ? '' : String(value);\n settingsToInsert.push(setting);\n }\n }\n\n if (settingsToInsert.length > 0) {\n await this.repo.save(settingsToInsert);\n }\n }\n\n async wrapSettings(): Promise<Record<string, any>> {\n const settingsArray: Setting[] = await this.repo.find();\n\n if (!settingsArray || settingsArray.length === 0) {\n return this.getDefaultSettings();\n }\n\n const settingsMap: Record<string, any> = {};\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n let value = setting.value;\n try {\n settingsMap[setting.key] = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n settingsMap[setting.key] = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n settingsMap[setting.key] = Number(value);\n } else if (value.includes(',')) {\n settingsMap[setting.key] = value.split(',').map(item => item.trim());\n } else {\n settingsMap[setting.key] = value;\n }\n }\n\n // if (value === 'true' || value === 'false') {\n // settingsMap[setting.key] = value === 'true';\n // }\n // else if (!isNaN(Number(value)) && value.trim() !== '') {\n // settingsMap[setting.key] = Number(value);\n // }\n // else if (value.includes(',')) {\n // settingsMap[setting.key] = value.split(',').map(item => item.trim());\n // }\n // else {\n // settingsMap[setting.key] = value;\n // }\n }\n } \n\n const defaultSettings = this.getDefaultSettings();\n\n const mergedSettings = Object.keys(defaultSettings).reduce((acc, key) => {\n acc[key] = settingsMap[key] !== undefined ? settingsMap[key] : defaultSettings[key];\n return acc;\n }, {} as Record<string, any>);\n\n return mergedSettings;\n }\n\n private getDefaultSettings(): Record<string, any> {\n return {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n iamPasswordRegistrationEnabled: this.iamConfiguration.iamPasswordRegistrationEnabled,\n passwordlessRegistration: this.iamConfiguration.passwordlessRegistration,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\", //in_form_view | in_image_view\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: null,\n appDescription: null,\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n forceChangePasswordOnFirstLogin: true,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail : null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n iamAutoGeneratedPassword:this.iamConfiguration.iamAutoGeneratedPassword\n };\n }\n\n async getConfigValue(settingKey: string) {\n try {\n const settingsArray: Setting[] = await this.repo.find();\n const settingEntry = settingsArray.find(setting => setting.key === settingKey);\n\n if (settingEntry && settingEntry.value !== null && settingEntry.value !== undefined) {\n const value = settingEntry.value;\n\n if (value === 'true' || value === 'false') {\n return value === 'true';\n }\n else if (!isNaN(Number(value)) && value.trim() !== '') {\n return Number(value);\n }\n else if (value.includes(',')) {\n return value.split(',').map(item => item.trim());\n }\n else {\n return value;\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n } catch (error) {\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n }\n }\n\n async updateSettings(\n settings: CreateSettingDto[] = [],\n uploadedFiles: Array<Express.Multer.File> = []\n ): Promise<Setting[]> {\n const activeUser = this.requestContextService.getActiveUser();\n const userId = activeUser?.sub;\n\n const existingSettings = await this.repo.find();\n\n const settingsToUpdate: Setting[] = [];\n const settingsToCreate: Setting[] = [];\n\n let user: User | null = null;\n const hasUserSettings = settings.some(dto => dto.type === 'user');\n if (hasUserSettings && userId) {\n user = await this.userRepository.findOne({ where: { id: userId } });\n }\n\n // Handle uploaded files\n if (uploadedFiles?.length) {\n for (const file of uploadedFiles) {\n const settingKey = file.fieldname;\n const relativeFileName = `${file.filename}-${file.originalname}`;\n const storagePath = `${this.configService.get('app-builder.fileStorageDir')}/${relativeFileName}`;\n const baseUrl = process.env.BASE_URL || '';\n const fileUrl = `${baseUrl}/${storagePath}`;\n\n await this.fileService.copyFile(file.path, storagePath);\n await this.fileService.deleteFile(file.path);\n\n const matchedDto = settings.find(dto => dto.key === settingKey);\n const settingType = matchedDto?.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === settingKey);\n if (existingSetting) {\n existingSetting.value = fileUrl;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = settingKey;\n newSetting.value = fileUrl;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n }\n\n // Handle non-file settings\n for (const settingDto of settings) {\n if (uploadedFiles?.some(file => file.fieldname === settingDto.key)) {\n continue; // skip if already handled via file\n }\n\n const key = settingDto.key;\n const value = settingDto.value ?? '';\n const settingType = settingDto.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === key);\n if (existingSetting) {\n existingSetting.value = value;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = key;\n newSetting.value = value;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n\n if (settingsToUpdate.length > 0) {\n await this.repo.save(settingsToUpdate);\n }\n\n if (settingsToCreate.length > 0) {\n await this.repo.save(settingsToCreate);\n }\n\n return [...settingsToUpdate, ...settingsToCreate];\n }\n\n async getAllSettings(): Promise<{ system: Record<string, any>, user: Record<string, any> }> {\n const settingsArray = await this.repo.find({ relations: ['user'] });\n\n const system: Record<string, any> = {};\n const user: Record<string, any> = {};\n\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n const value = setting.value;\n let parsedValue: any;\n\n try {\n parsedValue = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n parsedValue = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n parsedValue = Number(value);\n } else if (value.includes(',')) {\n parsedValue = value.split(',').map(item => item.trim());\n } else {\n parsedValue = value;\n }\n }\n if (setting.type === 'user') {\n user[setting.key] = parsedValue;\n } else {\n system[setting.key] = parsedValue;\n }\n }\n }\n\n return { system, user };\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../src/services/setting.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { ConfigService, ConfigType } 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 { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport commonConfig from 'src/config/common.config';\nimport { iamConfig } from 'src/config/iam.config';\nimport { Setting } from '../entities/setting.entity';\nimport { RequestContextService } from './request-context.service';\nimport { User } from 'src/entities/user.entity';\nimport { CreateSettingDto } from 'src/dtos/create-setting.dto';\n\n@Injectable()\nexport class SettingService extends CRUDService<Setting> {\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 @Inject(iamConfig.KEY) private readonly iamConfiguration: ConfigType<typeof iamConfig>,\n @Inject(commonConfig.KEY)\n private readonly commonConfiguration: ConfigType<typeof commonConfig>,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n @InjectRepository(Setting, 'default')\n readonly repo: Repository<Setting>,\n readonly moduleRef: ModuleRef,\n private readonly requestContextService: RequestContextService,\n @InjectRepository(User) private readonly userRepository: Repository<User>,\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'setting', 'solid-core', moduleRef\n );\n }\n\n async seedDefaultSettings(): Promise<void> {\n const settingsSeederData = {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n iamPasswordRegistrationEnabled: this.iamConfiguration.iamPasswordRegistrationEnabled,\n passwordlessRegistration: this.iamConfiguration.passwordlessRegistration,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\",\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: process.env.SOLID_APP_SUBTITLE || \"Lorem Ipsum\",\n appDescription: process.env.SOLID_APP_DESCRIPTION || \"lorem ipsum\",\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail : null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n showNameFieldsForRegistration:this.iamConfiguration.showNameFieldsForRegistration\n };\n\n const existingSettings = await this.repo.find();\n const existingKeys = new Set(existingSettings.map(s => s.key));\n\n const settingsToInsert: Setting[] = [];\n for (const [key, value] of Object.entries(settingsSeederData)) {\n if (!existingKeys.has(key)) {\n const setting = new Setting();\n setting.key = key;\n setting.value = typeof value === 'boolean' ? value.toString() :\n Array.isArray(value) ? value.join(',') :\n value === null || value === undefined ? '' : String(value);\n settingsToInsert.push(setting);\n }\n }\n\n if (settingsToInsert.length > 0) {\n await this.repo.save(settingsToInsert);\n }\n }\n\n async wrapSettings(): Promise<Record<string, any>> {\n const settingsArray: Setting[] = await this.repo.find();\n\n if (!settingsArray || settingsArray.length === 0) {\n return this.getDefaultSettings();\n }\n\n const settingsMap: Record<string, any> = {};\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n let value = setting.value;\n try {\n settingsMap[setting.key] = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n settingsMap[setting.key] = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n settingsMap[setting.key] = Number(value);\n } else if (value.includes(',')) {\n settingsMap[setting.key] = value.split(',').map(item => item.trim());\n } else {\n settingsMap[setting.key] = value;\n }\n }\n\n // if (value === 'true' || value === 'false') {\n // settingsMap[setting.key] = value === 'true';\n // }\n // else if (!isNaN(Number(value)) && value.trim() !== '') {\n // settingsMap[setting.key] = Number(value);\n // }\n // else if (value.includes(',')) {\n // settingsMap[setting.key] = value.split(',').map(item => item.trim());\n // }\n // else {\n // settingsMap[setting.key] = value;\n // }\n }\n } \n\n const defaultSettings = this.getDefaultSettings();\n\n const mergedSettings = Object.keys(defaultSettings).reduce((acc, key) => {\n acc[key] = settingsMap[key] !== undefined ? settingsMap[key] : defaultSettings[key];\n return acc;\n }, {} as Record<string, any>);\n\n return mergedSettings;\n }\n\n private getDefaultSettings(): Record<string, any> {\n return {\n allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,\n iamPasswordRegistrationEnabled: this.iamConfiguration.iamPasswordRegistrationEnabled,\n passwordlessRegistration: this.iamConfiguration.passwordlessRegistration,\n activateUserOnRegistration: this.iamConfiguration.activateUserOnRegistration,\n iamGoogleOAuthEnabled: false,\n authPagesLayout: \"center\",\n authPagesTheme: \"light\",\n appLogo: null,\n companylogo: null,\n favicon: null,\n appLogoPosition: \"in_form_view\", //in_form_view | in_image_view\n showAuthContent: false,\n appTitle: process.env.SOLID_APP_NAME || \"Solid App\",\n appSubtitle: null,\n appDescription: null,\n showLegalLinks: false,\n appTnc: null,\n appPrivacyPolicy: null,\n defaultRole: this.iamConfiguration.defaultRole,\n shouldQueueEmails: this.commonConfiguration.shouldQueueEmails,\n shouldQueueSms: this.commonConfiguration.shouldQueueSms,\n enableDarkMode: true,\n copyright: null,\n forceChangePasswordOnFirstLogin: true,\n enableUsername: true,\n enabledNotification: true,\n contactSupportEmail : null,\n contactSupportDisplayName: null,\n contactSupportIcon: null,\n authScreenRightBackgroundImage: null,\n authScreenLeftBackgroundImage: null,\n authScreenCenterBackgroundImage: null,\n solidXGenAiCodeBuilderConfig: JSON.stringify({\n defaultProvider: \"\",\n availableProviders: []\n }),\n iamAutoGeneratedPassword:this.iamConfiguration.iamAutoGeneratedPassword,\n showNameFieldsForRegistration:this.iamConfiguration.showNameFieldsForRegistration\n };\n }\n\n async getConfigValue(settingKey: string) {\n try {\n const settingsArray: Setting[] = await this.repo.find();\n const settingEntry = settingsArray.find(setting => setting.key === settingKey);\n\n if (settingEntry && settingEntry.value !== null && settingEntry.value !== undefined) {\n const value = settingEntry.value;\n\n if (value === 'true' || value === 'false') {\n return value === 'true';\n }\n else if (!isNaN(Number(value)) && value.trim() !== '') {\n return Number(value);\n }\n else if (value.includes(',')) {\n return value.split(',').map(item => item.trim());\n }\n else {\n return value;\n }\n }\n\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n } catch (error) {\n const defaultSettings = this.getDefaultSettings();\n return defaultSettings[settingKey];\n }\n }\n\n async updateSettings(\n settings: CreateSettingDto[] = [],\n uploadedFiles: Array<Express.Multer.File> = []\n ): Promise<Setting[]> {\n const activeUser = this.requestContextService.getActiveUser();\n const userId = activeUser?.sub;\n\n const existingSettings = await this.repo.find();\n\n const settingsToUpdate: Setting[] = [];\n const settingsToCreate: Setting[] = [];\n\n let user: User | null = null;\n const hasUserSettings = settings.some(dto => dto.type === 'user');\n if (hasUserSettings && userId) {\n user = await this.userRepository.findOne({ where: { id: userId } });\n }\n\n // Handle uploaded files\n if (uploadedFiles?.length) {\n for (const file of uploadedFiles) {\n const settingKey = file.fieldname;\n const relativeFileName = `${file.filename}-${file.originalname}`;\n const storagePath = `${this.configService.get('app-builder.fileStorageDir')}/${relativeFileName}`;\n const baseUrl = process.env.BASE_URL || '';\n const fileUrl = `${baseUrl}/${storagePath}`;\n\n await this.fileService.copyFile(file.path, storagePath);\n await this.fileService.deleteFile(file.path);\n\n const matchedDto = settings.find(dto => dto.key === settingKey);\n const settingType = matchedDto?.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === settingKey);\n if (existingSetting) {\n existingSetting.value = fileUrl;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = settingKey;\n newSetting.value = fileUrl;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n }\n\n // Handle non-file settings\n for (const settingDto of settings) {\n if (uploadedFiles?.some(file => file.fieldname === settingDto.key)) {\n continue; // skip if already handled via file\n }\n\n const key = settingDto.key;\n const value = settingDto.value ?? '';\n const settingType = settingDto.type ?? 'system';\n\n const existingSetting = existingSettings.find(s => s.key === key);\n if (existingSetting) {\n existingSetting.value = value;\n existingSetting.type = settingType;\n settingsToUpdate.push(existingSetting);\n } else {\n const newSetting = new Setting();\n newSetting.key = key;\n newSetting.value = value;\n newSetting.type = settingType;\n\n if (settingType === 'user' && user) {\n newSetting.user = user;\n }\n\n settingsToCreate.push(newSetting);\n }\n }\n\n if (settingsToUpdate.length > 0) {\n await this.repo.save(settingsToUpdate);\n }\n\n if (settingsToCreate.length > 0) {\n await this.repo.save(settingsToCreate);\n }\n\n return [...settingsToUpdate, ...settingsToCreate];\n }\n\n async getAllSettings(): Promise<{ system: Record<string, any>, user: Record<string, any> }> {\n const settingsArray = await this.repo.find({ relations: ['user'] });\n\n const system: Record<string, any> = {};\n const user: Record<string, any> = {};\n\n for (const setting of settingsArray) {\n if (setting.key && setting.value !== undefined && setting.value !== null) {\n const value = setting.value;\n let parsedValue: any;\n\n try {\n parsedValue = JSON.parse(value);\n } catch {\n if (value === 'true' || value === 'false') {\n parsedValue = value === 'true';\n } else if (!isNaN(Number(value)) && value.trim() !== '') {\n parsedValue = Number(value);\n } else if (value.includes(',')) {\n parsedValue = value.split(',').map(item => item.trim());\n } else {\n parsedValue = value;\n }\n }\n if (setting.type === 'user') {\n user[setting.key] = parsedValue;\n } else {\n system[setting.key] = parsedValue;\n }\n }\n }\n\n return { system, user };\n }\n\n}\n"]}
|
|
@@ -23,6 +23,21 @@ export declare class SolidTsMorphService {
|
|
|
23
23
|
registerNestProvider(modulePath: string, providerClassName: string, importFrom: string, registerIn: Array<Bucket>, uniqueGuard?: boolean): {
|
|
24
24
|
staged: boolean;
|
|
25
25
|
};
|
|
26
|
+
addMethodToExistingClass(filePath: string, className: string, methodName: string, methodCode: string): {
|
|
27
|
+
staged: boolean;
|
|
28
|
+
overwritten: boolean;
|
|
29
|
+
skipped: boolean;
|
|
30
|
+
};
|
|
31
|
+
registerSolidUiExtension(filePath: string, lineToAdd: string): {
|
|
32
|
+
staged: boolean;
|
|
33
|
+
overwritten: boolean;
|
|
34
|
+
skipped: boolean;
|
|
35
|
+
};
|
|
36
|
+
addImport(filePath: string, importLine: string): {
|
|
37
|
+
staged: boolean;
|
|
38
|
+
overwritten: boolean;
|
|
39
|
+
skipped: boolean;
|
|
40
|
+
};
|
|
26
41
|
}
|
|
27
42
|
export {};
|
|
28
43
|
//# sourceMappingURL=solid-ts-morph.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solid-ts-morph.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-ts-morph.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solid-ts-morph.service.d.ts","sourceRoot":"","sources":["../../src/services/solid-ts-morph.service.ts"],"names":[],"mappings":"AAOA,KAAK,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AAStC,qBACa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,OAAO,CAAU;IAGzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAA8D;IAClF,OAAO,CAAC,gBAAgB,CAAqB;IAG7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;;IA0BtD,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,GAAG;IAMX,KAAK,IAAI,IAAI;IAmBb,QAAQ,IAAI,IAAI;IAgBV,MAAM,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAiD1C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG;QAAE,eAAe,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAqB/G,oBAAoB,CAChB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EACzB,WAAW,UAAO,GACnB;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE;IAyDtB,wBAAwB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACnB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IA6B9D,wBAAwB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAwB9D,SAAS,CACL,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACnB;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;CA6CjE"}
|