fix(original-series-calculate): 소지 유저별 정산 엑셀 시트 생성을 정리한다
This commit is contained in:
@@ -22,14 +22,14 @@ class AdminOriginalSeriesCalculateService(
|
|||||||
fun getSettlementDetails(
|
fun getSettlementDetails(
|
||||||
startDateStr: String,
|
startDateStr: String,
|
||||||
endDateStr: String,
|
endDateStr: String,
|
||||||
memberId: Long,
|
creatorId: Long,
|
||||||
offset: Long,
|
offset: Long,
|
||||||
limit: Long
|
limit: Long
|
||||||
): GetAdminOriginalSeriesSettlementDetailListResponse {
|
): GetAdminOriginalSeriesSettlementDetailListResponse {
|
||||||
val (startDate, endDate) = toDateRange(startDateStr, endDateStr)
|
val (startDate, endDate) = toDateRange(startDateStr, endDateStr)
|
||||||
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, memberId)
|
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, creatorId)
|
||||||
val items = repository
|
val items = repository
|
||||||
.getSettlementDetails(startDate, endDate, memberId, offset, limit)
|
.getSettlementDetails(startDate, endDate, creatorId, offset, limit)
|
||||||
.map { it.toResponse() }
|
.map { it.toResponse() }
|
||||||
|
|
||||||
return GetAdminOriginalSeriesSettlementDetailListResponse(totalCount, items)
|
return GetAdminOriginalSeriesSettlementDetailListResponse(totalCount, items)
|
||||||
@@ -43,18 +43,16 @@ class AdminOriginalSeriesCalculateService(
|
|||||||
return StreamingResponseBody { outputStream ->
|
return StreamingResponseBody { outputStream ->
|
||||||
val workbook = SXSSFWorkbook(100)
|
val workbook = SXSSFWorkbook(100)
|
||||||
try {
|
try {
|
||||||
if (owners.isEmpty()) {
|
if (owners.isNotEmpty()) {
|
||||||
writeHeaders(workbook.createSheet("오리지널 시리즈 정산"))
|
|
||||||
} else {
|
|
||||||
owners.forEach { owner ->
|
owners.forEach { owner ->
|
||||||
val sheet = workbook.createSheet(toSheetName(owner))
|
val sheet = workbook.createSheet(toSheetName(owner))
|
||||||
writeHeaders(sheet)
|
writeHeaders(sheet)
|
||||||
|
|
||||||
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, owner.memberId)
|
val totalCount = repository.getSettlementDetailTotalCount(startDate, endDate, owner.creatorId)
|
||||||
val items = if (totalCount == 0) {
|
val items = if (totalCount == 0) {
|
||||||
emptyList()
|
emptyList()
|
||||||
} else {
|
} else {
|
||||||
repository.getSettlementDetails(startDate, endDate, owner.memberId, 0L, totalCount.toLong())
|
repository.getSettlementDetails(startDate, endDate, owner.creatorId, 0L, totalCount.toLong())
|
||||||
.map { it.toResponse() }
|
.map { it.toResponse() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +90,7 @@ class AdminOriginalSeriesCalculateService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun toSheetName(owner: GetAdminOriginalSeriesOwnerResponse): String {
|
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<LocalDateTime, LocalDateTime> {
|
private fun toDateRange(startDateStr: String, endDateStr: String): Pair<LocalDateTime, LocalDateTime> {
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ class AdminOriginalSeriesCalculateServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
@DisplayName("오리지널 시리즈 소지 유저 목록 조회는 리포지토리 결과를 반환한다")
|
@DisplayName("오리지널 시리즈 소지 유저 목록 조회는 리포지토리 결과를 반환한다")
|
||||||
fun shouldReturnOriginalSeriesOwners() {
|
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)
|
Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(owners)
|
||||||
|
|
||||||
val result = service.getOriginalSeriesOwners()
|
val result = service.getOriginalSeriesOwners()
|
||||||
|
|
||||||
assertEquals(1, result.size)
|
assertEquals(1, result.size)
|
||||||
assertEquals(1L, result[0].memberId)
|
assertEquals(1L, result[0].creatorId)
|
||||||
Mockito.verify(repository).getOriginalSeriesOwners()
|
Mockito.verify(repository).getOriginalSeriesOwners()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ class AdminOriginalSeriesCalculateServiceTest {
|
|||||||
val result = service.getSettlementDetails(
|
val result = service.getSettlementDetails(
|
||||||
startDateStr = "2026-04-01",
|
startDateStr = "2026-04-01",
|
||||||
endDateStr = "2026-04-30",
|
endDateStr = "2026-04-30",
|
||||||
memberId = 9L,
|
creatorId = 9L,
|
||||||
offset = 0L,
|
offset = 0L,
|
||||||
limit = 20L
|
limit = 20L
|
||||||
)
|
)
|
||||||
@@ -96,8 +96,8 @@ class AdminOriginalSeriesCalculateServiceTest {
|
|||||||
@DisplayName("정산 엑셀 다운로드는 소지 유저별 시트를 생성한다")
|
@DisplayName("정산 엑셀 다운로드는 소지 유저별 시트를 생성한다")
|
||||||
fun shouldCreateOneSheetPerOwnerForExcel() {
|
fun shouldCreateOneSheetPerOwnerForExcel() {
|
||||||
val owners = listOf(
|
val owners = listOf(
|
||||||
GetAdminOriginalSeriesOwnerResponse(memberId = 1L, nickname = "owner-a"),
|
GetAdminOriginalSeriesOwnerResponse(creatorId = 1L, nickname = "owner-a"),
|
||||||
GetAdminOriginalSeriesOwnerResponse(memberId = 2L, nickname = "owner-b")
|
GetAdminOriginalSeriesOwnerResponse(creatorId = 2L, nickname = "owner-b")
|
||||||
)
|
)
|
||||||
Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(owners)
|
Mockito.`when`(repository.getOriginalSeriesOwners()).thenReturn(owners)
|
||||||
Mockito.`when`(
|
Mockito.`when`(
|
||||||
@@ -147,8 +147,8 @@ class AdminOriginalSeriesCalculateServiceTest {
|
|||||||
|
|
||||||
XSSFWorkbook(ByteArrayInputStream(outputStream.toByteArray())).use { workbook ->
|
XSSFWorkbook(ByteArrayInputStream(outputStream.toByteArray())).use { workbook ->
|
||||||
assertEquals(2, workbook.numberOfSheets)
|
assertEquals(2, workbook.numberOfSheets)
|
||||||
assertEquals("1_owner-a", workbook.getSheetAt(0).sheetName)
|
assertEquals("owner-a", workbook.getSheetAt(0).sheetName)
|
||||||
assertEquals("2_owner-b", workbook.getSheetAt(1).sheetName)
|
assertEquals("owner-b", workbook.getSheetAt(1).sheetName)
|
||||||
assertEquals("시리즈 제목", workbook.getSheetAt(0).getRow(0).getCell(0).stringCellValue)
|
assertEquals("시리즈 제목", workbook.getSheetAt(0).getRow(0).getCell(0).stringCellValue)
|
||||||
assertEquals("오리지널 시리즈", workbook.getSheetAt(0).getRow(1).getCell(0).stringCellValue)
|
assertEquals("오리지널 시리즈", workbook.getSheetAt(0).getRow(1).getCell(0).stringCellValue)
|
||||||
assertEquals("시리즈 제목", workbook.getSheetAt(1).getRow(0).getCell(0).stringCellValue)
|
assertEquals("시리즈 제목", workbook.getSheetAt(1).getRow(0).getCell(0).stringCellValue)
|
||||||
@@ -164,4 +164,23 @@ class AdminOriginalSeriesCalculateServiceTest {
|
|||||||
1L
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user