parent
34c08d4345
commit
8be2ec9319
|
@ -8,6 +8,7 @@ interface CategoryContentRepository : JpaRepository<CategoryContent, Long>, Cate
|
|||
|
||||
interface CategoryContentQueryRepository {
|
||||
fun findByContentIdAndCategoryId(contentId: Long, categoryId: Long): CategoryContent?
|
||||
fun deleteByCategoryId(categoryId: Long)
|
||||
}
|
||||
|
||||
class CategoryContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CategoryContentQueryRepository {
|
||||
|
@ -20,4 +21,12 @@ class CategoryContentQueryRepositoryImpl(private val queryFactory: JPAQueryFacto
|
|||
)
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
override fun deleteByCategoryId(categoryId: Long) {
|
||||
queryFactory
|
||||
.update(categoryContent)
|
||||
.set(categoryContent.isActive, false)
|
||||
.where(categoryContent.category.id.eq(categoryId))
|
||||
.execute()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@ import kr.co.vividnext.sodalive.common.SodaException
|
|||
import kr.co.vividnext.sodalive.member.Member
|
||||
import org.springframework.security.access.prepost.PreAuthorize
|
||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||
import org.springframework.web.bind.annotation.DeleteMapping
|
||||
import org.springframework.web.bind.annotation.PathVariable
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
import org.springframework.web.bind.annotation.RequestBody
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
|
@ -21,8 +23,17 @@ class CategoryController(private val service: CategoryService) {
|
|||
) = run {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
ApiResponse.ok(
|
||||
service.createCategory(request = request, member = member)
|
||||
)
|
||||
ApiResponse.ok(service.createCategory(request = request, member = member))
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@PreAuthorize("hasRole('CREATOR')")
|
||||
fun deleteCategory(
|
||||
@PathVariable("id") categoryId: Long,
|
||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||
) = run {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
ApiResponse.ok(service.deleteCategory(categoryId = categoryId, member = member))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@ interface CategoryRepository : JpaRepository<Category, Long>, CategoryQueryRepos
|
|||
|
||||
interface CategoryQueryRepository {
|
||||
fun findByTitleAndMemberId(title: String, memberId: Long): Category?
|
||||
|
||||
fun findByIdAndMemberId(categoryId: Long, memberId: Long): Category?
|
||||
}
|
||||
|
||||
class CategoryQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CategoryQueryRepository {
|
||||
|
@ -20,4 +22,14 @@ class CategoryQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : C
|
|||
)
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
override fun findByIdAndMemberId(categoryId: Long, memberId: Long): Category? {
|
||||
return queryFactory
|
||||
.selectFrom(category)
|
||||
.where(
|
||||
category.id.eq(categoryId)
|
||||
.and(category.member.id.eq(memberId))
|
||||
)
|
||||
.fetchFirst()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package kr.co.vividnext.sodalive.content.category
|
||||
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.content.AudioContentRepository
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import org.springframework.stereotype.Service
|
||||
|
@ -37,4 +38,13 @@ class CategoryService(
|
|||
categoryContent.isActive = true
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun deleteCategory(categoryId: Long, member: Member) {
|
||||
val category = repository.findByIdAndMemberId(categoryId = categoryId, memberId = member.id!!)
|
||||
?: throw SodaException("잘못된 요청입니다.")
|
||||
category.isActive = false
|
||||
|
||||
categoryContentRepository.deleteByCategoryId(categoryId = categoryId)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue