@@ -2,31 +2,31 @@ package gogo.gogobetting.infra.batch.service
22
33import gogo.gogobetting.domain.batch.detail.persistence.BatchDetail
44import gogo.gogobetting.domain.batch.detail.persistence.BatchDetailRepository
5- import gogo.gogobetting.domain.batch.root.event.MatchBatchEvent
6- import gogo.gogobetting.domain.batch.root.event.StudentBettingDto
75import gogo.gogobetting.domain.batch.root.persistence.BatchRepository
6+ import gogo.gogobetting.domain.betting.result.persistence.BettingResultTable
87import gogo.gogobetting.domain.betting.root.persistence.BettingRepository
98import gogo.gogobetting.global.kafka.publisher.BatchPublisher
10- import gogo.gogobetting.infra.batch.dto.BettingResultJdbcDto
9+ import gogo.gogobetting.infra.batch.dto.BettingResultExposedDto
1110import gogo.gogobetting.infra.batch.dto.BettingRow
11+ import org.jetbrains.exposed.sql.Database
12+ import org.jetbrains.exposed.sql.batchInsert
13+ import org.jetbrains.exposed.sql.transactions.transaction
1214import org.slf4j.LoggerFactory
1315import org.springframework.batch.core.StepExecution
1416import org.springframework.batch.core.annotation.AfterStep
1517import org.springframework.batch.core.annotation.BeforeStep
1618import org.springframework.batch.core.configuration.annotation.StepScope
1719import org.springframework.batch.item.Chunk
1820import org.springframework.batch.item.ItemWriter
19- import org.springframework.batch.item.database.JdbcBatchItemWriter
2021import org.springframework.beans.factory.annotation.Value
2122import org.springframework.data.repository.findByIdOrNull
2223import org.springframework.stereotype.Component
23- import java.util.UUID
24+ import javax.sql.DataSource
2425import kotlin.math.ceil
2526
2627@Component(" springBatchBettingWriter" )
2728@StepScope
2829class BettingResultWriter (
29- private val jdbcWriter : JdbcBatchItemWriter <BettingResultJdbcDto >,
3030 private val batchDetailRepository : BatchDetailRepository ,
3131 private val batchRepository : BatchRepository ,
3232 private val bettingRepository : BettingRepository ,
@@ -35,11 +35,12 @@ class BettingResultWriter(
3535 @Value(" #{jobParameters['bettingOdds']}" ) private val bettingOdds : Double ,
3636 @Value(" #{jobParameters['matchId']}" ) private val matchId : Long ,
3737 @Value(" #{jobParameters['aTeamScore']}" ) private val aTeamScore : Int ,
38- @Value(" #{jobParameters['bTeamScore']}" ) private val bTeamScore : Int
38+ @Value(" #{jobParameters['bTeamScore']}" ) private val bTeamScore : Int ,
39+ private val dataSource : DataSource
3940) : ItemWriter<BettingRow> {
4041
4142 private var batchId: Long = 0
42- private val accumulated = mutableListOf<BettingResultJdbcDto >()
43+ private val accumulated = mutableListOf<BettingResultExposedDto >()
4344 private val log = LoggerFactory .getLogger(this ::class .java)
4445
4546 @BeforeStep
@@ -52,14 +53,23 @@ class BettingResultWriter(
5253 val dtoList = items.map { row ->
5354 val isPredicted = row.predictedWinTeamId == winTeamId
5455 val earnedPoint = if (isPredicted) ceil(row.point * bettingOdds).toLong() + row.point else 0L
55- BettingResultJdbcDto (
56+ BettingResultExposedDto (
5657 bettingId = row.id,
5758 earnedPoint = earnedPoint,
5859 isPredicted = isPredicted,
5960 )
6061 }
6162
62- jdbcWriter.write(Chunk (dtoList))
63+ Database .connect(dataSource)
64+ transaction {
65+ BettingResultTable .batchInsert(dtoList) { item ->
66+ this [BettingResultTable .bettingId] = item.bettingId
67+ this [BettingResultTable .earnedPoint] = item.earnedPoint
68+ this [BettingResultTable .isCancelled] = false
69+ this [BettingResultTable .isPredicted] = item.isPredicted
70+ }
71+ }
72+
6373 accumulated.addAll(dtoList)
6474 }
6575
0 commit comments