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)