첫번째 완료
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import type { RealEstateArticle } from "../generated/prisma";
|
||||
import type { NaverRealEstate } from "./naver.service";
|
||||
import prisma from "../lib/prisma";
|
||||
import pLimit from "p-limit";
|
||||
|
||||
export class RankingService {
|
||||
private naver: NaverRealEstate;
|
||||
@@ -8,32 +9,43 @@ export class RankingService {
|
||||
this.naver = naver;
|
||||
}
|
||||
async updateRanking(articles: RealEstateArticle[], checkDate: Date) {
|
||||
try {
|
||||
for (let article of articles) {
|
||||
// cortarNo, lgeo 확인
|
||||
if (!article.cortarNo || !article.lgeo) {
|
||||
const { cortarNo, lgeo } = await this.updateCortarNoAndLgeo(article);
|
||||
article.cortarNo = cortarNo;
|
||||
article.lgeo = lgeo;
|
||||
const { token, cookie } = await this.naver.getRankingToken();
|
||||
|
||||
const limit = pLimit(20);
|
||||
const tasks = articles.map((article) => {
|
||||
return limit(async () => {
|
||||
try {
|
||||
// cortarNo, lgeo 확인
|
||||
if (!article.cortarNo || !article.lgeo) {
|
||||
const { cortarNo, lgeo } = await this.updateCortarNoAndLgeo(
|
||||
article
|
||||
);
|
||||
article.cortarNo = cortarNo;
|
||||
article.lgeo = lgeo;
|
||||
}
|
||||
|
||||
// 랭킹 조회 및 업데이트
|
||||
const ranking = await this.naver.getRanking(article, token, cookie);
|
||||
await prisma.realEstateArticle.update({
|
||||
where: { id: article.id },
|
||||
data: {
|
||||
ranking,
|
||||
rankCheckDate: checkDate.toISOString(),
|
||||
},
|
||||
});
|
||||
|
||||
console.log(
|
||||
`✅ ${article.articleNumber} - 랭킹 업데이트 완료: ${ranking}위`
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`❌ updateRanking 오류:`, error);
|
||||
}
|
||||
|
||||
// 랭킹 조회 및 업데이트
|
||||
const ranking = await this.naver.getRanking(article);
|
||||
await prisma.realEstateArticle.update({
|
||||
where: { id: article.id },
|
||||
data: {
|
||||
ranking,
|
||||
rankCheckDate: checkDate.toISOString(),
|
||||
},
|
||||
});
|
||||
|
||||
console.log(
|
||||
`✅ ${article.articleNumber} - 랭킹 업데이트 완료: ${ranking}위`
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`❌ updateRanking 오류:`, error);
|
||||
}
|
||||
});
|
||||
});
|
||||
console.log("🔹 예약된 작업 수:", tasks.length);
|
||||
const results = await Promise.allSettled(tasks);
|
||||
console.log("🟢 모든 limit 작업 완료:", results.length);
|
||||
await Bun.sleep(100);
|
||||
}
|
||||
|
||||
async updateCortarNoAndLgeo(article: RealEstateArticle): Promise<{
|
||||
|
||||
Reference in New Issue
Block a user