diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanController.kt index 17b4c3d..1abe191 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanController.kt @@ -23,24 +23,27 @@ class AdminSignatureCanController(private val service: AdminSignatureCanService) fun createSignatureCan( @RequestParam("can") can: Int, @RequestParam("image") image: MultipartFile, - @RequestParam("creator_id") creatorId: Long + @RequestParam("creator_id") creatorId: Long, + @RequestParam("isAdult", required = false) isAdult: Boolean = false ) = ApiResponse.ok( - service.createSignatureCan(can = can, creatorId = creatorId, image = image), + service.createSignatureCan(can = can, creatorId = creatorId, image = image, isAdult = isAdult), "등록되었습니다." ) @PutMapping fun modifySignatureCan( @RequestParam("id") id: Long, + @RequestParam("can", required = false) can: Int?, @RequestParam("image", required = false) image: MultipartFile?, - @RequestParam("isActive", required = false) isActive: Boolean? + @RequestParam("isActive", required = false) isActive: Boolean?, + @RequestParam("isAdult", required = false) isAdult: Boolean? ) = run { - if (image == null && isActive == null) { + if (can == null && image == null && isActive == null && isAdult == null) { throw SodaException("변경사항이 없습니다.") } ApiResponse.ok( - service.modifySignatureCan(id = id, image = image, isActive = isActive), + service.modifySignatureCan(id = id, can = can, image = image, isActive = isActive, isAdult = isAdult), "수정되었습니다." ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanRepository.kt index 5f34200..7825fa8 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanRepository.kt @@ -31,6 +31,7 @@ class AdminSignatureCanQueryRepositoryImpl( signatureCan.id, signatureCan.can, signatureCan.image.prepend("/").prepend(imageHost), + signatureCan.isAdult, member.nickname ) ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanService.kt index 8834731..d5028cd 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/AdminSignatureCanService.kt @@ -37,13 +37,13 @@ class AdminSignatureCanService( } @Transactional - fun createSignatureCan(can: Int, creatorId: Long, image: MultipartFile) { + fun createSignatureCan(can: Int, creatorId: Long, image: MultipartFile, isAdult: Boolean) { if (creatorId < 1) throw SodaException("올바른 크리에이터를 선택해 주세요.") val creator = memberRepository.findCreatorByIdOrNull(memberId = creatorId) ?: throw SodaException("올바른 크리에이터를 선택해 주세요.") - val signatureCan = SignatureCan(can = can) + val signatureCan = SignatureCan(can = can, isAdult = isAdult) signatureCan.creator = creator repository.save(signatureCan) @@ -60,14 +60,22 @@ class AdminSignatureCanService( } @Transactional - fun modifySignatureCan(id: Long, image: MultipartFile?, isActive: Boolean?) { + fun modifySignatureCan(id: Long, can: Int?, image: MultipartFile?, isActive: Boolean?, isAdult: Boolean?) { val signatureCan = repository.findByIdOrNull(id = id) ?: throw SodaException("잘못된 요청입니다.") + if (can != null) { + signatureCan.can = can + } + if (isActive != null) { signatureCan.isActive = isActive } + if (isAdult != null) { + signatureCan.isAdult = isAdult + } + if (image != null) { val metadata = ObjectMetadata() metadata.contentLength = image.size diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/GetSignatureCanListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/GetSignatureCanListResponse.kt index d197058..1969a4d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/GetSignatureCanListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/live/signature/GetSignatureCanListResponse.kt @@ -11,5 +11,6 @@ data class GetSignatureCanListItem @QueryProjection constructor( val id: Long, val can: Int, val image: String, + val isAdult: Boolean, val nickname: String ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt index 5fdafa1..df3115d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt @@ -32,12 +32,13 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature fun createSignature( @RequestParam("can") can: Int, @RequestParam("image") image: MultipartFile, + @RequestParam("isAdult", required = false) isAdult: Boolean = false, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") ApiResponse.ok( - service.createSignature(can = can, image = image, memberId = member.id!!), + service.createSignature(can = can, image = image, isAdult = isAdult, memberId = member.id!!), "등록되었습니다." ) } @@ -45,15 +46,26 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature @PutMapping fun modifySignature( @RequestParam("id") id: Long, + @RequestParam("can", required = false) can: Int?, @RequestParam("image", required = false) image: MultipartFile?, @RequestParam("isActive", required = false) isActive: Boolean?, + @RequestParam("isAdult", required = false) isAdult: Boolean?, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - if (image == null && isActive == null) throw SodaException("변경사항이 없습니다.") + if (can == null && image == null && isActive == null && isAdult == null) { + throw SodaException("변경사항이 없습니다.") + } ApiResponse.ok( - service.modifySignature(id = id, image = image, isActive = isActive, memberId = member.id!!), + service.modifySignature( + id = id, + can = can, + image = image, + isActive = isActive, + isAdult = isAdult, + memberId = member.id!! + ), if (isActive == false) "삭제되었습니다." else "수정되었습니다." ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt index 4442839..7fcc302 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt @@ -41,6 +41,7 @@ class CreatorAdminSignatureQueryRepositoryImpl( signatureCan.id, signatureCan.can, signatureCan.image.prepend("/").prepend(imageHost), + signatureCan.isAdult, member.nickname ) ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt index f1a637e..9c1f57c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt @@ -37,11 +37,11 @@ class CreatorAdminSignatureService( } @Transactional - fun createSignature(can: Int, image: MultipartFile, memberId: Long) { + fun createSignature(can: Int, image: MultipartFile, memberId: Long, isAdult: Boolean) { val member = memberRepository.findCreatorByIdOrNull(memberId = memberId) ?: throw SodaException("잘못된 접근입니다.") - val signatureCan = SignatureCan(can = can) + val signatureCan = SignatureCan(can = can, isAdult = isAdult) signatureCan.creator = member repository.save(signatureCan) @@ -58,14 +58,29 @@ class CreatorAdminSignatureService( } @Transactional - fun modifySignature(id: Long, image: MultipartFile?, isActive: Boolean?, memberId: Long) { + fun modifySignature( + id: Long, + can: Int?, + image: MultipartFile?, + isActive: Boolean?, + memberId: Long, + isAdult: Boolean? + ) { val signatureCan = repository.findSignatureByIdOrNull(id = id, memberId = memberId) ?: throw SodaException("잘못된 요청입니다.") + if (can != null) { + signatureCan.can = can + } + if (isActive != null) { signatureCan.isActive = isActive } + if (isAdult != null) { + signatureCan.isAdult = isAdult + } + if (image != null) { val metadata = ObjectMetadata() metadata.contentLength = image.size diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/GetSignatureListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/GetSignatureListResponse.kt index 95093d8..9c8028d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/GetSignatureListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/GetSignatureListResponse.kt @@ -11,5 +11,6 @@ data class GetSignatureListItem @QueryProjection constructor( val id: Long, val can: Int, val image: String, + val isAdult: Boolean, val nickname: String ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt index 85dfd1a..6cfc274 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt @@ -1009,7 +1009,8 @@ class LiveRoomService( return signatureCanRepository.findImageByCreatorIdAndCan( creatorId = host.id!!, can = request.can, - imageHost = cloudFrontHost + imageHost = cloudFrontHost, + isAdult = room.isAdult ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCan.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCan.kt index 66c666a..c9ee36f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCan.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCan.kt @@ -9,7 +9,8 @@ import javax.persistence.ManyToOne @Entity data class SignatureCan( - val can: Int, + var can: Int, + var isAdult: Boolean = false, var isActive: Boolean = true ) : BaseEntity() { var image: String? = null diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanRepository.kt index 51d67e9..2976998 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanRepository.kt @@ -7,19 +7,24 @@ import org.springframework.data.jpa.repository.JpaRepository interface SignatureCanRepository : JpaRepository, SignatureCanQueryRepository interface SignatureCanQueryRepository { - fun findImageByCreatorIdAndCan(creatorId: Long, can: Int, imageHost: String): String? + fun findImageByCreatorIdAndCan(creatorId: Long, can: Int, imageHost: String, isAdult: Boolean): String? } class SignatureCanQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : SignatureCanQueryRepository { - override fun findImageByCreatorIdAndCan(creatorId: Long, can: Int, imageHost: String): String? { + override fun findImageByCreatorIdAndCan(creatorId: Long, can: Int, imageHost: String, isAdult: Boolean): String? { + var where = signatureCan.creator.id.eq(creatorId) + .and(signatureCan.can.eq(can)) + .and(signatureCan.isActive.isTrue) + + if (!isAdult) { + where = where.and(signatureCan.isAdult.isFalse()) + } + return queryFactory .select(signatureCan.image.prepend("/").prepend(imageHost)) .from(signatureCan) - .where( - signatureCan.creator.id.eq(creatorId) - .and(signatureCan.can.eq(can)) - .and(signatureCan.isActive.isTrue) - ) + .where(where) + .orderBy(signatureCan.isAdult.desc()) .fetchFirst() } }