commit
eda2193e64
|
@ -31,15 +31,21 @@ class AdminMemberTagService(
|
||||||
bucket = bucket,
|
bucket = bucket,
|
||||||
filePath = "creator_tag/$fileName"
|
filePath = "creator_tag/$fileName"
|
||||||
)
|
)
|
||||||
return createTag(request.tag, imagePath)
|
return createTag(tag = request.tag, imagePath = imagePath, isAdult = request.isAdult)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun tagExistCheck(request: CreateMemberTagRequest) {
|
private fun tagExistCheck(request: CreateMemberTagRequest) {
|
||||||
repository.findByTag(request.tag)?.let { throw SodaException("이미 등록된 태그 입니다.") }
|
repository.findByTag(request.tag)?.let { throw SodaException("이미 등록된 태그 입니다.") }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createTag(tag: String, imagePath: String) {
|
private fun createTag(tag: String, imagePath: String, isAdult: Boolean) {
|
||||||
repository.save(CreatorTag(tag, imagePath))
|
repository.save(
|
||||||
|
CreatorTag(
|
||||||
|
tag = tag,
|
||||||
|
isAdult = isAdult,
|
||||||
|
image = imagePath
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@ -58,6 +64,7 @@ class AdminMemberTagService(
|
||||||
|
|
||||||
val request = objectMapper.readValue(requestString, CreateMemberTagRequest::class.java)
|
val request = objectMapper.readValue(requestString, CreateMemberTagRequest::class.java)
|
||||||
creatorTag.tag = request.tag
|
creatorTag.tag = request.tag
|
||||||
|
creatorTag.isAdult = request.isAdult
|
||||||
|
|
||||||
if (image != null) {
|
if (image != null) {
|
||||||
val fileName = generateFileName()
|
val fileName = generateFileName()
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
package kr.co.vividnext.sodalive.admin.member.tag
|
package kr.co.vividnext.sodalive.admin.member.tag
|
||||||
|
|
||||||
data class CreateMemberTagRequest(val tag: String)
|
data class CreateMemberTagRequest(val tag: String, val isAdult: Boolean = false)
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
package kr.co.vividnext.sodalive.live.tag
|
package kr.co.vividnext.sodalive.live.tag
|
||||||
|
|
||||||
data class CreateLiveTagRequest(val tag: String)
|
data class CreateLiveTagRequest(val tag: String, val isAdult: Boolean = false)
|
||||||
|
|
|
@ -5,5 +5,6 @@ import com.querydsl.core.annotations.QueryProjection
|
||||||
data class GetLiveTagResponse @QueryProjection constructor(
|
data class GetLiveTagResponse @QueryProjection constructor(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val tag: String,
|
val tag: String,
|
||||||
val image: String
|
val image: String,
|
||||||
|
val isAdult: Boolean
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,6 +8,8 @@ import javax.persistence.Entity
|
||||||
data class LiveTag(
|
data class LiveTag(
|
||||||
@Column(unique = true, nullable = false)
|
@Column(unique = true, nullable = false)
|
||||||
var tag: String,
|
var tag: String,
|
||||||
|
@Column(nullable = false)
|
||||||
|
var isAdult: Boolean = false,
|
||||||
@Column(nullable = true)
|
@Column(nullable = true)
|
||||||
var image: String? = null,
|
var image: String? = null,
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
|
|
|
@ -29,11 +29,11 @@ class LiveTagController(private val service: LiveTagService) {
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{id}")
|
||||||
@PreAuthorize("hasRole('ADMIN')")
|
@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}")
|
@PutMapping("/{id}")
|
||||||
@PreAuthorize("hasRole('ADMIN')")
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
fun modifySudaTag(
|
fun modifyLiveTag(
|
||||||
@PathVariable id: Long,
|
@PathVariable id: Long,
|
||||||
@RequestPart("image") image: MultipartFile?,
|
@RequestPart("image") image: MultipartFile?,
|
||||||
@RequestPart("request") requestString: String
|
@RequestPart("request") requestString: String
|
||||||
|
|
|
@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.live.tag
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||||
import kr.co.vividnext.sodalive.live.tag.QLiveTag.liveTag
|
import kr.co.vividnext.sodalive.live.tag.QLiveTag.liveTag
|
||||||
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import kr.co.vividnext.sodalive.member.MemberRole
|
import kr.co.vividnext.sodalive.member.MemberRole
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
import org.springframework.stereotype.Repository
|
import org.springframework.stereotype.Repository
|
||||||
|
@ -12,16 +13,16 @@ interface LiveTagRepository : JpaRepository<LiveTag, Long>, LiveTagQueryReposito
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LiveTagQueryRepository {
|
interface LiveTagQueryRepository {
|
||||||
fun getTags(role: MemberRole, isAdult: Boolean, cloudFrontHost: String): List<GetLiveTagResponse>
|
fun getTags(member: Member, cloudFrontHost: String): List<GetLiveTagResponse>
|
||||||
}
|
}
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
class LiveTagQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : LiveTagQueryRepository {
|
class LiveTagQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : LiveTagQueryRepository {
|
||||||
override fun getTags(role: MemberRole, isAdult: Boolean, cloudFrontHost: String): List<GetLiveTagResponse> {
|
override fun getTags(member: Member, cloudFrontHost: String): List<GetLiveTagResponse> {
|
||||||
var where = liveTag.isActive.isTrue
|
var where = liveTag.isActive.isTrue
|
||||||
|
|
||||||
if (role != MemberRole.ADMIN && !isAdult) {
|
if (member.role != MemberRole.ADMIN && member.auth == null) {
|
||||||
where = where.and(liveTag.tag.notIn("음담패설", "EDPS"))
|
where = where.and(liveTag.isAdult.isFalse)
|
||||||
}
|
}
|
||||||
|
|
||||||
return queryFactory
|
return queryFactory
|
||||||
|
@ -29,7 +30,8 @@ class LiveTagQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Li
|
||||||
QGetLiveTagResponse(
|
QGetLiveTagResponse(
|
||||||
liveTag.id,
|
liveTag.id,
|
||||||
liveTag.tag,
|
liveTag.tag,
|
||||||
liveTag.image.prepend("/").prepend(cloudFrontHost)
|
liveTag.image.prepend("/").prepend(cloudFrontHost),
|
||||||
|
liveTag.isAdult
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.from(liveTag)
|
.from(liveTag)
|
||||||
|
|
|
@ -90,7 +90,7 @@ class LiveTagService(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTags(member: Member): List<GetLiveTagResponse> {
|
fun getTags(member: Member): List<GetLiveTagResponse> {
|
||||||
return repository.getTags(role = member.role, isAdult = member.auth != null, cloudFrontHost = cloudFrontHost)
|
return repository.getTags(member = member, cloudFrontHost = cloudFrontHost)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun tagExistCheck(request: CreateLiveTagRequest) {
|
fun tagExistCheck(request: CreateLiveTagRequest) {
|
||||||
|
|
|
@ -8,6 +8,8 @@ import javax.persistence.Entity
|
||||||
data class CreatorTag(
|
data class CreatorTag(
|
||||||
@Column(unique = true, nullable = false)
|
@Column(unique = true, nullable = false)
|
||||||
var tag: String,
|
var tag: String,
|
||||||
|
@Column(nullable = false)
|
||||||
|
var isAdult: Boolean = false,
|
||||||
@Column(nullable = true)
|
@Column(nullable = true)
|
||||||
var image: String? = null,
|
var image: String? = null,
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
|
|
|
@ -5,5 +5,6 @@ import com.querydsl.core.annotations.QueryProjection
|
||||||
data class GetMemberTagResponse @QueryProjection constructor(
|
data class GetMemberTagResponse @QueryProjection constructor(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val tag: String,
|
val tag: String,
|
||||||
val image: String
|
val image: String,
|
||||||
|
val isAdult: Boolean
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package kr.co.vividnext.sodalive.member.tag
|
package kr.co.vividnext.sodalive.member.tag
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
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.GetMapping
|
||||||
import org.springframework.web.bind.annotation.RequestMapping
|
import org.springframework.web.bind.annotation.RequestMapping
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
|
@ -9,5 +12,11 @@ import org.springframework.web.bind.annotation.RestController
|
||||||
@RequestMapping("/member/tag")
|
@RequestMapping("/member/tag")
|
||||||
class MemberTagController(private val service: MemberTagService) {
|
class MemberTagController(private val service: MemberTagService) {
|
||||||
@GetMapping
|
@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))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.member.tag
|
||||||
|
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory
|
import com.querydsl.jpa.impl.JPAQueryFactory
|
||||||
import kr.co.vividnext.sodalive.member.Member
|
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.QCreatorTag.creatorTag
|
||||||
import kr.co.vividnext.sodalive.member.tag.QMemberCreatorTag.memberCreatorTag
|
import kr.co.vividnext.sodalive.member.tag.QMemberCreatorTag.memberCreatorTag
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
|
@ -12,7 +13,7 @@ interface MemberTagRepository : JpaRepository<CreatorTag, Long>, MemberTagQueryR
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MemberTagQueryRepository {
|
interface MemberTagQueryRepository {
|
||||||
fun getTags(): List<GetMemberTagResponse>
|
fun getTags(member: Member): List<GetMemberTagResponse>
|
||||||
fun findByMember(member: Member): List<MemberCreatorTag>
|
fun findByMember(member: Member): List<MemberCreatorTag>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,17 +23,24 @@ class MemberTagQueryRepositoryImpl(
|
||||||
@Value("\${cloud.aws.cloud-front.host}")
|
@Value("\${cloud.aws.cloud-front.host}")
|
||||||
private val cloudFrontHost: String
|
private val cloudFrontHost: String
|
||||||
) : MemberTagQueryRepository {
|
) : MemberTagQueryRepository {
|
||||||
override fun getTags(): List<GetMemberTagResponse> {
|
override fun getTags(member: Member): List<GetMemberTagResponse> {
|
||||||
|
var where = creatorTag.isActive.isTrue
|
||||||
|
|
||||||
|
if (member.role != MemberRole.ADMIN && member.auth == null) {
|
||||||
|
where = where.and(creatorTag.isAdult.isFalse)
|
||||||
|
}
|
||||||
|
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.select(
|
||||||
QGetMemberTagResponse(
|
QGetMemberTagResponse(
|
||||||
creatorTag.id,
|
creatorTag.id,
|
||||||
creatorTag.tag,
|
creatorTag.tag,
|
||||||
creatorTag.image.prepend("/").prepend(cloudFrontHost)
|
creatorTag.image.prepend("/").prepend(cloudFrontHost),
|
||||||
|
creatorTag.isAdult
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.from(creatorTag)
|
.from(creatorTag)
|
||||||
.where(creatorTag.isActive.eq(true))
|
.where(where)
|
||||||
.orderBy(creatorTag.orders.asc())
|
.orderBy(creatorTag.orders.asc())
|
||||||
.fetch()
|
.fetch()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package kr.co.vividnext.sodalive.member.tag
|
package kr.co.vividnext.sodalive.member.tag
|
||||||
|
|
||||||
|
import kr.co.vividnext.sodalive.member.Member
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
class MemberTagService(private val repository: MemberTagRepository) {
|
class MemberTagService(private val repository: MemberTagRepository) {
|
||||||
fun getTags(): List<GetMemberTagResponse> {
|
fun getTags(member: Member): List<GetMemberTagResponse> {
|
||||||
return repository.getTags()
|
return repository.getTags(member)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue