From ad471df3e86aad8062036ba028db7180dfe276ec Mon Sep 17 00:00:00 2001 From: teddy Date: Wed, 19 Nov 2025 11:40:33 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=ED=86=B5=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EA=B8=B0=EB=B0=98=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../code/CommonCodeApiController.java | 60 +++++++++++++++++-- .../cd/kamcoback/code/dto/CommonCodeDto.java | 23 +++++++ .../code/service/CommonCodeService.java | 21 +++++++ .../postgres/core/CommonCodeCoreService.java | 12 +++- .../postgres/entity/CommonCodeEntity.java | 4 ++ .../CommonCodeRepositoryCustom.java | 3 + .../repository/CommonCodeRepositoryImpl.java | 52 ++++++++++++++++ 7 files changed, 168 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java b/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java index 8fcd7f70..a5dbe6e6 100644 --- a/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/code/CommonCodeApiController.java @@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @Tag(name = "공통코드 관리", description = "공통코드 관리 API") @@ -77,6 +78,7 @@ public class CommonCodeApiController { mediaType = "application/json", schema = @Schema(implementation = Long.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @PostMapping @@ -96,15 +98,16 @@ public class CommonCodeApiController { @Operation(summary = "수정", description = "공통코드를 수정 합니다.") @ApiResponses( value = { - @ApiResponse(responseCode = "201", description = "공통코드 수정 성공", content = + @ApiResponse(responseCode = "204", description = "공통코드 수정 성공", content = @Content( mediaType = "application/json", schema = @Schema(implementation = Long.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @PutMapping("/{id}") - public ApiResponseDto update( + public ApiResponseDto update( @io.swagger.v3.oas.annotations.parameters.RequestBody( description = "공통코드 수정 요청 정보", required = true, @@ -113,17 +116,19 @@ public class CommonCodeApiController { mediaType = "application/json", schema = @Schema(implementation = CommonCodeDto.ModifyReq.class))) @PathVariable Long id, @RequestBody @Valid CommonCodeDto.ModifyReq req) { - return ApiResponseDto.createOK(commonCodeService.update(id, req)); + commonCodeService.update(id, req); + return ApiResponseDto.deleteOk(null); } @Operation(summary = "삭제", description = "공통코드를 삭제 합니다.") @ApiResponses( value = { - @ApiResponse(responseCode = "201", description = "공통코드 삭제 성공", content = + @ApiResponse(responseCode = "204", description = "공통코드 삭제 성공", content = @Content( mediaType = "application/json", schema = @Schema(implementation = Long.class))), @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @DeleteMapping("/{id}") @@ -132,7 +137,52 @@ public class CommonCodeApiController { description = "공통코드 삭제 요청 정보", required = true) @PathVariable Long id) { - commonCodeService.remove(id); + commonCodeService.remove(id); return ApiResponseDto.deleteOk(id); } + + @Operation(summary = "순서 변경", description = "공통코드 순서를 변경 합니다.") + @ApiResponses( + value = { + @ApiResponse(responseCode = "204", description = "공통코드 순서 변경 성공", content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Long.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PutMapping("/order") + public ApiResponseDto updateOrder( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "공통코드 순서변경 요청 정보", + required = true, + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = CommonCodeDto.OrderReq.class))) + @RequestBody @Valid CommonCodeDto.OrderReq req) { + commonCodeService.updateOrder(req); + return ApiResponseDto.deleteOk(null); + } + + @Operation(summary = "code 기반 조회", description = "code 기반 조회") + @ApiResponses( + value = { + @ApiResponse(responseCode = "200", description = "공통코드 순서 변경 성공", content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Long.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/used") + public ApiResponseDto> getByCode( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "공통코드 순서변경 요청 정보", + required = true) + @RequestParam String code) { + return ApiResponseDto.ok(commonCodeService.findByCode(code)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java b/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java index 7081fc1c..244cd71a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java @@ -5,6 +5,8 @@ import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; import com.kamco.cd.kamcoback.postgres.entity.CommonCodeEntity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.PositiveOrZero; import java.time.ZonedDateTime; import java.util.List; import lombok.AllArgsConstructor; @@ -45,6 +47,27 @@ public class CommonCodeDto { private boolean used; } + @Schema(name = "CodeOrderReq", description = "공통코드 순서 변경 정보") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class OrderReq { + List orders; + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class OrderReqDetail { + @NotNull + private Long id; + + @NotNull + private Integer order; + } + @Schema(name = "CommonCode Basic", description = "공통코드 기본 정보") @Getter public static class Basic { diff --git a/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java b/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java index a573fa4c..ed779e35 100644 --- a/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java +++ b/src/main/java/com/kamco/cd/kamcoback/code/service/CommonCodeService.java @@ -53,9 +53,30 @@ public class CommonCodeService { return commonCodeCoreService.update(id, req).getId(); } + /** + * 공통코드 삭제 처리 + * @param id 코드 아이디 + */ @Transactional public void remove(Long id) { commonCodeCoreService.remove(id); } + /** + * 공통코드 순서 변경 + * @param req + */ + @Transactional + public void updateOrder(CommonCodeDto.OrderReq req) { + commonCodeCoreService.updateOrder(req); + } + + /** + * 코드기반 조회 + * @param code + * @return + */ + public List findByCode(String code) { + return commonCodeCoreService.findByCode(code); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/CommonCodeCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/CommonCodeCoreService.java index cc3270e7..59705297 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/CommonCodeCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/CommonCodeCoreService.java @@ -8,7 +8,7 @@ import com.kamco.cd.kamcoback.postgres.repository.CommonCodeRepository; import com.kamco.cd.kamcoback.zoo.dto.AnimalDto.SearchReq; import jakarta.persistence.EntityNotFoundException; import java.util.List; -import java.util.NoSuchElementException; +import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; @@ -40,13 +40,21 @@ public class CommonCodeCoreService implements BaseCoreServicenew NoSuchElementException("common code 를 찾을 수 없습니다. id : " + id)); + .orElseThrow(()->new EntityNotFoundException("common code 를 찾을 수 없습니다. id : " + id)); CommonCodeEntity entity = new CommonCodeEntity( id, req.getName(), req.getDescription(), req.getOrder(), req.isUsed(), found.getDeleted()); return commonCodeRepository.save(entity).toDto(); } + public void updateOrder(CommonCodeDto.OrderReq req) { + commonCodeRepository.updateOrder(req); + } + + public List findByCode(String code) { + return commonCodeRepository.findByCode(code).stream().map(CommonCodeEntity::toDto).toList(); + } + @Override public void remove(Long id) { CommonCodeEntity entity = commonCodeRepository.findByCodeId(id) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCodeEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCodeEntity.java index e5eb4a14..9ecbd892 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCodeEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/CommonCodeEntity.java @@ -104,4 +104,8 @@ public class CommonCodeEntity extends CommonDateEntity { public void deleted() { this.deleted = true; } + + public void updateOrder(int order) { + this.order = order; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryCustom.java index 5d48e955..2a635907 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryCustom.java @@ -1,10 +1,13 @@ package com.kamco.cd.kamcoback.postgres.repository; +import com.kamco.cd.kamcoback.code.dto.CommonCodeDto; import com.kamco.cd.kamcoback.postgres.entity.CommonCodeEntity; import java.util.List; import java.util.Optional; public interface CommonCodeRepositoryCustom { Optional findByCodeId(Long id); + Optional findByCode(String code); List findByAll(); + void updateOrder(CommonCodeDto.OrderReq req); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryImpl.java index ea928778..98bc7720 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/CommonCodeRepositoryImpl.java @@ -2,11 +2,19 @@ package com.kamco.cd.kamcoback.postgres.repository; import static com.kamco.cd.kamcoback.postgres.entity.QCommonCodeEntity.commonCodeEntity; +import com.kamco.cd.kamcoback.code.dto.CommonCodeDto; +import com.kamco.cd.kamcoback.code.dto.CommonCodeDto.OrderReqDetail; import com.kamco.cd.kamcoback.postgres.entity.CommonCodeEntity; import com.kamco.cd.kamcoback.postgres.entity.QCommonCodeEntity; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.jpa.impl.JPAQueryFactory; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; public class CommonCodeRepositoryImpl extends QuerydslRepositorySupport implements CommonCodeRepositoryCustom { @@ -35,6 +43,25 @@ public class CommonCodeRepositoryImpl extends QuerydslRepositorySupport implemen ); } + @Override + public Optional findByCode(String code) { + QCommonCodeEntity child = new QCommonCodeEntity("child"); + return Optional.ofNullable( + queryFactory + .selectFrom(commonCodeEntity) + .leftJoin(commonCodeEntity.children, child) + .fetchJoin() + .where( + commonCodeEntity.parent.isNull(), + commonCodeEntity.code.eq(code), + commonCodeEntity.used.isTrue(), + commonCodeEntity.deleted.isFalse() + ) + .orderBy(child.order.asc()) + .fetchOne() + ); + } + @Override public List findByAll() { QCommonCodeEntity child = new QCommonCodeEntity("child"); @@ -49,4 +76,29 @@ public class CommonCodeRepositoryImpl extends QuerydslRepositorySupport implemen .orderBy(commonCodeEntity.order.asc(), child.order.asc()) .fetch(); } + + @Override + public void updateOrder(CommonCodeDto.OrderReq req) { + Map orderMap = req.getOrders().stream(). + collect(Collectors.toMap(OrderReqDetail::getId, OrderReqDetail::getOrder)); + + List entity = findAllByIds(orderMap.keySet()); + + entity.forEach(commonCodeEntity -> { + Integer order = orderMap.get(commonCodeEntity.getId()); + if(order != null) { + commonCodeEntity.updateOrder(order); + } + }); + } + + private List findAllByIds(Set ids) { + return queryFactory + .selectFrom(commonCodeEntity) + .where( + commonCodeEntity.id.in(ids), + commonCodeEntity.deleted.isFalse() + ) + .fetch(); + } }