Răsfoiți Sursa

ref: begin rework of filtering algo

Sv443 1 an în urmă
părinte
comite
1bea4f8d89
5 a modificat fișierele cu 30 adăugiri și 7 ștergeri
  1. 6 3
      src/axios.ts
  2. 13 0
      src/filter.ts
  3. 1 1
      src/routes/index.ts
  4. 3 3
      src/songData.ts
  5. 7 0
      src/types.d.ts

+ 6 - 3
src/axios.ts

@@ -4,8 +4,11 @@ export const axios = _axios.create({
   timeout: 1000 * 15,
 });
 
-export function getAxiosAuthConfig(authToken?: string) {
-  return authToken ? {
-    headers: { "Authorization": `Bearer ${authToken}` },
+export function getAxiosAuthConfig() {
+  const authToken = process.env.GENIUS_ACCESS_TOKEN;
+  return authToken && authToken.length > 0 ? {
+    headers: {
+      "Authorization": `Bearer ${authToken}`,
+    },
   } : {};
 }

+ 13 - 0
src/filter.ts

@@ -0,0 +1,13 @@
+import type { MetaSearchHit, ScoredResults, SearchFilterArgs } from "./types";
+
+export function filterSearchResults(args: SearchFilterArgs, results: MetaSearchHit[]): MetaSearchHit[] {
+  let scored: ScoredResults<MetaSearchHit>[] = [];
+
+  // TODO:
+  // 1. check direct match
+  // 2. check fuzzy match
+
+  return scored
+    .sort((a, b) => b.score - a.score)
+    .map(r => r.result);
+}

+ 1 - 1
src/routes/index.ts

@@ -1,9 +1,9 @@
 import { Application, Router } from "express";
 import packageJson from "../../package.json";
-import { initAlbumRoutes } from "./album";
 
 import { initSearchRoutes } from "./search";
 import { initTranslationsRoutes } from "./translations";
+import { initAlbumRoutes } from "./album";
 
 const routeFuncs: ((router: Router) => unknown)[] = [
   initSearchRoutes,

+ 3 - 3
src/songData.ts

@@ -29,7 +29,7 @@ export async function getMeta({
     status,
   } = await axios.get<ApiSearchResult>(
     `https://api.genius.com/search?q=${encodeURIComponent(query)}`,
-    getAxiosAuthConfig(process.env.GENIUS_ACCESS_TOKEN)
+    getAxiosAuthConfig()
   );
 
   if(threshold === undefined || isNaN(threshold))
@@ -173,7 +173,7 @@ export async function getTranslations(songId: number, { preferLang }: GetTransla
   try {
     const { data, status } = await axios.get<ApiSongResult>(
       `https://api.genius.com/songs/${songId}`,
-      getAxiosAuthConfig(process.env.GENIUS_ACCESS_TOKEN)
+      getAxiosAuthConfig()
     );
 
     if(status >= 200 && status < 300 && Array.isArray(data?.response?.song?.translation_songs))
@@ -205,7 +205,7 @@ export async function getAlbum(songId: number): Promise<Album | null> {
   try {
     const { data, status } = await axios.get<ApiSongResult>(
       `https://api.genius.com/songs/${songId}`,
-      getAxiosAuthConfig(process.env.GENIUS_ACCESS_TOKEN)
+      getAxiosAuthConfig()
     );
 
     if(status >= 200 && status < 300 && data?.response?.song?.album?.id)

+ 7 - 0
src/types.d.ts

@@ -57,6 +57,13 @@ export interface GetMetaArgs {
   preferLang?: string;
 }
 
+export type SearchFilterArgs = GetMetaArgs;
+
+export type ScoredResults<T> = {
+  score: number;
+  result: T;
+};
+
 export interface GetMetaResult {
   top: SongMeta;
   all: SongMeta[];