첫번째 완료

This commit is contained in:
kjy
2025-11-28 08:44:20 +09:00
parent 25ad517d01
commit 5c57f1c582
14 changed files with 2859 additions and 177 deletions

View File

@@ -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<{