fix(mediasubscriber): use event.manager for parent media updates on remove
Replace `getRepository(Media)` calls with `event.manager` in the `afterRemove` hook so that parent-media status resets run within the same transaction/QueryRunner (important for postgresql. Doesnt affect sqlite).
This commit is contained in:
@@ -21,6 +21,7 @@ import { getSettings } from '@server/lib/settings';
|
||||
import logger from '@server/logger';
|
||||
import { isEqual, truncate } from 'lodash';
|
||||
import type {
|
||||
EntityManager,
|
||||
EntitySubscriberInterface,
|
||||
InsertEvent,
|
||||
RemoveEvent,
|
||||
@@ -741,13 +742,17 @@ export class MediaRequestSubscriber
|
||||
}
|
||||
}
|
||||
|
||||
public async handleRemoveParentUpdate(entity: MediaRequest): Promise<void> {
|
||||
const mediaRepository = getRepository(Media);
|
||||
const fullMedia = await mediaRepository.findOneOrFail({
|
||||
public async handleRemoveParentUpdate(
|
||||
manager: EntityManager,
|
||||
entity: MediaRequest
|
||||
): Promise<void> {
|
||||
const fullMedia = await manager.findOneOrFail(Media, {
|
||||
where: { id: entity.media.id },
|
||||
relations: { requests: true },
|
||||
});
|
||||
|
||||
if (!fullMedia) return;
|
||||
|
||||
if (
|
||||
!fullMedia.requests.some((request) => !request.is4k) &&
|
||||
fullMedia.status !== MediaStatus.AVAILABLE
|
||||
@@ -762,7 +767,7 @@ export class MediaRequestSubscriber
|
||||
fullMedia.status4k = MediaStatus.UNKNOWN;
|
||||
}
|
||||
|
||||
mediaRepository.save(fullMedia);
|
||||
await manager.save(fullMedia);
|
||||
}
|
||||
|
||||
public afterUpdate(event: UpdateEvent<MediaRequest>): void {
|
||||
@@ -796,12 +801,15 @@ export class MediaRequestSubscriber
|
||||
this.updateParentStatus(event.entity as MediaRequest);
|
||||
}
|
||||
|
||||
public afterRemove(event: RemoveEvent<MediaRequest>): void {
|
||||
public async afterRemove(event: RemoveEvent<MediaRequest>): Promise<void> {
|
||||
if (!event.entity) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.handleRemoveParentUpdate(event.entity as MediaRequest);
|
||||
await this.handleRemoveParentUpdate(
|
||||
event.manager as EntityManager,
|
||||
event.entity as MediaRequest
|
||||
);
|
||||
}
|
||||
|
||||
public listenTo(): typeof MediaRequest {
|
||||
|
||||
Reference in New Issue
Block a user