diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryController.kt index b3db249..0906e5f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryController.kt @@ -40,6 +40,17 @@ class CategoryController(private val service: CategoryService) { ApiResponse.ok(service.modifyCategory(request = request, member = member)) } + @PutMapping("/orders") + @PreAuthorize("hasRole('CREATOR')") + fun updateCategoryOrders( + @RequestBody request: UpdateCategoryOrdersRequest, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok(service.updateCategoryOrders(request = request, member = member)) + } + @DeleteMapping("/{id}") @PreAuthorize("hasRole('CREATOR')") fun deleteCategory( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryRepository.kt index 6ec6c2b..b9fbf0b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryRepository.kt @@ -39,7 +39,11 @@ class CategoryQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : C return queryFactory .select(QGetCategoryListResponse(category.id, category.title)) .from(category) - .where(category.member.id.eq(creatorId).and(category.isActive.isTrue)) + .where( + category.member.id.eq(creatorId) + .and(category.isActive.isTrue) + ) + .orderBy(category.orders.asc()) .fetch() } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryService.kt index 3afe603..00c6c9a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/CategoryService.kt @@ -86,6 +86,17 @@ class CategoryService( categoryContentRepository.deleteByCategoryId(categoryId = categoryId) } + @Transactional + fun updateCategoryOrders(request: UpdateCategoryOrdersRequest, member: Member) { + for (index in request.ids.indices) { + val category = repository.findByIdAndMemberId(categoryId = request.ids[index], memberId = member.id!!) + + if (category != null) { + category.orders = index + 1 + } + } + } + fun getCategoryList(creatorId: Long, memberId: Long): List { val isBlocked = blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = creatorId) if (isBlocked) throw SodaException("잘못된 접근입니다.") diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/category/UpdateCategoryOrdersRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/UpdateCategoryOrdersRequest.kt new file mode 100644 index 0000000..93ef105 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/category/UpdateCategoryOrdersRequest.kt @@ -0,0 +1,3 @@ +package kr.co.vividnext.sodalive.content.category + +data class UpdateCategoryOrdersRequest(val ids: List)