diff --git a/server/src/entity-subscribers/apps.subscriber.ts b/server/src/entity-subscribers/apps.subscriber.ts new file mode 100644 index 0000000000..a8340a749e --- /dev/null +++ b/server/src/entity-subscribers/apps.subscriber.ts @@ -0,0 +1,38 @@ +import { DataSource, EntitySubscriberInterface, EventSubscriber, InsertEvent } from 'typeorm'; +import { Repository } from 'typeorm'; +import { InjectRepository } from '@nestjs/typeorm'; +import { AppVersion } from 'src/entities/app_version.entity'; +import { App } from 'src/entities/app.entity'; + +@EventSubscriber() +export class AppsSubscriber implements EntitySubscriberInterface { + constructor( + dataSource: DataSource, + @InjectRepository(AppVersion) + private readonly appVersionRepository: Repository, + @InjectRepository(App) + private readonly appRepository: Repository + ) { + dataSource.subscribers.push(this); + } + + listenTo() { + return App; + } + + async afterInsert(event: InsertEvent): Promise { + const app = event.entity; + if (!app.slug) { + await this.appRepository.update(app.id, { slug: app.id }); + } + } + + async afterLoad(app: App): Promise { + if (app) { + app.editingVersion = await this.appVersionRepository.findOne({ + where: { appId: app.id }, + order: { updatedAt: 'DESC' }, + }); + } + } +} diff --git a/server/src/helpers/utils.helper.ts b/server/src/helpers/utils.helper.ts index a5ac07081a..7d4dbd4b1a 100644 --- a/server/src/helpers/utils.helper.ts +++ b/server/src/helpers/utils.helper.ts @@ -72,7 +72,9 @@ export function lowercaseString(value: string) { } export const updateTimestampForAppVersion = async (manager, appVersionId) => { - const appVersion = await manager.findOne('app_versions', appVersionId); + const appVersion = await manager.findOne('app_versions', { + where: { id: appVersionId }, + }); if (appVersion) { await manager.update('app_versions', appVersionId, { updatedAt: new Date() }); } diff --git a/server/src/modules/apps/apps.module.ts b/server/src/modules/apps/apps.module.ts index 8fab37b8fe..d7bea4560b 100644 --- a/server/src/modules/apps/apps.module.ts +++ b/server/src/modules/apps/apps.module.ts @@ -43,6 +43,7 @@ import { ComponentsService } from '@services/components.service'; import { PageService } from '@services/page.service'; import { EventsService } from '@services/events_handler.service'; import { TooljetDbModule } from '../tooljet_db/tooljet_db.module'; +import { AppsSubscriber } from 'src/entity-subscribers/apps.subscriber'; @Module({ imports: [ @@ -87,6 +88,7 @@ import { TooljetDbModule } from '../tooljet_db/tooljet_db.module'; ComponentsService, PageService, EventsService, + AppsSubscriber, ], controllers: [AppsController, AppsControllerV2, AppUsersController, AppsImportExportController], }) diff --git a/server/src/services/components.service.ts b/server/src/services/components.service.ts index 53c76626e2..0fddbba5f6 100644 --- a/server/src/services/components.service.ts +++ b/server/src/services/components.service.ts @@ -68,11 +68,13 @@ export class ComponentsService { } async update(componentDiff: object, appVersionId: string) { - return dbTransactionForAppVersionAssociationsUpdate(async (manager) => { + return dbTransactionForAppVersionAssociationsUpdate(async (manager:EntityManager) => { for (const componentId in componentDiff) { const { component } = componentDiff[componentId]; - const componentData: Component = await manager.findOne(Component, componentId); + const componentData: Component = await manager.findOne(Component, { + where: { id: componentId } + }); if (!componentData) { return { diff --git a/server/src/services/page.service.ts b/server/src/services/page.service.ts index b8618faf0f..3231edf4a4 100644 --- a/server/src/services/page.service.ts +++ b/server/src/services/page.service.ts @@ -55,8 +55,10 @@ export class PageService { } async clonePage(pageId: string, appVersionId: string) { - return dbTransactionForAppVersionAssociationsUpdate(async (manager) => { - const pageToClone = await manager.findOne(Page, pageId); + return dbTransactionForAppVersionAssociationsUpdate(async (manager:EntityManager) => { + const pageToClone = await manager.findOne(Page, { + where: {id:pageId} + }); if (!pageToClone) { throw new Error('Page not found');