1818import java .nio .charset .StandardCharsets ;
1919import java .time .LocalDate ;
2020import java .time .LocalDateTime ;
21+ import java .util .ArrayList ;
2122import java .util .List ;
2223import java .util .Map ;
2324
2627@ RequiredArgsConstructor
2728public class FraudUrlImporter {
2829
29- private static final int PER_PAGE = 50 ;
30+ private static final int PER_PAGE = 300 ;
3031 private static final int MAX_PAGE = 1000 ;
3132 private static final int DELAY_BETWEEN_REQUESTS_MS = 200 ;
3233
@@ -47,20 +48,18 @@ public class FraudUrlImporter {
4748 @ Transactional
4849 public void syncFraudUrlsFromOpenApi () {
4950
50- log .info ("2024 버전 사기 URL 동기화 시작" );
51- importFrom (apiUrl );
52-
53- /* log.info("2023 버전 사기 URL 동기화 시작");
54- importFrom(apiUrlOld);*/
51+ /* log.info("2024 버전 사기 URL 동기화 시작");
52+ importFrom(apiUrl);*/
5553
54+ log .info ("2023 버전 사기 URL 동기화 시작" );
55+ importFrom (apiUrlOld );
5656 }
5757
5858 private void importFrom (String baseUrl ) {
5959 int page = 1 ;
6060 boolean hasNext = true ;
6161
6262 while (hasNext && page <= MAX_PAGE ) {
63-
6463 String encodedKey = URLEncoder .encode (serviceKey , StandardCharsets .UTF_8 );
6564 String fullUrl = String .format ("%s?page=%d&perPage=%d&serviceKey=%s" ,
6665 baseUrl , page , PER_PAGE , encodedKey );
@@ -76,21 +75,26 @@ private void importFrom(String baseUrl) {
7675 if (data == null || data .isEmpty ()) {
7776 hasNext = false ;
7877 } else {
78+ List <FraudUrl > fraudUrlsToSave = new ArrayList <>();
79+
7980 for (Map <String , Object > item : data ) {
8081 String detectedDateStr = (String ) item .get ("날짜" );
8182 String urlStr = (String ) item .get ("홈페이지주소" );
8283
8384 if (urlStr == null || detectedDateStr == null ) continue ;
85+ if (fraudUrlRepository .existsByUrl (urlStr )) continue ;
8486
85- if (! fraudUrlRepository . existsByUrl ( urlStr )) {
86- LocalDate detectedDate = LocalDate . parse ( detectedDateStr );
87- fraudUrlRepository . save ( FraudUrl . builder ( )
88- . url ( urlStr )
89- . detectedDate ( detectedDate )
90- . lastCheckedAt ( LocalDateTime . now ())
91- . build ());
92- }
87+ LocalDate detectedDate = LocalDate . parse ( detectedDateStr );
88+ FraudUrl fraudUrl = FraudUrl . builder ()
89+ . url ( urlStr )
90+ . detectedDate ( detectedDate )
91+ . lastCheckedAt ( LocalDateTime . now () )
92+ . build ();
93+
94+ fraudUrlsToSave . add ( fraudUrl );
9395 }
96+
97+ fraudUrlRepository .saveAll (fraudUrlsToSave );
9498 page ++;
9599 }
96100
@@ -106,5 +110,6 @@ private void importFrom(String baseUrl) {
106110 throw new BusinessExceptionHandler (ErrorCode .FAIL_IMPORT_OPEN_API );
107111 }
108112 }
113+ log .info ("전체 저장 완료" );
109114 }
110115}
0 commit comments