You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.5 KiB
52 lines
1.5 KiB
import { MediaRequestStatus, MediaStatus } from '@server/constants/media';
|
|
import { getRepository } from '@server/datasource';
|
|
import Media from '@server/entity/Media';
|
|
import { MediaRequest } from '@server/entity/MediaRequest';
|
|
import type { EntitySubscriberInterface, UpdateEvent } from 'typeorm';
|
|
import { EventSubscriber } from 'typeorm';
|
|
|
|
@EventSubscriber()
|
|
export class MediaSubscriber implements EntitySubscriberInterface<Media> {
|
|
private async updateChildRequestStatus(event: Media, is4k: boolean) {
|
|
const requestRepository = getRepository(MediaRequest);
|
|
|
|
const requests = await requestRepository.find({
|
|
where: { media: { id: event.id } },
|
|
});
|
|
|
|
for (const request of requests) {
|
|
if (
|
|
request.is4k === is4k &&
|
|
request.status === MediaRequestStatus.PENDING
|
|
) {
|
|
request.status = MediaRequestStatus.APPROVED;
|
|
await requestRepository.save(request);
|
|
}
|
|
}
|
|
}
|
|
|
|
public beforeUpdate(event: UpdateEvent<Media>): void {
|
|
if (!event.entity) {
|
|
return;
|
|
}
|
|
|
|
if (
|
|
event.entity.status === MediaStatus.AVAILABLE &&
|
|
event.databaseEntity.status === MediaStatus.PENDING
|
|
) {
|
|
this.updateChildRequestStatus(event.entity as Media, false);
|
|
}
|
|
|
|
if (
|
|
event.entity.status4k === MediaStatus.AVAILABLE &&
|
|
event.databaseEntity.status4k === MediaStatus.PENDING
|
|
) {
|
|
this.updateChildRequestStatus(event.entity as Media, true);
|
|
}
|
|
}
|
|
|
|
public listenTo(): typeof Media {
|
|
return Media;
|
|
}
|
|
}
|