From 49b1aa8f0c881535967e3ba0d267e506d38dd69e Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 21 Apr 2026 19:16:34 +0900 Subject: [PATCH] =?UTF-8?q?fix(original-series-calculate):=20=EC=86=8C?= =?UTF-8?q?=EC=A7=80=20=EC=9C=A0=EC=A0=80=EB=B3=84=20=EC=A0=95=EC=82=B0=20?= =?UTF-8?q?=EC=97=91=EC=85=80=20=EC=8B=9C=ED=8A=B8=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9D=84=20=EC=A0=95=EB=A6=AC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AdminOriginalSeriesCalculateService.kt | 16 ++++----- ...AdminOriginalSeriesCalculateServiceTest.kt | 33 +++++++++++++++---- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateService.kt index 9c9310af..048cec36 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateService.kt @@ -22,14 +22,14 @@ class AdminOriginalSeriesCalculateService( fun getSettlementDetails( startDateStr: String, endDateStr: String, - memberId: Long, + creatorId: Long, offset: Long, limit: Long ): GetAdminOriginalSeriesSettlementDetailListResponse { val (startDate, endDate) = toDateRange(startDateStr, endDateStr) - val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, memberId) + val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, creatorId) val items = repository - .getSettlementDetails(startDate, endDate, memberId, offset, limit) + .getSettlementDetails(startDate, endDate, creatorId, offset, limit) .map { it.toResponse() } return GetAdminOriginalSeriesSettlementDetailListResponse(totalCount, items) @@ -43,18 +43,16 @@ class AdminOriginalSeriesCalculateService( return StreamingResponseBody { outputStream -> val workbook = SXSSFWorkbook(100) try { - if (owners.isEmpty()) { - writeHeaders(workbook.createSheet("오리지널 시리즈 정산")) - } else { + if (owners.isNotEmpty()) { owners.forEach { owner -> val sheet = workbook.createSheet(toSheetName(owner)) writeHeaders(sheet) - val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, owner.memberId) + val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, owner.creatorId) val items = if (totalCount == 0) { emptyList() } else { - repository.getSettlementDetails(startDate, endDate, owner.memberId, 0L, totalCount.toLong()) + repository.getSettlementDetails(startDate, endDate, owner.creatorId, 0L, totalCount.toLong()) .map { it.toResponse() } } @@ -92,7 +90,7 @@ class AdminOriginalSeriesCalculateService( } private fun toSheetName(owner: GetAdminOriginalSeriesOwnerResponse): String { - return WorkbookUtil.createSafeSheetName("${owner.memberId}_${owner.nickname}") + return WorkbookUtil.createSafeSheetName(owner.nickname) } private fun toDateRange(startDateStr: String, endDateStr: String): Pair { diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateServiceTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateServiceTest.kt index b8b5c0e0..15cea8db 100644 --- a/src/test/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateServiceTest.kt +++ b/src/test/kotlin/kr/co/vividnext/sodalive/admin/calculate/originalSeries/AdminOriginalSeriesCalculateServiceTest.kt @@ -25,13 +25,13 @@ class AdminOriginalSeriesCalculateServiceTest { @Test @DisplayName("오리지널 시리즈 소지 유저 목록 조회는 리포지토리 결과를 반환한다") fun shouldReturnOriginalSeriesOwners() { - val owners = listOf(GetAdminOriginalSeriesOwnerResponse(memberId = 1L, nickname = "owner-a")) + val owners = listOf(GetAdminOriginalSeriesOwnerResponse(creatorId = 1L, nickname = "owner-a")) Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(owners) val result = service.getOriginalSeriesOwners() assertEquals(1, result.size) - assertEquals(1L, result[0].memberId) + assertEquals(1L, result[0].creatorId) Mockito.verify(repository).getOriginalSeriesOwners() } @@ -67,7 +67,7 @@ class AdminOriginalSeriesCalculateServiceTest { val result = service.getSettlementDetails( startDateStr = "2026-04-01", endDateStr = "2026-04-30", - memberId = 9L, + creatorId = 9L, offset = 0L, limit = 20L ) @@ -96,8 +96,8 @@ class AdminOriginalSeriesCalculateServiceTest { @DisplayName("정산 엑셀 다운로드는 소지 유저별 시트를 생성한다") fun shouldCreateOneSheetPerOwnerForExcel() { val owners = listOf( - GetAdminOriginalSeriesOwnerResponse(memberId = 1L, nickname = "owner-a"), - GetAdminOriginalSeriesOwnerResponse(memberId = 2L, nickname = "owner-b") + GetAdminOriginalSeriesOwnerResponse(creatorId = 1L, nickname = "owner-a"), + GetAdminOriginalSeriesOwnerResponse(creatorId = 2L, nickname = "owner-b") ) Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(owners) Mockito.`when`( @@ -147,8 +147,8 @@ class AdminOriginalSeriesCalculateServiceTest { XSSFWorkbook(ByteArrayInputStream(outputStream.toByteArray())).use { workbook -> assertEquals(2, workbook.numberOfSheets) - assertEquals("1_owner-a", workbook.getSheetAt(0).sheetName) - assertEquals("2_owner-b", workbook.getSheetAt(1).sheetName) + assertEquals("owner-a", workbook.getSheetAt(0).sheetName) + assertEquals("owner-b", workbook.getSheetAt(1).sheetName) assertEquals("시리즈 제목", workbook.getSheetAt(0).getRow(0).getCell(0).stringCellValue) assertEquals("오리지널 시리즈", workbook.getSheetAt(0).getRow(1).getCell(0).stringCellValue) assertEquals("시리즈 제목", workbook.getSheetAt(1).getRow(0).getCell(0).stringCellValue) @@ -164,4 +164,23 @@ class AdminOriginalSeriesCalculateServiceTest { 1L ) } + + @Test + @DisplayName("소지 유저가 없으면 엑셀에 시트를 생성하지 않는다") + fun shouldCreateWorkbookWithoutSheetsWhenNoOwners() { + Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(emptyList()) + + val response = service.downloadSettlementDetailsExcel( + startDateStr = "2026-04-01", + endDateStr = "2026-04-30" + ) + val outputStream = ByteArrayOutputStream() + response.writeTo(outputStream) + + assertTrue(outputStream.toByteArray().isNotEmpty()) + + XSSFWorkbook(ByteArrayInputStream(outputStream.toByteArray())).use { workbook -> + assertEquals(0, workbook.numberOfSheets) + } + } }