feat(ranking): 관리자 스냅샷 job API를 추가한다
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package kr.co.vividnext.sodalive.v2.admin.ranking.creator
|
||||
|
||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingSnapshotJobStatus
|
||||
import org.springframework.format.annotation.DateTimeFormat
|
||||
import org.springframework.security.access.prepost.PreAuthorize
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PathVariable
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
import org.springframework.web.bind.annotation.RequestBody
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
import org.springframework.web.bind.annotation.RequestParam
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
import java.time.LocalDateTime
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/admin/rankings/creators/snapshot-jobs")
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
class AdminCreatorRankingSnapshotJobController(
|
||||
private val service: AdminCreatorRankingSnapshotJobService
|
||||
) {
|
||||
@PostMapping
|
||||
fun createManualJob(
|
||||
@RequestBody request: AdminCreatorRankingSnapshotJobRequest
|
||||
): ApiResponse<AdminCreatorRankingSnapshotJobResponse> {
|
||||
return ApiResponse.ok(service.createManualJob(request))
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
fun getJobs(
|
||||
@RequestParam
|
||||
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
|
||||
aggregationStartAtUtc: LocalDateTime,
|
||||
@RequestParam
|
||||
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
|
||||
aggregationEndAtUtc: LocalDateTime,
|
||||
@RequestParam(required = false)
|
||||
statuses: List<CreatorRankingSnapshotJobStatus>?
|
||||
): ApiResponse<List<AdminCreatorRankingSnapshotJobResponse>> {
|
||||
return ApiResponse.ok(
|
||||
service.getJobs(
|
||||
aggregationStartAtUtc = aggregationStartAtUtc,
|
||||
aggregationEndAtUtc = aggregationEndAtUtc,
|
||||
statuses = statuses ?: CreatorRankingSnapshotJobStatus.values().toList()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@PostMapping("/{jobId}/retry")
|
||||
fun retry(@PathVariable jobId: Long): ApiResponse<Unit> {
|
||||
service.retry(jobId)
|
||||
return ApiResponse.ok(Unit)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package kr.co.vividnext.sodalive.v2.admin.ranking.creator
|
||||
|
||||
import kr.co.vividnext.sodalive.v2.ranking.application.CreatorRankingSnapshotJobService
|
||||
import kr.co.vividnext.sodalive.v2.ranking.port.out.CreatorRankingSnapshotJobStatus
|
||||
import org.springframework.stereotype.Service
|
||||
import org.springframework.transaction.annotation.Transactional
|
||||
import java.time.LocalDateTime
|
||||
|
||||
@Service
|
||||
@Transactional(readOnly = true)
|
||||
class AdminCreatorRankingSnapshotJobService(
|
||||
private val jobService: CreatorRankingSnapshotJobService
|
||||
) {
|
||||
@Transactional
|
||||
fun createManualJob(request: AdminCreatorRankingSnapshotJobRequest): AdminCreatorRankingSnapshotJobResponse {
|
||||
return AdminCreatorRankingSnapshotJobResponse.from(
|
||||
jobService.createManualJob(
|
||||
aggregationStartAtUtc = request.aggregationStartAtUtc,
|
||||
aggregationEndAtUtc = request.aggregationEndAtUtc
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun getJobs(
|
||||
aggregationStartAtUtc: LocalDateTime,
|
||||
aggregationEndAtUtc: LocalDateTime,
|
||||
statuses: List<CreatorRankingSnapshotJobStatus> = CreatorRankingSnapshotJobStatus.values().toList()
|
||||
): List<AdminCreatorRankingSnapshotJobResponse> {
|
||||
return jobService.findJobs(
|
||||
aggregationStartAtUtc = aggregationStartAtUtc,
|
||||
aggregationEndAtUtc = aggregationEndAtUtc,
|
||||
statuses = statuses
|
||||
).map(AdminCreatorRankingSnapshotJobResponse::from)
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun retry(jobId: Long) {
|
||||
jobService.retryFailedJob(jobId)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user