From 5ef44da9b0a011beda356a7127341b366d3e4631 Mon Sep 17 00:00:00 2001 From: lsh328328 Date: Wed, 19 Jul 2023 20:50:21 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]:=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=20=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Travalue/exception/SuccessCode.java | 1 + .../travel/controller/CategoryController.java | 8 ++++++ .../infrastructure/CategoryRepository.java | 4 +++ .../infrastructure/TravelRepository.java | 2 ++ .../travel/service/CategoryService.java | 25 ++++++++++++++++++- .../dto/response/CategoryListResponseDto.java | 19 ++++++++++++++ .../user/controller/UserController.java | 8 +++--- 7 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/deploy/Travalue/travel/service/dto/response/CategoryListResponseDto.java diff --git a/src/main/java/com/deploy/Travalue/exception/SuccessCode.java b/src/main/java/com/deploy/Travalue/exception/SuccessCode.java index 39bf6a2..b9af5ad 100644 --- a/src/main/java/com/deploy/Travalue/exception/SuccessCode.java +++ b/src/main/java/com/deploy/Travalue/exception/SuccessCode.java @@ -25,6 +25,7 @@ public enum SuccessCode { CREATE_CATEGORY_SUCCESS(HttpStatus.CREATED, "카테고리가 생성됐습니다."), UPDATE_CATEGORY_SUCCESS(HttpStatus.OK, "카테고리 업데이트에 성공했습니다."), DELETE_CATEGORY_SUCCESS(HttpStatus.OK, "카테고리가 삭제됐습니다."), + GET_CATEGORT_LIST_SUCCESS(HttpStatus.OK, "카테고리 조회가 완료됐습니다."), CREATE_TRAVELLER_SUCCESS(HttpStatus.CREATED, "트레블러 생성 성공"), UPDATE_TRAVELLER_SUCCESS(HttpStatus.OK, "트레블러 업데이트 성공"), diff --git a/src/main/java/com/deploy/Travalue/travel/controller/CategoryController.java b/src/main/java/com/deploy/Travalue/travel/controller/CategoryController.java index ac61d4d..d1e5b05 100644 --- a/src/main/java/com/deploy/Travalue/travel/controller/CategoryController.java +++ b/src/main/java/com/deploy/Travalue/travel/controller/CategoryController.java @@ -7,6 +7,7 @@ import com.deploy.Travalue.external.client.aws.S3Service; import com.deploy.Travalue.travel.controller.dto.request.CategoryRequestDto; import com.deploy.Travalue.travel.service.CategoryService; +import com.deploy.Travalue.travel.service.dto.response.CategoryListResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.List; @RequiredArgsConstructor @RestController @@ -49,4 +51,10 @@ public ApiResponse delete(@UserId Long userId, @PathVariable final Long category return ApiResponse.success(SuccessCode.DELETE_CATEGORY_SUCCESS); } + @Auth + @ResponseStatus(HttpStatus.OK) + @GetMapping(value = "") + public ApiResponse> getList(@UserId Long userId) { + return ApiResponse.success(SuccessCode.GET_CATEGORT_LIST_SUCCESS, categoryService.getList(userId)); + } } diff --git a/src/main/java/com/deploy/Travalue/travel/infrastructure/CategoryRepository.java b/src/main/java/com/deploy/Travalue/travel/infrastructure/CategoryRepository.java index 3fd9d07..78ba555 100644 --- a/src/main/java/com/deploy/Travalue/travel/infrastructure/CategoryRepository.java +++ b/src/main/java/com/deploy/Travalue/travel/infrastructure/CategoryRepository.java @@ -1,9 +1,13 @@ package com.deploy.Travalue.travel.infrastructure; import com.deploy.Travalue.travel.domain.Category; +import com.deploy.Travalue.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import java.util.List; + public interface CategoryRepository extends JpaRepository { + List findAllByUser(User user); } diff --git a/src/main/java/com/deploy/Travalue/travel/infrastructure/TravelRepository.java b/src/main/java/com/deploy/Travalue/travel/infrastructure/TravelRepository.java index c05d50d..8442cb2 100644 --- a/src/main/java/com/deploy/Travalue/travel/infrastructure/TravelRepository.java +++ b/src/main/java/com/deploy/Travalue/travel/infrastructure/TravelRepository.java @@ -21,4 +21,6 @@ public interface TravelRepository extends JpaRepository, TravelCus List findTravelByIsPublicTrueAndIsDeletedFalseAndSectionAndTitleContainingOrSubTitleContaining(String section, String keyword1, String keyword2); List findTop3ByIsPublicTrueAndIsDeletedFalseAndSectionOrderByCreatedAtDesc(String section); + + Long countByCategoryId(Long categoryId); } diff --git a/src/main/java/com/deploy/Travalue/travel/service/CategoryService.java b/src/main/java/com/deploy/Travalue/travel/service/CategoryService.java index 35a89a8..7f412a8 100644 --- a/src/main/java/com/deploy/Travalue/travel/service/CategoryService.java +++ b/src/main/java/com/deploy/Travalue/travel/service/CategoryService.java @@ -6,12 +6,17 @@ import com.deploy.Travalue.travel.controller.dto.request.CategoryRequestDto; import com.deploy.Travalue.travel.domain.Category; import com.deploy.Travalue.travel.infrastructure.CategoryRepository; +import com.deploy.Travalue.travel.infrastructure.TravelRepository; +import com.deploy.Travalue.travel.service.dto.response.CategoryListResponseDto; import com.deploy.Travalue.user.domain.User; import com.deploy.Travalue.user.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; + @RequiredArgsConstructor @Service public class CategoryService { @@ -19,12 +24,13 @@ public class CategoryService { private final S3Service s3Service; private final UserRepository userRepository; private final CategoryRepository categoryRepository; + private final TravelRepository travelRepository; @Transactional public void create(final Long userId, final String imagePath, final CategoryRequestDto request) { final User user = userRepository.findById(userId) .orElseThrow(() -> new NotFoundException("존재하지 않는 유저입니다.")); - final Category category = categoryRepository.save(Category.newInstance( + categoryRepository.save(Category.newInstance( user, request.getTitle(), imagePath, @@ -67,4 +73,21 @@ public void delete(final Long userId, final Long categoryId) { categoryRepository.delete(category); } + + @Transactional + public List getList(final Long userId) { + + final User user = userRepository.findById(userId) + .orElseThrow(() -> new NotFoundException("존재하지 않는 유저입니다.")); + + List categories = categoryRepository.findAllByUser(user); + + List response = new ArrayList<>(); + for (Category category : categories) { + Long count = travelRepository.countByCategoryId(category.getId()); + response.add(CategoryListResponseDto.of(category.getTitle(), count)); + } + + return response; + } } diff --git a/src/main/java/com/deploy/Travalue/travel/service/dto/response/CategoryListResponseDto.java b/src/main/java/com/deploy/Travalue/travel/service/dto/response/CategoryListResponseDto.java new file mode 100644 index 0000000..140fc13 --- /dev/null +++ b/src/main/java/com/deploy/Travalue/travel/service/dto/response/CategoryListResponseDto.java @@ -0,0 +1,19 @@ +package com.deploy.Travalue.travel.service.dto.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class CategoryListResponseDto { + + private String title; + private Long travellerCount; + + public static CategoryListResponseDto of(String title, Long travellerCount) { + return new CategoryListResponseDto(title, travellerCount); + } +} diff --git a/src/main/java/com/deploy/Travalue/user/controller/UserController.java b/src/main/java/com/deploy/Travalue/user/controller/UserController.java index 2a18fb9..91b4076 100644 --- a/src/main/java/com/deploy/Travalue/user/controller/UserController.java +++ b/src/main/java/com/deploy/Travalue/user/controller/UserController.java @@ -26,7 +26,7 @@ public class UserController { @Auth @ApiOperation("마이페이지 조회") @GetMapping("/{pageOwnerUserId}") - public ApiResponse getMyPage(@UserId Long userId, Long pageOwnerUserId) { + public ApiResponse getMyPage(@UserId Long userId, Long pageOwnerUserId) { log.info("userId :" + userId + " pageOwnerUserId : " + pageOwnerUserId); MyPageResponseDto myPageResponseDto = userService.getMyPage(userId, pageOwnerUserId); return ApiResponse.success(SuccessCode.GET_MY_PAGE_SUCCESS, myPageResponseDto); @@ -44,7 +44,7 @@ public ApiResponse updateProfile(@Valid @RequestBody final @Transactional @PutMapping("/nickname") @ApiOperation("닉네임 등록 / 수정") - public ApiResponse updateNickname( + public ApiResponse updateNickname( @Valid @RequestBody final NicknameRequestDto nicknameRequestDto, @UserId Long userId) { log.info("userId :" + userId); String nickname = nicknameRequestDto.getNickname(); @@ -62,12 +62,12 @@ public ApiResponse updateNickname(@Valid @RequestParam Stri @Auth @PostMapping("/block") @ApiOperation("유저 차단 / 차단 해제") - public ApiResponse userBlock(@UserId Long userId, + public ApiResponse userBlock(@UserId Long userId, @RequestBody UserBlockRequestDto userBlockRequestDto) { log.info("유저 차단 userId : " + userId + " userBolckRequestDto : " + userBlockRequestDto.toString()); userService.blockUser(userId, userBlockRequestDto); - return ApiResponse.success(SuccessCode.USER_BLOCK_SUCCESS, null); + return ApiResponse.success(SuccessCode.USER_BLOCK_SUCCESS); } }