feat: add update all recommendations command

This commit is contained in:
2023-09-08 15:15:36 +02:00
parent 297dab97cd
commit 6d5a3a1a0c
8 changed files with 177 additions and 50 deletions

View File

@ -21,6 +21,8 @@ async function processCreateArticle(
streamResponse: ReturnType<typeof createStreamResponse>;
},
) {
log.info("create article from url", { url: fetchUrl });
streamResponse.enqueue("downloading article");

View File

@ -0,0 +1,64 @@
import { Handlers } from "$fresh/server.ts";
import { createStreamResponse } from "@lib/helpers.ts";
import { getAllMovies } from "@lib/resource/movies.ts";
import * as tmdb from "@lib/tmdb.ts";
import {
createRecommendationResource,
getRecommendation,
} from "@lib/recommendation.ts";
import { AccessDeniedError } from "@lib/errors.ts";
async function processUpdateRecommendations(
streamResponse: ReturnType<typeof createStreamResponse>,
) {
const allMovies = await getAllMovies();
const movies = allMovies.filter((m) => {
if (!m.meta.rating) return false;
if (!m.meta.tmdbId) return false;
return true;
});
streamResponse.enqueue("Fetched all movies");
let done = 0;
const total = movies.length;
await Promise.all(movies.map(async (movie) => {
if (!movie.meta.tmdbId) return;
if (!movie.meta.rating) return;
const recommendation = await getRecommendation(movie.id, movie.type);
if (recommendation) {
done++;
return;
}
try {
const movieDetails = await tmdb.getMovie(movie.meta.tmdbId);
await createRecommendationResource(movie, movieDetails.overview);
} catch (err) {
console.log(err);
}
done++;
streamResponse.enqueue(
`${Math.floor((done / total) * 100)}% [${done + 1}/${total}] ${movie.id}`,
);
})).catch((err) => {
console.log(err);
});
streamResponse.enqueue("100% Finished");
}
export const handler: Handlers = {
GET(_, ctx) {
const session = ctx.state.session;
if (!session) {
throw new AccessDeniedError();
}
const streamResponse = createStreamResponse();
processUpdateRecommendations(streamResponse);
return streamResponse.response;
},
};

View File

@ -5,7 +5,6 @@ import { getAllRecommendations } from "@lib/recommendation.ts";
export const handler: Handlers = {
async GET() {
const recommendations = await getAllRecommendations();
console.log({ recommendations });
return json(recommendations);
},
};