feat: refactor whole bunch of stuff
This commit is contained in:
@@ -1,12 +1,8 @@
|
||||
import { resources } from "@lib/resources.ts";
|
||||
import fuzzysort from "npm:fuzzysort";
|
||||
import { GenericResource } from "@lib/types.ts";
|
||||
import { extractHashTags } from "@lib/string.ts";
|
||||
import { Movie } from "@lib/resource/movies.ts";
|
||||
import { Article } from "@lib/resource/articles.ts";
|
||||
import { Recipe } from "@lib/resource/recipes.ts";
|
||||
import { Series } from "@lib/resource/series.ts";
|
||||
import { fetchResource } from "./marka.ts";
|
||||
import { listResources } from "./marka/index.ts";
|
||||
import { GenericResource } from "./marka/schema.ts";
|
||||
|
||||
type ResourceType = keyof typeof resources;
|
||||
|
||||
@@ -48,8 +44,8 @@ export function parseResourceUrl(_url: string | URL): SearchParams | undefined {
|
||||
}
|
||||
|
||||
const isResource = (
|
||||
item: Movie | Series | Article | Recipe | boolean,
|
||||
): item is Movie | Series | Article | Recipe => {
|
||||
item: GenericResource | boolean | undefined,
|
||||
): item is GenericResource => {
|
||||
return !!item;
|
||||
};
|
||||
|
||||
@@ -57,10 +53,10 @@ export async function searchResource(
|
||||
{ q, tags = [], types, rating }: SearchParams,
|
||||
): Promise<GenericResource[]> {
|
||||
const resources = (await Promise.all([
|
||||
(!types || types.includes("movie")) && fetchResource("movies"),
|
||||
(!types || types.includes("series")) && fetchResource("series"),
|
||||
(!types || types.includes("article")) && fetchResource("articles"),
|
||||
(!types || types.includes("recipe")) && fetchResource("recipes"),
|
||||
(!types || types.includes("movie")) && listResources("movies"),
|
||||
(!types || types.includes("series")) && listResources("series"),
|
||||
(!types || types.includes("article")) && listResources("articles"),
|
||||
(!types || types.includes("recipe")) && listResources("recipes"),
|
||||
])).flat().filter(isResource);
|
||||
|
||||
const results: Record<string, GenericResource> = {};
|
||||
@@ -68,27 +64,35 @@ export async function searchResource(
|
||||
for (const resource of resources) {
|
||||
if (
|
||||
!(resource.name in results) &&
|
||||
tags?.length && resource.tags.length &&
|
||||
tags.every((t) => resource.tags.includes(t))
|
||||
tags?.length && resource.content.keywords?.length &&
|
||||
tags.every((t) => resource.content.keywords?.includes(t))
|
||||
) {
|
||||
results[resource.id] = resource;
|
||||
results[resource.name] = resource;
|
||||
}
|
||||
|
||||
if (
|
||||
!(resource.id in results) &&
|
||||
rating && resource?.meta?.rating && resource.meta.rating >= rating
|
||||
!(resource.name in results) &&
|
||||
rating && resource?.content?.reviewRating &&
|
||||
resource.content?.reviewRating?.ratingValue >= rating
|
||||
) {
|
||||
results[resource.id] = resource;
|
||||
results[resource.name] = resource;
|
||||
}
|
||||
}
|
||||
|
||||
if (q.length && q !== "*") {
|
||||
const fuzzyResult = fuzzysort.go(q, resources, {
|
||||
keys: ["content", "name", "description", "meta.author"],
|
||||
keys: [
|
||||
"name",
|
||||
"content.articleBody",
|
||||
"content.reviewBody",
|
||||
"content.name",
|
||||
"content.description",
|
||||
"content.author.name",
|
||||
],
|
||||
threshold: 0.3,
|
||||
});
|
||||
for (const result of fuzzyResult) {
|
||||
results[result.obj.id] = result.obj;
|
||||
results[result.obj.name] = result.obj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user