commit
eda2193e64
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<LiveTag, Long>, LiveTagQueryReposito
|
|||
}
|
||||
|
||||
interface LiveTagQueryRepository {
|
||||
fun getTags(role: MemberRole, isAdult: Boolean, cloudFrontHost: String): List<GetLiveTagResponse>
|
||||
fun getTags(member: Member, cloudFrontHost: String): List<GetLiveTagResponse>
|
||||
}
|
||||
|
||||
@Repository
|
||||
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
|
||||
|
||||
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)
|
||||
|
|
|
@ -90,7 +90,7 @@ class LiveTagService(
|
|||
}
|
||||
|
||||
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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<CreatorTag, Long>, MemberTagQueryR
|
|||
}
|
||||
|
||||
interface MemberTagQueryRepository {
|
||||
fun getTags(): List<GetMemberTagResponse>
|
||||
fun getTags(member: Member): List<GetMemberTagResponse>
|
||||
fun findByMember(member: Member): List<MemberCreatorTag>
|
||||
}
|
||||
|
||||
|
@ -22,17 +23,24 @@ class MemberTagQueryRepositoryImpl(
|
|||
@Value("\${cloud.aws.cloud-front.host}")
|
||||
private val cloudFrontHost: String
|
||||
) : 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
|
||||
.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()
|
||||
}
|
||||
|
|
|
@ -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<GetMemberTagResponse> {
|
||||
return repository.getTags()
|
||||
fun getTags(member: Member): List<GetMemberTagResponse> {
|
||||
return repository.getTags(member)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue