diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/AdminMemberTagService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/AdminMemberTagService.kt index 0e60a59..f3c5806 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/AdminMemberTagService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/AdminMemberTagService.kt @@ -31,15 +31,21 @@ class AdminMemberTagService( bucket = bucket, filePath = "creator_tag/$fileName" ) - return createTag(request.tag, imagePath) + return createTag(tag = request.tag, imagePath = imagePath, isAdult = request.isAdult) } private fun tagExistCheck(request: CreateMemberTagRequest) { repository.findByTag(request.tag)?.let { throw SodaException("이미 등록된 태그 입니다.") } } - private fun createTag(tag: String, imagePath: String) { - repository.save(CreatorTag(tag, imagePath)) + private fun createTag(tag: String, imagePath: String, isAdult: Boolean) { + repository.save( + CreatorTag( + tag = tag, + isAdult = isAdult, + image = imagePath + ) + ) } @Transactional @@ -58,6 +64,7 @@ class AdminMemberTagService( val request = objectMapper.readValue(requestString, CreateMemberTagRequest::class.java) creatorTag.tag = request.tag + creatorTag.isAdult = request.isAdult if (image != null) { val fileName = generateFileName() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/CreateMemberTagRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/CreateMemberTagRequest.kt index fa70355..7e0eb94 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/CreateMemberTagRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/member/tag/CreateMemberTagRequest.kt @@ -1,3 +1,3 @@ package kr.co.vividnext.sodalive.admin.member.tag -data class CreateMemberTagRequest(val tag: String) +data class CreateMemberTagRequest(val tag: String, val isAdult: Boolean = false) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/CreateLiveTagRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/CreateLiveTagRequest.kt index 80a1b59..a221d2b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/CreateLiveTagRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/CreateLiveTagRequest.kt @@ -1,3 +1,3 @@ package kr.co.vividnext.sodalive.live.tag -data class CreateLiveTagRequest(val tag: String) +data class CreateLiveTagRequest(val tag: String, val isAdult: Boolean = false) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/GetLiveTagResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/GetLiveTagResponse.kt index e478871..08b1726 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/GetLiveTagResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/GetLiveTagResponse.kt @@ -5,5 +5,6 @@ import com.querydsl.core.annotations.QueryProjection data class GetLiveTagResponse @QueryProjection constructor( val id: Long, val tag: String, - val image: String + val image: String, + val isAdult: Boolean ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTag.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTag.kt index 99b0735..b334dba 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTag.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTag.kt @@ -8,6 +8,8 @@ import javax.persistence.Entity data class LiveTag( @Column(unique = true, nullable = false) var tag: String, + @Column(nullable = false) + var isAdult: Boolean = false, @Column(nullable = true) var image: String? = null, @Column(nullable = false) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagController.kt index 0e29647..714f922 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagController.kt @@ -29,11 +29,11 @@ class LiveTagController(private val service: LiveTagService) { @DeleteMapping("/{id}") @PreAuthorize("hasRole('ADMIN')") - fun deleteSudaTag(@PathVariable id: Long) = ApiResponse.ok(service.deleteTag(id), "삭제되었습니다.") + fun deleteLiveTag(@PathVariable id: Long) = ApiResponse.ok(service.deleteTag(id), "삭제되었습니다.") @PutMapping("/{id}") @PreAuthorize("hasRole('ADMIN')") - fun modifySudaTag( + fun modifyLiveTag( @PathVariable id: Long, @RequestPart("image") image: MultipartFile?, @RequestPart("request") requestString: String diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagRepository.kt index 009768f..8b436f1 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagRepository.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.live.tag import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.live.tag.QLiveTag.liveTag +import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.MemberRole import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository @@ -12,16 +13,16 @@ interface LiveTagRepository : JpaRepository, LiveTagQueryReposito } interface LiveTagQueryRepository { - fun getTags(role: MemberRole, isAdult: Boolean, cloudFrontHost: String): List + fun getTags(member: Member, cloudFrontHost: String): List } @Repository class LiveTagQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : LiveTagQueryRepository { - override fun getTags(role: MemberRole, isAdult: Boolean, cloudFrontHost: String): List { + override fun getTags(member: Member, cloudFrontHost: String): List { var where = liveTag.isActive.isTrue - if (role != MemberRole.ADMIN && !isAdult) { - where = where.and(liveTag.tag.notIn("음담패설", "EDPS")) + if (member.role != MemberRole.ADMIN && member.auth == null) { + where = where.and(liveTag.isAdult.isFalse) } return queryFactory @@ -29,7 +30,8 @@ class LiveTagQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Li QGetLiveTagResponse( liveTag.id, liveTag.tag, - liveTag.image.prepend("/").prepend(cloudFrontHost) + liveTag.image.prepend("/").prepend(cloudFrontHost), + liveTag.isAdult ) ) .from(liveTag) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagService.kt index 6237a01..6770cd3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/tag/LiveTagService.kt @@ -90,7 +90,7 @@ class LiveTagService( } fun getTags(member: Member): List { - return repository.getTags(role = member.role, isAdult = member.auth != null, cloudFrontHost = cloudFrontHost) + return repository.getTags(member = member, cloudFrontHost = cloudFrontHost) } fun tagExistCheck(request: CreateLiveTagRequest) { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/CreatorTag.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/CreatorTag.kt index 99e3dfc..586b272 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/CreatorTag.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/CreatorTag.kt @@ -8,6 +8,8 @@ import javax.persistence.Entity data class CreatorTag( @Column(unique = true, nullable = false) var tag: String, + @Column(nullable = false) + var isAdult: Boolean = false, @Column(nullable = true) var image: String? = null, @Column(nullable = false) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/GetMemberTagResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/GetMemberTagResponse.kt index a98882b..0b5f182 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/GetMemberTagResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/GetMemberTagResponse.kt @@ -5,5 +5,6 @@ import com.querydsl.core.annotations.QueryProjection data class GetMemberTagResponse @QueryProjection constructor( val id: Long, val tag: String, - val image: String + val image: String, + val isAdult: Boolean ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagController.kt index ff4c7f5..e46a27c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagController.kt @@ -1,6 +1,9 @@ package kr.co.vividnext.sodalive.member.tag import kr.co.vividnext.sodalive.common.ApiResponse +import kr.co.vividnext.sodalive.common.SodaException +import kr.co.vividnext.sodalive.member.Member +import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @@ -9,5 +12,11 @@ import org.springframework.web.bind.annotation.RestController @RequestMapping("/member/tag") class MemberTagController(private val service: MemberTagService) { @GetMapping - fun getTags() = ApiResponse.ok(service.getTags()) + fun getTags( + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok(service.getTags(member)) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagRepository.kt index 43e3035..3d98eea 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagRepository.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.member.tag import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.member.Member +import kr.co.vividnext.sodalive.member.MemberRole import kr.co.vividnext.sodalive.member.tag.QCreatorTag.creatorTag import kr.co.vividnext.sodalive.member.tag.QMemberCreatorTag.memberCreatorTag import org.springframework.beans.factory.annotation.Value @@ -12,7 +13,7 @@ interface MemberTagRepository : JpaRepository, MemberTagQueryR } interface MemberTagQueryRepository { - fun getTags(): List + fun getTags(member: Member): List fun findByMember(member: Member): List } @@ -22,17 +23,24 @@ class MemberTagQueryRepositoryImpl( @Value("\${cloud.aws.cloud-front.host}") private val cloudFrontHost: String ) : MemberTagQueryRepository { - override fun getTags(): List { + override fun getTags(member: Member): List { + var where = creatorTag.isActive.isTrue + + if (member.role != MemberRole.ADMIN && member.auth == null) { + where = where.and(creatorTag.isAdult.isFalse) + } + return queryFactory .select( QGetMemberTagResponse( creatorTag.id, creatorTag.tag, - creatorTag.image.prepend("/").prepend(cloudFrontHost) + creatorTag.image.prepend("/").prepend(cloudFrontHost), + creatorTag.isAdult ) ) .from(creatorTag) - .where(creatorTag.isActive.eq(true)) + .where(where) .orderBy(creatorTag.orders.asc()) .fetch() } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagService.kt index 72a51b3..9633488 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/tag/MemberTagService.kt @@ -1,10 +1,11 @@ package kr.co.vividnext.sodalive.member.tag +import kr.co.vividnext.sodalive.member.Member import org.springframework.stereotype.Service @Service class MemberTagService(private val repository: MemberTagRepository) { - fun getTags(): List { - return repository.getTags() + fun getTags(member: Member): List { + return repository.getTags(member) } }