fix(media-request-subscriber): prevent updating season status if other active requests exist

This commit is contained in:
fallenbagel
2026-02-08 17:47:31 +08:00
parent 0293632b68
commit d73f0391ab
2 changed files with 25 additions and 4 deletions

View File

@@ -795,6 +795,7 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
const statusKey = entity.is4k ? 'status4k' : 'status';
const seasonRequestRepository = getRepository(SeasonRequest);
const requestRepository = getRepository(MediaRequest);
if (
entity.status === MediaRequestStatus.APPROVED &&
@@ -867,9 +868,28 @@ export class MediaRequestSubscriber implements EntitySubscriberInterface<MediaRe
(s) => s.seasonNumber === seasonRequest.seasonNumber
);
if (season) {
season[statusKey] = MediaStatus.UNKNOWN;
await seasonRepository.save(season);
if (season && season[statusKey] == MediaStatus.PENDING) {
const otherActiveRequests = await requestRepository
.createQueryBuilder('request')
.leftJoinAndSelect('request.seasons', 'season')
.where('request.mediaId = :mediaId', { mediaId: media.id })
.andWhere('request.id != :requestId', { requestId: entity.id })
.andWhere('request.is4k = :is4k', { is4k: entity.is4k })
.andWhere('request.status NOT IN (:...statuses)', {
statuses: [
MediaRequestStatus.DECLINED,
MediaRequestStatus.COMPLETED,
],
})
.andWhere('season.seasonNumber = :seasonNumber', {
seasonNumber: season.seasonNumber,
})
.getCount();
if (otherActiveRequests === 0) {
season[statusKey] = MediaStatus.UNKNOWN;
await seasonRepository.save(season);
}
}
}
}

View File

@@ -363,7 +363,8 @@ const TvRequestModal = ({
.filter(
(request) =>
request.is4k === is4k &&
request.status !== MediaRequestStatus.DECLINED
request.status !== MediaRequestStatus.DECLINED &&
request.status !== MediaRequestStatus.COMPLETED
)
.forEach((request) => {
if (!seasonRequest) {