feat: expose reviewed media roles

This commit is contained in:
ik
2026-09-21 08:00:15 +07:00
parent 81af8a02b6
commit 86515a9da1
8 changed files with 28 additions and 8 deletions
+5 -4
View File
@@ -1,4 +1,4 @@
import type { MediaAsset } from "./api";
import type { MediaAsset, MediaRole } from "./api";
const tokens = (value: string) => value
.toLocaleLowerCase("ru")
@@ -9,13 +9,14 @@ const tokens = (value: string) => value
.split(/\s+/)
.filter(Boolean);
export const findMediaByLabel = (assets: MediaAsset[], label: string): MediaAsset | undefined => {
export const findMediaByLabel = (assets: MediaAsset[], label: string, allowedRoles?: readonly MediaRole[]): MediaAsset | undefined => {
const filtered = allowedRoles ? assets.filter((asset) => asset.media_role && allowedRoles.includes(asset.media_role)) : assets;
const wanted = tokens(label);
const exact = assets.filter((asset) => tokens(asset.label ?? "").join(" ") === wanted.join(" "));
const exact = filtered.filter((asset) => tokens(asset.label ?? "").join(" ") === wanted.join(" "));
if (exact.length === 1) return exact[0];
const wantedSet = new Set(wanted);
const candidates = assets.filter((asset) => {
const candidates = filtered.filter((asset) => {
const available = new Set(tokens(asset.label ?? ""));
return wanted.every((token) => available.has(token)) || [...available].every((token) => wantedSet.has(token));
});