Skip to content

Commit 2fee731

Browse files
authored
Merge pull request #82 from SW-DiffLens/feat#49
[Chore] 테스트코드 환경 세팅
2 parents 3c11360 + c4f7cc6 commit 2fee731

File tree

13 files changed

+3410
-498
lines changed

13 files changed

+3410
-498
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ dependencies {
4141

4242
// PostgreSQL
4343
implementation 'org.postgresql:postgresql:42.6.0'
44+
runtimeOnly 'com.h2database:h2'
4445

4546
// Redis
4647
implementation 'org.springframework.boot:spring-boot-starter-data-redis'

full_log.txt

Lines changed: 3154 additions & 0 deletions
Large diffs are not rendered by default.

src/main/java/DiffLens/back_end/domain/library/controller/LibraryController.java

Lines changed: 0 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)