mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2025-12-24 02:39:18 -05:00
* feat: create the basis for the override rules * feat: add support for sonarr and keywords to override rules * feat: apply override rules in the media request * feat: add users to override rules * fix: save the settings modified by the override rules * fix: resolve type errors * style: run prettier * fix: add missing migration * fix: correct sonarr override rules * fix: create PostgreSQL migration and fix SQLite migration * fix: resolve type naming and fix i18n issue * fix: remove unrelated changes to the PR
137 lines
3.5 KiB
TypeScript
137 lines
3.5 KiB
TypeScript
import { getRepository } from '@server/datasource';
|
|
import OverrideRule from '@server/entity/OverrideRule';
|
|
import type { OverrideRuleResultsResponse } from '@server/interfaces/api/overrideRuleInterfaces';
|
|
import { Permission } from '@server/lib/permissions';
|
|
import { isAuthenticated } from '@server/middleware/auth';
|
|
import { Router } from 'express';
|
|
|
|
const overrideRuleRoutes = Router();
|
|
|
|
overrideRuleRoutes.get(
|
|
'/',
|
|
isAuthenticated(Permission.ADMIN),
|
|
async (req, res, next) => {
|
|
const overrideRuleRepository = getRepository(OverrideRule);
|
|
|
|
try {
|
|
const rules = await overrideRuleRepository.find({});
|
|
|
|
return res.status(200).json(rules as OverrideRuleResultsResponse);
|
|
} catch (e) {
|
|
next({ status: 404, message: e.message });
|
|
}
|
|
}
|
|
);
|
|
|
|
overrideRuleRoutes.post<
|
|
Record<string, string>,
|
|
OverrideRule,
|
|
{
|
|
users?: string;
|
|
genre?: string;
|
|
language?: string;
|
|
keywords?: string;
|
|
profileId?: number;
|
|
rootFolder?: string;
|
|
tags?: string;
|
|
radarrServiceId?: number;
|
|
sonarrServiceId?: number;
|
|
}
|
|
>('/', isAuthenticated(Permission.ADMIN), async (req, res, next) => {
|
|
const overrideRuleRepository = getRepository(OverrideRule);
|
|
|
|
try {
|
|
const rule = new OverrideRule({
|
|
users: req.body.users,
|
|
genre: req.body.genre,
|
|
language: req.body.language,
|
|
keywords: req.body.keywords,
|
|
profileId: req.body.profileId,
|
|
rootFolder: req.body.rootFolder,
|
|
tags: req.body.tags,
|
|
radarrServiceId: req.body.radarrServiceId,
|
|
sonarrServiceId: req.body.sonarrServiceId,
|
|
});
|
|
|
|
const newRule = await overrideRuleRepository.save(rule);
|
|
|
|
return res.status(200).json(newRule);
|
|
} catch (e) {
|
|
next({ status: 404, message: e.message });
|
|
}
|
|
});
|
|
|
|
overrideRuleRoutes.put<
|
|
{ ruleId: string },
|
|
OverrideRule,
|
|
{
|
|
users?: string;
|
|
genre?: string;
|
|
language?: string;
|
|
keywords?: string;
|
|
profileId?: number;
|
|
rootFolder?: string;
|
|
tags?: string;
|
|
radarrServiceId?: number;
|
|
sonarrServiceId?: number;
|
|
}
|
|
>('/:ruleId', isAuthenticated(Permission.ADMIN), async (req, res, next) => {
|
|
const overrideRuleRepository = getRepository(OverrideRule);
|
|
|
|
try {
|
|
const rule = await overrideRuleRepository.findOne({
|
|
where: {
|
|
id: Number(req.params.ruleId),
|
|
},
|
|
});
|
|
|
|
if (!rule) {
|
|
return next({ status: 404, message: 'Override Rule not found.' });
|
|
}
|
|
|
|
rule.users = req.body.users;
|
|
rule.genre = req.body.genre;
|
|
rule.language = req.body.language;
|
|
rule.keywords = req.body.keywords;
|
|
rule.profileId = req.body.profileId;
|
|
rule.rootFolder = req.body.rootFolder;
|
|
rule.tags = req.body.tags;
|
|
rule.radarrServiceId = req.body.radarrServiceId;
|
|
rule.sonarrServiceId = req.body.sonarrServiceId;
|
|
|
|
const newRule = await overrideRuleRepository.save(rule);
|
|
|
|
return res.status(200).json(newRule);
|
|
} catch (e) {
|
|
next({ status: 404, message: e.message });
|
|
}
|
|
});
|
|
|
|
overrideRuleRoutes.delete<{ ruleId: string }, OverrideRule>(
|
|
'/:ruleId',
|
|
isAuthenticated(Permission.ADMIN),
|
|
async (req, res, next) => {
|
|
const overrideRuleRepository = getRepository(OverrideRule);
|
|
|
|
try {
|
|
const rule = await overrideRuleRepository.findOne({
|
|
where: {
|
|
id: Number(req.params.ruleId),
|
|
},
|
|
});
|
|
|
|
if (!rule) {
|
|
return next({ status: 404, message: 'Override Rule not found.' });
|
|
}
|
|
|
|
await overrideRuleRepository.remove(rule);
|
|
|
|
return res.status(200).json(rule);
|
|
} catch (e) {
|
|
next({ status: 404, message: e.message });
|
|
}
|
|
}
|
|
);
|
|
|
|
export default overrideRuleRoutes;
|