feat: add update all recommendations command
This commit is contained in:
@ -21,6 +21,8 @@ async function processCreateArticle(
|
||||
streamResponse: ReturnType<typeof createStreamResponse>;
|
||||
},
|
||||
) {
|
||||
|
||||
|
||||
log.info("create article from url", { url: fetchUrl });
|
||||
|
||||
streamResponse.enqueue("downloading article");
|
||||
|
64
routes/api/recommendation/all.ts
Normal file
64
routes/api/recommendation/all.ts
Normal 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;
|
||||
},
|
||||
};
|
@ -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);
|
||||
},
|
||||
};
|
||||
|
Reference in New Issue
Block a user