test #16

Merged
klaus merged 3 commits from test into main 2023-08-25 07:50:55 +00:00
13 changed files with 55 additions and 22 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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
)

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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) {

View File

@ -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)

View File

@ -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
)

View File

@ -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))
}
}

View File

@ -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()
}

View File

@ -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)
}
}