@@ -183,145 +183,6 @@ public ApiResponse<LibraryCompareResponseDTO.CompareResult> compareLibraries(
183183 return ApiResponse .onSuccess (result );
184184 }
185185
186- @ PostMapping ("/compare/test" )
187- @ Operation (summary = "라이브러리 비교 (테스트용)" , description = """
188- ## 개요
189- AI 서버 연동 없이 하드코딩된 테스트 데이터로 라이브러리 비교를 제공하는 API입니다.
190- 개발 및 테스트 목적으로 사용됩니다.
191-
192- ## Request Body
193- - libraryId1 : 첫 번째 라이브러리 ID (필수, 실제로는 사용하지 않음)
194- - libraryId2 : 두 번째 라이브러리 ID (필수, 실제로는 사용하지 않음)
195-
196- ## 응답 데이터
197- - 하드코딩된 테스트 데이터 반환
198- - 실제 라이브러리 데이터는 사용하지 않음
199-
200- ## 권한
201- 인증된 사용자만 접근 가능합니다.
202-
203- """ )
204- public ApiResponse <LibraryCompareResponseDTO .CompareResult > compareLibrariesTest (
205- @ RequestBody @ Valid LibraryCompareRequestDTO .Compare request ) {
206- // Group A 정보
207- LibraryCompareResponseDTO .GroupInfo group1 = LibraryCompareResponseDTO .GroupInfo .builder ()
208- .libraryId (1L )
209- .libraryName ("20대 남성이 타는 차 브랜드 분포" )
210- .summary ("20대 남성 소비자의 자동차 브랜드 선호도 분석" )
211- .totalCount (100 )
212- .filters (List .of (
213- LibraryCompareResponseDTO .Filter .builder ()
214- .key ("성별" )
215- .values (List .of ("남성" ))
216- .build (),
217- LibraryCompareResponseDTO .Filter .builder ()
218- .key ("연령" )
219- .values (List .of ("20-29세" ))
220- .build (),
221- LibraryCompareResponseDTO .Filter .builder ()
222- .key ("차량보유" )
223- .values (List .of ("있음" ))
224- .build ()))
225- .build ();
226-
227- // Group B 정보
228- LibraryCompareResponseDTO .GroupInfo group2 = LibraryCompareResponseDTO .GroupInfo .builder ()
229- .libraryId (2L )
230- .libraryName ("30대 여성 화장품 구매 패턴" )
231- .summary ("30대 여성의 화장품 구매 행동 및 선호 브랜드 분석" )
232- .totalCount (250 )
233- .filters (List .of (
234- LibraryCompareResponseDTO .Filter .builder ()
235- .key ("성별" )
236- .values (List .of ("여성" ))
237- .build (),
238- LibraryCompareResponseDTO .Filter .builder ()
239- .key ("연령" )
240- .values (List .of ("30-39세" ))
241- .build ()))
242- .build ();
243-
244- // 주요 특성 (특성 1, 2, 3)
245- List <LibraryCompareResponseDTO .KeyCharacteristic > keyCharacteristics = List .of (
246- LibraryCompareResponseDTO .KeyCharacteristic .builder ()
247- .characteristic ("소비 성향" )
248- .description ("A그룹은 실용적 소비 성향이 강하고, B그룹은 프리미엄 브랜드 선호도가 높습니다." )
249- .group1Percentage (30 )
250- .group2Percentage (70 )
251- .difference (40 )
252- .build (),
253- LibraryCompareResponseDTO .KeyCharacteristic .builder ()
254- .characteristic ("브랜드 충성도" )
255- .description ("A그룹은 브랜드 전환율이 높은 반면, B그룹은 특정 브랜드에 대한 충성도가 높습니다." )
256- .group1Percentage (30 )
257- .group2Percentage (70 )
258- .difference (40 )
259- .build (),
260- LibraryCompareResponseDTO .KeyCharacteristic .builder ()
261- .characteristic ("온라인 구매 선호도" )
262- .description ("A그룹은 오프라인 구매를 선호하고, B그룹은 온라인 쇼핑몰과 리뷰를 적극 활용합니다." )
263- .group1Percentage (30 )
264- .group2Percentage (70 )
265- .difference (40 )
266- .build ());
267-
268- // Group A 통계
269- LibraryCompareResponseDTO .GroupMetrics group1Metrics = LibraryCompareResponseDTO .GroupMetrics .builder ()
270- .male (100 )
271- .female (0 )
272- .seoul (35 )
273- .gyeonggi (40 )
274- .busan (15 )
275- .regionEtc (10 )
276- .avgAge (23.5 )
277- .avgFamily (3.2 )
278- .avgChildren (0.8 )
279- .ratePossessingCar (72 )
280- .avgPersonalIncome (420 )
281- .avgFamilyIncome (340 )
282- .build ();
283-
284- // Group B 통계
285- LibraryCompareResponseDTO .GroupMetrics group2Metrics = LibraryCompareResponseDTO .GroupMetrics .builder ()
286- .male (0 )
287- .female (100 )
288- .seoul (35 )
289- .gyeonggi (40 )
290- .busan (15 )
291- .regionEtc (10 )
292- .avgAge (32.7 )
293- .avgFamily (4.2 )
294- .avgChildren (3.4 )
295- .ratePossessingCar (30 )
296- .avgPersonalIncome (340 )
297- .avgFamilyIncome (500 )
298- .build ();
299-
300- // Comparisons
301- LibraryCompareResponseDTO .Comparisons comparisons = LibraryCompareResponseDTO .Comparisons .builder ()
302- .group1 (group1Metrics )
303- .group2 (group2Metrics )
304- .build ();
305-
306- // Insights
307- LibraryCompareResponseDTO .Insights insights = LibraryCompareResponseDTO .Insights .builder ()
308- .difference ("A그룹(20대 남성)은 차량 구매에 있어 실용성과 가성비를 중시하며, 국산 브랜드 선호도가 높습니다. 반면 B그룹(30대 여성)은 화장품 구매 시 브랜드 이미지와 품질을 중시하며, 프리미엄 브랜드에 대한 지출이 큽니다. 또한 A그룹은 차량 보유율이 72%로 높은 반면, B그룹은 30%로 낮아 이동 수단에 대한 접근 방식이 다릅니다." )
309- .common ("두 그룹 모두 서울과 경기 지역에 집중되어 있으며, 지역 분포가 거의 동일합니다. 또한 모두 온라인 쇼핑 플랫폼을 적극 활용하며, 소셜미디어를 통한 제품 정보 습득이 활발합니다." )
310- .implication ("A그룹은 차량 마케팅 시 실용성과 경제성을 강조하는 전략이 효과적일 것입니다. B그룹은 화장품 마케팅 시 브랜드 스토리텔링과 프리미엄 경험 제공이 중요합니다. 두 그룹 모두 지역별 맞춤 마케팅 전략이 필요하며, 온라인 채널을 통한 타겟팅이 핵심입니다." )
311- .build ();
312-
313- // 최종 결과 생성
314- LibraryCompareResponseDTO .CompareResult result = LibraryCompareResponseDTO .CompareResult .builder ()
315- .group1 (group1 )
316- .group2 (group2 )
317- .keyCharacteristics (keyCharacteristics )
318- .comparisons (comparisons )
319- .insights (insights )
320- .build ();
321-
322- return ApiResponse .onSuccess (result );
323- }
324-
325186 @ GetMapping ("/{libraryId}/dashboard" )
326187 @ Operation (summary = "라이브러리 대시보드 조회" , description = """
327188 ## 개요
0 commit comments