From 75afa742ea12e2504f6e2f528259e4d10976db1f Mon Sep 17 00:00:00 2001 From: fallenbagel <98979876+Fallenbagel@users.noreply.github.com> Date: Fri, 21 Feb 2025 02:09:09 +0800 Subject: [PATCH] fix(mediarequest): optimise more typeorm lifecycle triggers 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 b758da97..8ef614b1 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; }