From d74f1ddb81ba06e57e46da8344a1d15d9da173b7 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 4 Mar 2025 23:36:31 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EB=A7=A4?= =?UTF-8?q?=EC=B2=B4=20=ED=8C=8C=ED=8A=B8=EB=84=88=20=EC=BD=94=EB=93=9C(pi?= =?UTF-8?q?d)=20=EB=93=B1=EB=A1=9D=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AdminAdMediaPartnerController.kt | 18 ++++++++++++++ .../marketing/AdminAdMediaPartnerService.kt | 12 ++++++++++ .../marketing/CreateAdMediaPartnerRequest.kt | 24 +++++++++++++++++++ .../marketing/AdMediaPartnerRepository.kt | 11 +++++++-- 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerController.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerService.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/CreateAdMediaPartnerRequest.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerController.kt new file mode 100644 index 0000000..a33509b --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerController.kt @@ -0,0 +1,18 @@ +package kr.co.vividnext.sodalive.admin.marketing + +import kr.co.vividnext.sodalive.common.ApiResponse +import org.springframework.security.access.prepost.PreAuthorize +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.RestController + +@RestController +@PreAuthorize("hasRole('ADMIN')") +@RequestMapping("/admin/marketing/media-partner") +class AdminAdMediaPartnerController(private val service: AdminAdMediaPartnerService) { + @PostMapping + fun createMediaPartner( + @RequestBody request: CreateAdMediaPartnerRequest + ) = ApiResponse.ok(service.createMediaPartner(request)) +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerService.kt new file mode 100644 index 0000000..a910963 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/AdminAdMediaPartnerService.kt @@ -0,0 +1,12 @@ +package kr.co.vividnext.sodalive.admin.marketing + +import kr.co.vividnext.sodalive.marketing.AdMediaPartnerRepository +import org.springframework.stereotype.Service + +@Service +class AdminAdMediaPartnerService(private val repository: AdMediaPartnerRepository) { + fun createMediaPartner(request: CreateAdMediaPartnerRequest) { + val mediaPartner = request.toEntity() + repository.save(mediaPartner) + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/CreateAdMediaPartnerRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/CreateAdMediaPartnerRequest.kt new file mode 100644 index 0000000..e3f9620 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/CreateAdMediaPartnerRequest.kt @@ -0,0 +1,24 @@ +package kr.co.vividnext.sodalive.admin.marketing + +import kr.co.vividnext.sodalive.marketing.AdMediaPartner +import kr.co.vividnext.sodalive.marketing.AdMediaPartnerType + +data class CreateAdMediaPartnerRequest( + val mediaGroup: String, + val pid: String, + val pidName: String, + val type: AdMediaPartnerType, + val utmSource: String, + val utmMedium: String +) { + fun toEntity(): AdMediaPartner { + return AdMediaPartner( + mediaGroup = mediaGroup, + pid = pid, + pidName = pidName, + type = type, + utmSource = utmSource, + utmMedium = utmMedium + ) + } +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/marketing/AdMediaPartnerRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/marketing/AdMediaPartnerRepository.kt index f491b39..955b70e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/marketing/AdMediaPartnerRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/marketing/AdMediaPartnerRepository.kt @@ -2,11 +2,18 @@ package kr.co.vividnext.sodalive.marketing import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.marketing.QAdMediaPartner.adMediaPartner +import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository +interface AdMediaPartnerRepository : JpaRepository, AdMediaPartnerQueryRepository + +interface AdMediaPartnerQueryRepository { + fun findByPid(pid: String): AdMediaPartner? +} + @Repository -class AdMediaPartnerRepository(private val queryFactory: JPAQueryFactory) { - fun findByPid(pid: String): AdMediaPartner? { +class AdMediaPartnerQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AdMediaPartnerQueryRepository { + override fun findByPid(pid: String): AdMediaPartner? { return queryFactory .selectFrom(adMediaPartner) .where(adMediaPartner.pid.eq(pid), adMediaPartner.isActive.isTrue)