Added apps subscriber to listen entity events

This commit is contained in:
Muhsin Shah 2024-06-27 14:12:52 +05:30
parent c3cd2c2f2f
commit ea37a024e0
5 changed files with 51 additions and 5 deletions

View file

@ -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<App> {
constructor(
dataSource: DataSource,
@InjectRepository(AppVersion)
private readonly appVersionRepository: Repository<AppVersion>,
@InjectRepository(App)
private readonly appRepository: Repository<App>
) {
dataSource.subscribers.push(this);
}
listenTo() {
return App;
}
async afterInsert(event: InsertEvent<App>): Promise<void> {
const app = event.entity;
if (!app.slug) {
await this.appRepository.update(app.id, { slug: app.id });
}
}
async afterLoad(app: App): Promise<void> {
if (app) {
app.editingVersion = await this.appVersionRepository.findOne({
where: { appId: app.id },
order: { updatedAt: 'DESC' },
});
}
}
}

View file

@ -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() });
}

View file

@ -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],
})

View file

@ -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 {

View file

@ -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');