From 80927b97058a219fca9fa580243cb3f966fb0b37 Mon Sep 17 00:00:00 2001 From: fallenbagel <98979876+fallenbagel@users.noreply.github.com> Date: Sun, 23 Feb 2025 00:16:03 +0800 Subject: [PATCH] fix(mediarequest): optimise more typeorm lifecycle triggers (#1376) This is related to #1218. This should fix more typeorm lifcycle trigger issues fix #513 --- server/entity/MediaRequest.ts | 45 ++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/server/entity/MediaRequest.ts b/server/entity/MediaRequest.ts index b758da974..8ef614b1e 100644 --- a/server/entity/MediaRequest.ts +++ b/server/entity/MediaRequest.ts @@ -734,8 +734,11 @@ export class MediaRequest { media.mediaType === MediaType.MOVIE && this.status === MediaRequestStatus.DECLINED ) { - media[this.is4k ? 'status4k' : 'status'] = MediaStatus.UNKNOWN; - mediaRepository.save(media); + const statusField = this.is4k ? 'status4k' : 'status'; + await mediaRepository.update( + { id: this.media.id }, + { [statusField]: MediaStatus.UNKNOWN } + ); } /** @@ -752,8 +755,11 @@ export class MediaRequest { ).length === 0 && media[this.is4k ? 'status4k' : 'status'] === MediaStatus.PENDING ) { - media[this.is4k ? 'status4k' : 'status'] = MediaStatus.UNKNOWN; - mediaRepository.save(media); + const statusField = this.is4k ? 'status4k' : 'status'; + mediaRepository.update( + { id: this.media.id }, + { [statusField]: MediaStatus.UNKNOWN } + ); } // Approve child seasons if parent is approved @@ -955,8 +961,10 @@ export class MediaRequest { }); const requestRepository = getRepository(MediaRequest); - this.status = MediaRequestStatus.APPROVED; - await requestRepository.save(this); + + await requestRepository.update(this.id, { + status: MediaRequestStatus.APPROVED, + }); return; } @@ -986,18 +994,22 @@ export class MediaRequest { throw new Error('Media data not found'); } - media[this.is4k ? 'externalServiceId4k' : 'externalServiceId'] = - radarrMovie.id; - media[this.is4k ? 'externalServiceSlug4k' : 'externalServiceSlug'] = - radarrMovie.titleSlug; - media[this.is4k ? 'serviceId4k' : 'serviceId'] = radarrSettings?.id; - await mediaRepository.save(media); + const updateFields = { + [this.is4k ? 'externalServiceId4k' : 'externalServiceId']: + radarrMovie.id, + [this.is4k ? 'externalServiceSlug4k' : 'externalServiceSlug']: + radarrMovie.titleSlug, + [this.is4k ? 'serviceId4k' : 'serviceId']: radarrMovie?.id, + }; + + await mediaRepository.update({ id: this.media.id }, updateFields); }) .catch(async () => { const requestRepository = getRepository(MediaRequest); - this.status = MediaRequestStatus.FAILED; - await requestRepository.save(this); + await requestRepository.update(this.id, { + status: MediaRequestStatus.FAILED, + }); logger.warn( 'Something went wrong sending movie request to Radarr, marking status as FAILED', @@ -1113,8 +1125,9 @@ export class MediaRequest { }); const requestRepository = getRepository(MediaRequest); - this.status = MediaRequestStatus.APPROVED; - await requestRepository.save(this); + await requestRepository.update(this.id, { + status: MediaRequestStatus.APPROVED, + }); return; }