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) + } + } }