첫 완료
This commit is contained in:
56
src/services/ranking.service.ts
Normal file
56
src/services/ranking.service.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import type { RealEstateArticle } from "../generated/prisma";
|
||||
import type { NaverRealEstate } from "./naver.service";
|
||||
import prisma from "../lib/prisma";
|
||||
|
||||
export class RankingService {
|
||||
private naver: NaverRealEstate;
|
||||
constructor(naver: NaverRealEstate) {
|
||||
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 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);
|
||||
}
|
||||
}
|
||||
|
||||
async updateCortarNoAndLgeo(article: RealEstateArticle): Promise<{
|
||||
cortarNo: string | null;
|
||||
lgeo: string | null;
|
||||
}> {
|
||||
try {
|
||||
const { cortarNo, lgeo } = await this.naver.getCortarNoAndLgeo(article);
|
||||
|
||||
await prisma.realEstateArticle.update({
|
||||
where: { id: article.id },
|
||||
data: { cortarNo: cortarNo ?? null, lgeo: lgeo ?? null },
|
||||
});
|
||||
return { cortarNo: cortarNo ?? null, lgeo: lgeo ?? null };
|
||||
} catch (error) {
|
||||
console.error(`❌ 오류 발생:`, error);
|
||||
return { cortarNo: null, lgeo: null };
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user