관리자 - 충전 이벤트 API
This commit is contained in:
parent
dc299f7727
commit
12c9b14168
|
@ -0,0 +1,32 @@
|
|||
package kr.co.vividnext.sodalive.admin.event
|
||||
|
||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import org.springframework.security.access.prepost.PreAuthorize
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
import org.springframework.web.bind.annotation.PutMapping
|
||||
import org.springframework.web.bind.annotation.RequestBody
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/event/charge")
|
||||
class AdminChargeEventController(private val service: AdminChargeEventService) {
|
||||
@PostMapping
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
fun createChargeEvent(@RequestBody request: CreateChargeEventRequest): ApiResponse<Any> {
|
||||
service.createChargeEvent(request)
|
||||
return ApiResponse.ok(null, "등록되었습니다.")
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
fun modifyChargeEvent(@RequestBody request: ModifyChargeEventRequest) = ApiResponse.ok(
|
||||
service.modifyChargeEvent(request),
|
||||
"수정되었습니다."
|
||||
)
|
||||
|
||||
@GetMapping("/list")
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
fun getChargeEventList() = ApiResponse.ok(service.getChargeEventList())
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package kr.co.vividnext.sodalive.admin.event
|
||||
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||
import kr.co.vividnext.sodalive.admin.event.QChargeEvent.chargeEvent
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import org.springframework.stereotype.Repository
|
||||
|
||||
@Repository
|
||||
interface AdminChargeEventRepository : JpaRepository<ChargeEvent, Long>, AdminChargeEventQueryRepository
|
||||
|
||||
interface AdminChargeEventQueryRepository {
|
||||
fun getChargeEventList(): List<ChargeEvent>
|
||||
}
|
||||
|
||||
class AdminChargeEventQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AdminChargeEventQueryRepository {
|
||||
override fun getChargeEventList(): List<ChargeEvent> {
|
||||
return queryFactory
|
||||
.selectFrom(chargeEvent)
|
||||
.orderBy(chargeEvent.createdAt.desc())
|
||||
.fetch()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
package kr.co.vividnext.sodalive.admin.event
|
||||
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
import org.springframework.stereotype.Service
|
||||
import org.springframework.transaction.annotation.Transactional
|
||||
import java.time.LocalDate
|
||||
import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
@Service
|
||||
@Transactional(readOnly = true)
|
||||
class AdminChargeEventService(private val repository: AdminChargeEventRepository) {
|
||||
@Transactional
|
||||
fun createChargeEvent(request: CreateChargeEventRequest): Long {
|
||||
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
|
||||
val startDate = LocalDate.parse(request.startDateString, dateTimeFormatter).atTime(0, 0)
|
||||
.atZone(ZoneId.of("Asia/Seoul"))
|
||||
.withZoneSameInstant(ZoneId.of("UTC"))
|
||||
.toLocalDateTime()
|
||||
|
||||
val endDate = LocalDate.parse(request.endDateString, dateTimeFormatter).atTime(23, 59, 59)
|
||||
.atZone(ZoneId.of("Asia/Seoul"))
|
||||
.withZoneSameInstant(ZoneId.of("UTC"))
|
||||
.toLocalDateTime()
|
||||
|
||||
val chargeEvent = ChargeEvent(
|
||||
title = request.title,
|
||||
startDate = startDate,
|
||||
endDate = endDate,
|
||||
availableCount = request.availableCount,
|
||||
addPercent = request.addPercent / 100f
|
||||
)
|
||||
|
||||
return repository.save(chargeEvent).id!!
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun modifyChargeEvent(request: ModifyChargeEventRequest) {
|
||||
val chargeEvent = repository.findByIdOrNull(request.id)
|
||||
?: throw SodaException("해당하는 충전이벤트가 없습니다\n다시 시도해 주세요.")
|
||||
|
||||
if (request.title != null) {
|
||||
chargeEvent.title = request.title
|
||||
}
|
||||
|
||||
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
|
||||
if (request.startDateString != null) {
|
||||
chargeEvent.startDate = LocalDate.parse(request.startDateString, dateTimeFormatter).atTime(0, 0)
|
||||
.atZone(ZoneId.of("Asia/Seoul"))
|
||||
.withZoneSameInstant(ZoneId.of("UTC"))
|
||||
.toLocalDateTime()
|
||||
}
|
||||
|
||||
if (request.endDateString != null) {
|
||||
chargeEvent.endDate = LocalDate.parse(request.endDateString, dateTimeFormatter).atTime(23, 59, 59)
|
||||
.atZone(ZoneId.of("Asia/Seoul"))
|
||||
.withZoneSameInstant(ZoneId.of("UTC"))
|
||||
.toLocalDateTime()
|
||||
}
|
||||
|
||||
if (request.availableCount != null) {
|
||||
chargeEvent.availableCount = request.availableCount
|
||||
}
|
||||
|
||||
if (request.addPercent != null) {
|
||||
chargeEvent.addPercent = request.addPercent / 100f
|
||||
}
|
||||
|
||||
if (request.isActive != null) {
|
||||
chargeEvent.isActive = request.isActive
|
||||
}
|
||||
}
|
||||
|
||||
fun getChargeEventList(): List<GetChargeEventListResponse> {
|
||||
return repository.getChargeEventList()
|
||||
.map {
|
||||
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
|
||||
val startDate = it.startDate
|
||||
.atZone(ZoneId.of("UTC"))
|
||||
.withZoneSameInstant(ZoneId.of("Asia/Seoul"))
|
||||
.format(dateTimeFormatter)
|
||||
|
||||
val endDate = it.endDate
|
||||
.atZone(ZoneId.of("UTC"))
|
||||
.withZoneSameInstant(ZoneId.of("Asia/Seoul"))
|
||||
.format(dateTimeFormatter)
|
||||
|
||||
GetChargeEventListResponse(
|
||||
id = it.id!!,
|
||||
title = it.title,
|
||||
startDate = startDate,
|
||||
endDate = endDate,
|
||||
availableCount = it.availableCount,
|
||||
addPercent = (it.addPercent * 100).toInt(),
|
||||
isActive = it.isActive
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package kr.co.vividnext.sodalive.admin.event
|
||||
|
||||
import kr.co.vividnext.sodalive.common.BaseEntity
|
||||
import java.time.LocalDateTime
|
||||
import javax.persistence.Entity
|
||||
|
||||
@Entity
|
||||
data class ChargeEvent(
|
||||
var title: String,
|
||||
var startDate: LocalDateTime,
|
||||
var endDate: LocalDateTime,
|
||||
var availableCount: Int,
|
||||
var addPercent: Float,
|
||||
var isActive: Boolean = true
|
||||
) : BaseEntity()
|
|
@ -0,0 +1,9 @@
|
|||
package kr.co.vividnext.sodalive.admin.event
|
||||
|
||||
data class CreateChargeEventRequest(
|
||||
val title: String,
|
||||
val startDateString: String,
|
||||
val endDateString: String,
|
||||
val availableCount: Int,
|
||||
val addPercent: Int
|
||||
)
|
|
@ -0,0 +1,11 @@
|
|||
package kr.co.vividnext.sodalive.admin.event
|
||||
|
||||
data class GetChargeEventListResponse(
|
||||
val id: Long,
|
||||
val title: String,
|
||||
val startDate: String,
|
||||
val endDate: String,
|
||||
val availableCount: Int,
|
||||
val addPercent: Int,
|
||||
val isActive: Boolean
|
||||
)
|
|
@ -0,0 +1,11 @@
|
|||
package kr.co.vividnext.sodalive.admin.event
|
||||
|
||||
data class ModifyChargeEventRequest(
|
||||
val id: Long,
|
||||
val title: String? = null,
|
||||
val startDateString: String? = null,
|
||||
val endDateString: String? = null,
|
||||
val availableCount: Int? = null,
|
||||
val addPercent: Int? = null,
|
||||
val isActive: Boolean? = null
|
||||
)
|
Loading…
Reference in New Issue