첫 완료

This commit is contained in:
kjy
2025-11-12 02:58:36 +09:00
commit 2aab5be513
57 changed files with 56098 additions and 0 deletions

View 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 };
}
}
}