From 3d852a83568f939a5da726a444500c65b6dbc59e Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 1 Oct 2025 22:16:44 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B4=80=EB=A6=AC=EC=9E=90=EC=9A=A9=20?= =?UTF-8?q?=EC=BA=94=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/admin/can/AdminCanController.kt | 7 ++++ .../sodalive/admin/can/AdminCanRepository.kt | 33 ++++++++++++++++++- .../sodalive/admin/can/AdminCanService.kt | 5 +++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanController.kt index 042eb29..0a79c94 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanController.kt @@ -1,8 +1,10 @@ package kr.co.vividnext.sodalive.admin.can +import kr.co.vividnext.sodalive.can.CanResponse import kr.co.vividnext.sodalive.common.ApiResponse import org.springframework.security.access.prepost.PreAuthorize import org.springframework.web.bind.annotation.DeleteMapping +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 @@ -13,6 +15,11 @@ import org.springframework.web.bind.annotation.RestController @RequestMapping("/admin/can") @PreAuthorize("hasRole('ADMIN')") class AdminCanController(private val service: AdminCanService) { + @GetMapping + fun getCans(): ApiResponse> { + return ApiResponse.ok(service.getCans()) + } + @PostMapping fun insertCan(@RequestBody request: AdminCanRequest) = ApiResponse.ok(service.saveCan(request)) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanRepository.kt index e784d13..60f4e6b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanRepository.kt @@ -1,6 +1,37 @@ package kr.co.vividnext.sodalive.admin.can +import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.can.Can +import kr.co.vividnext.sodalive.can.CanResponse +import kr.co.vividnext.sodalive.can.CanStatus +import kr.co.vividnext.sodalive.can.QCan.can1 +import kr.co.vividnext.sodalive.can.QCanResponse import org.springframework.data.jpa.repository.JpaRepository +import org.springframework.stereotype.Repository -interface AdminCanRepository : JpaRepository +interface AdminCanRepository : JpaRepository, AdminCanQueryRepository + +interface AdminCanQueryRepository { + fun findAllByStatus(status: CanStatus): List +} + +@Repository +class AdminCanQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AdminCanQueryRepository { + override fun findAllByStatus(status: CanStatus): List { + return queryFactory + .select( + QCanResponse( + can1.id, + can1.title, + can1.can, + can1.rewardCan, + can1.price, + can1.currency + ) + ) + .from(can1) + .where(can1.status.eq(status)) + .orderBy(can1.currency.asc(), can1.price.asc()) + .fetch() + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt index 786138b..612e414 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/can/AdminCanService.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.admin.can import kr.co.vividnext.sodalive.admin.member.AdminMemberRepository +import kr.co.vividnext.sodalive.can.CanResponse import kr.co.vividnext.sodalive.can.CanStatus import kr.co.vividnext.sodalive.can.charge.Charge import kr.co.vividnext.sodalive.can.charge.ChargeRepository @@ -20,6 +21,10 @@ class AdminCanService( private val chargeRepository: ChargeRepository, private val memberRepository: AdminMemberRepository ) { + fun getCans(): List { + return repository.findAllByStatus(status = CanStatus.SALE) + } + @Transactional fun saveCan(request: AdminCanRequest) { repository.save(request.toEntity())