From c84ae6243122a2c23b58760b7d033fd12e9a73cb Mon Sep 17 00:00:00 2001 From: junmo95 Date: Wed, 3 Jan 2024 10:02:15 +0900 Subject: [PATCH 01/12] =?UTF-8?q?[feat]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EC=97=94=ED=8B=B0=ED=8B=B0=201=EC=B0=A8=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20-=20=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8=20=ED=8B=80?= =?UTF-8?q?=EC=9D=84=20=EA=B5=AC=ED=98=84=ED=95=98=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/place/entity/Place.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java b/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java new file mode 100644 index 00000000..6739b6b7 --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java @@ -0,0 +1,82 @@ +package com.haejwo.tripcometrue.domain.place.entity; + +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; +import com.haejwo.tripcometrue.global.entity.BaseTimeEntity; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import java.time.LocalTime; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Place extends BaseTimeEntity { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String name; + private String address; + private String description; + private LocalTime weekdayOpenTime; + private LocalTime weekdayCloseTime; + private LocalTime weekendOpenTime; + private LocalTime weekendCloseTime; + private Integer storedCount; + + // 임시 City 테이블 데이터 + private Long cityId; + + @Builder + public Place( + Long id, String name, String address, String description, + LocalTime weekdayOpenTime, LocalTime weekdayCloseTime, + LocalTime weekendOpenTime, LocalTime weekendCloseTime, + Integer storedCount, Long cityId, String city) { + this.id = id; + this.name = name; + this.address = address; + this.description = description; + this.weekdayOpenTime = weekdayOpenTime; + this.weekdayCloseTime = weekdayCloseTime; + this.weekendOpenTime = weekendOpenTime; + this.weekendCloseTime = weekendCloseTime; + this.storedCount = storedCount; + this.cityId = cityId; + } + + public void update(PlaceRequestDto requestDto) { + if(requestDto.name() != null) { + this.name = requestDto.name(); + } + if(requestDto.address() != null) { + this.address = requestDto.address(); + } + if(requestDto.description() != null) { + this.description = requestDto.description(); + } + if(requestDto.weekdayOpenTime() != null) { + this.weekdayOpenTime = requestDto.weekdayOpenTime(); + } + if(requestDto.weekdayCloseTime() != null) { + this.weekdayCloseTime = requestDto.weekdayCloseTime(); + } + if(requestDto.weekendOpenTime() != null) { + this.weekendOpenTime = requestDto.weekendOpenTime(); + } + if(requestDto.weekendCloseTime() != null) { + this.weekendCloseTime = requestDto.weekendCloseTime(); + } + if(requestDto.storedCount() != null) { + this.storedCount = requestDto.storedCount(); + } + if(requestDto.cityId() != null) { + this.cityId = requestDto.cityId(); + } + } +} From c47b346fba6eff4dccd75dd30930342b791092c1 Mon Sep 17 00:00:00 2001 From: junmo95 Date: Wed, 3 Jan 2024 10:04:10 +0900 Subject: [PATCH 02/12] =?UTF-8?q?[feat]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=201=EC=B0=A8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20-=20=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8=20?= =?UTF-8?q?=ED=8B=80=EC=9D=84=20=EA=B5=AC=ED=98=84=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20?= =?UTF-8?q?=EB=B0=8F=20DTO=20=EC=84=A4=EA=B3=84=20=EB=B0=8F=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20-=20AppConfig=20=EC=9D=98=20objectMapper=EA=B0=80?= =?UTF-8?q?=20Dto=EC=9D=98=20=EC=A7=81=EB=A0=AC=ED=99=94,=20=EC=97=AD?= =?UTF-8?q?=EC=A7=81=EB=A0=AC=ED=99=94=EC=97=90=20=EC=98=81=ED=96=A5?= =?UTF-8?q?=EC=9D=84=20=EB=81=BC=EC=B3=90=20=EC=98=A4=EB=A5=98=EA=B0=80=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=ED=95=A8.=20=EC=9E=84=EC=8B=9C=EB=A1=9C=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../place/controller/PlaceController.java | 101 ++++++++++++++++++ .../domain/place/dto/PlaceDto.java | 38 +++++++ .../place/dto/request/PlaceRequestDto.java | 66 ++++++++++++ .../place/dto/response/PlaceResponseDto.java | 70 ++++++++++++ .../tripcometrue/global/config/AppConfig.java | 14 +-- 5 files changed, 282 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/dto/PlaceDto.java create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java new file mode 100644 index 00000000..b0073f5f --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java @@ -0,0 +1,101 @@ +package com.haejwo.tripcometrue.domain.place.controller; + +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; +import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDto; +import com.haejwo.tripcometrue.domain.place.service.PlaceService; +import com.haejwo.tripcometrue.global.util.ResponseDTO; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PatchMapping; +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; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/v1/places") +@RequiredArgsConstructor +public class PlaceController { + + private final PlaceService placeService; + + @PostMapping + public ResponseEntity> placeAdd( + @RequestBody PlaceRequestDto requestDto + ) { + + PlaceResponseDto responseDto = placeService.addPlace(requestDto); + ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); + + return ResponseEntity + .status(responseBody.getCode()) + .body(responseBody); + } + + @GetMapping("/{placeId}") + public ResponseEntity> placeDetails( + @PathVariable Long placeId + ) { + + PlaceResponseDto responseDto = placeService.findPlace(placeId); + ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); + + return ResponseEntity + .status(responseBody.getCode()) + .body(responseBody); + } + + @GetMapping + public ResponseEntity>> placeList( + Pageable pageable, + @ModelAttribute PlaceFilterRequestDto requestDto + ) { + + System.out.println("requestDto : " + requestDto.toString()); + + Page placePage = placeService.findPlaces(pageable, requestDto); + + ResponseDTO responseBody = ResponseDTO.okWithData(placePage); + + return ResponseEntity + .status(responseBody.getCode()) + .body(responseBody); + } + + @PatchMapping("/{placeId}") + public ResponseEntity> placeModify( + @PathVariable Long placeId, + @RequestBody PlaceRequestDto requestDto + ) { + + PlaceResponseDto responseDto = placeService.modifyPlace(placeId, requestDto); + ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); + + return ResponseEntity + .status(responseBody.getCode()) + .body(responseBody); + } + + @DeleteMapping("/{placeId}") + public ResponseEntity placeRemove( + @PathVariable Long placeId + ) { + + placeService.removePlace(placeId); + ResponseDTO responseBody = ResponseDTO.ok(); + + return ResponseEntity + .status(responseBody.getCode()) + .body(responseBody); + } + +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/PlaceDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/PlaceDto.java new file mode 100644 index 00000000..237e2f49 --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/PlaceDto.java @@ -0,0 +1,38 @@ +package com.haejwo.tripcometrue.domain.place.dto; + +import java.time.LocalTime; +import lombok.Builder; + +public record PlaceDto( + Long id, + String name, + String address, + String description, + LocalTime weekdayOpenTime, + LocalTime weekdayCloseTime, + LocalTime weekendOpenTime, + LocalTime weekendCloseTime, + Integer storedCount) { + + @Builder + public PlaceDto( + Long id, + String name, + String address, + String description, + LocalTime weekdayOpenTime, + LocalTime weekdayCloseTime, + LocalTime weekendOpenTime, + LocalTime weekendCloseTime, + Integer storedCount) { + this.id = id; + this.name = name; + this.address = address; + this.description = description; + this.weekdayOpenTime = weekdayOpenTime; + this.weekdayCloseTime = weekdayCloseTime; + this.weekendOpenTime = weekendOpenTime; + this.weekendCloseTime = weekendCloseTime; + this.storedCount = storedCount; + } +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java new file mode 100644 index 00000000..1cab45ae --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java @@ -0,0 +1,66 @@ +package com.haejwo.tripcometrue.domain.place.dto.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.haejwo.tripcometrue.domain.place.entity.Place; +import java.time.LocalTime; +import lombok.Builder; +import lombok.Getter; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public record PlaceRequestDto( + String name, + String address, + String description, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekdayOpenTime, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekdayCloseTime, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendOpenTime, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendCloseTime, +// LocalTime weekdayOpenTime, +// LocalTime weekdayCloseTime, +// LocalTime weekendOpenTime, +// LocalTime weekendCloseTime, + Integer storedCount, + Long cityId +) { + + @Builder + public PlaceRequestDto( + String name, + String address, + String description, + LocalTime weekdayOpenTime, + LocalTime weekdayCloseTime, + LocalTime weekendOpenTime, + LocalTime weekendCloseTime, + Integer storedCount, + Long cityId + ) { + this.name = name; + this.address = address; + this.description = description; + this.weekdayOpenTime = weekdayOpenTime; + this.weekdayCloseTime = weekdayCloseTime; + this.weekendOpenTime = weekendOpenTime; + this.weekendCloseTime = weekendCloseTime; + this.storedCount = storedCount; + this.cityId = cityId; + } + + public Place DtoToEntity() { + return Place.builder() + .name(this.name) + .address(this.address) + .description(this.description) + .weekdayOpenTime(this.weekdayOpenTime) + .weekdayCloseTime(this.weekdayCloseTime) + .weekendOpenTime(this.weekendOpenTime) + .weekendCloseTime(this.weekendCloseTime) + .storedCount(this.storedCount) + .cityId(this.cityId) + .build(); + } + +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java new file mode 100644 index 00000000..3a992beb --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java @@ -0,0 +1,70 @@ +package com.haejwo.tripcometrue.domain.place.dto.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.haejwo.tripcometrue.domain.place.entity.Place; +import java.time.LocalTime; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public record PlaceResponseDto( + Long id, + String name, + String address, + String description, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekdayOpenTime, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekdayCloseTime, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendOpenTime, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendCloseTime, +// LocalTime weekdayOpenTime, +// LocalTime weekdayCloseTime, +// LocalTime weekendOpenTime, +// LocalTime weekendCloseTime, + Integer storedCount, + Long cityId +) { + + @Builder + public PlaceResponseDto( + Long id, + String name, + String address, + String description, + LocalTime weekdayOpenTime, + LocalTime weekdayCloseTime, + LocalTime weekendOpenTime, + LocalTime weekendCloseTime, + Integer storedCount, + Long cityId + ) { + this.id = id; + this.name = name; + this.address = address; + this.description = description; + this.weekdayOpenTime = weekdayOpenTime; + this.weekdayCloseTime = weekdayCloseTime; + this.weekendOpenTime = weekendOpenTime; + this.weekendCloseTime = weekendCloseTime; + this.storedCount = storedCount; + this.cityId = cityId; + } + + public static PlaceResponseDto DtoToEntity(Place entity) { + return PlaceResponseDto.builder() + .id(entity.getId()) + .name(entity.getName()) + .address(entity.getAddress()) + .description(entity.getDescription()) + .weekdayOpenTime(entity.getWeekdayOpenTime()) + .weekdayCloseTime(entity.getWeekdayCloseTime()) + .weekendOpenTime(entity.getWeekendOpenTime()) + .weekendCloseTime(entity.getWeekendCloseTime()) + .storedCount(entity.getStoredCount()) + .cityId(entity.getCityId()) + .build(); + } + +} diff --git a/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java b/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java index 5525bd2b..8783c38f 100644 --- a/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java +++ b/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java @@ -18,11 +18,11 @@ public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } - @Bean - public ObjectMapper objectMapper() { - ObjectMapper objectMapper = new ObjectMapper(); - // RestController에서 json 응답 시 null 값의 필드는 아예 보여주지 않도록 설정하는 부분 - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - return objectMapper; - } +// @Bean +// public ObjectMapper objectMapper() { +// ObjectMapper objectMapper = new ObjectMapper(); +// // RestController에서 json 응답 시 null 값의 필드는 아예 보여주지 않도록 설정하는 부분 +// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); +// return objectMapper; +// } } From 4a70f0b5183a1a0103f095e833985a6baa77e17f Mon Sep 17 00:00:00 2001 From: junmo95 Date: Wed, 3 Jan 2024 11:33:42 +0900 Subject: [PATCH 03/12] =?UTF-8?q?[feat]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=201=EC=B0=A8=20=EA=B5=AC=ED=98=84=20-=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8=20=ED=8B=80=EC=9D=84=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PlaceControllerAdvice.java | 29 +++++++++++++++++++ .../exception/PlaceNotFoundException.java | 13 +++++++++ .../global/exception/ErrorCode.java | 3 ++ 3 files changed, 45 insertions(+) create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceControllerAdvice.java create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/exception/PlaceNotFoundException.java diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceControllerAdvice.java b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceControllerAdvice.java new file mode 100644 index 00000000..9f51a461 --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceControllerAdvice.java @@ -0,0 +1,29 @@ +package com.haejwo.tripcometrue.domain.place.controller; + +import com.haejwo.tripcometrue.domain.place.exception.PlaceNotFoundException; +import com.haejwo.tripcometrue.global.util.ResponseDTO; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class PlaceControllerAdvice { + + @ExceptionHandler(PlaceNotFoundException.class) + public ResponseEntity> placeNotFoundExceptionHandler( + PlaceNotFoundException e + ) { + HttpStatus status = e.getErrorCode().getHttpStatus(); + + return ResponseEntity + .status(status) + .body(ResponseDTO.errorWithMessage(status, e.getMessage())); + + + } + + + + +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/exception/PlaceNotFoundException.java b/src/main/java/com/haejwo/tripcometrue/domain/place/exception/PlaceNotFoundException.java new file mode 100644 index 00000000..bfd1a699 --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/exception/PlaceNotFoundException.java @@ -0,0 +1,13 @@ +package com.haejwo.tripcometrue.domain.place.exception; + +import com.haejwo.tripcometrue.global.exception.ApplicationException; +import com.haejwo.tripcometrue.global.exception.ErrorCode; + +public class PlaceNotFoundException extends ApplicationException { + private static final ErrorCode ERROR_CODE = ErrorCode.PLCAE_NOT_FOUND; + + public PlaceNotFoundException() { + super(ERROR_CODE); + } + +} diff --git a/src/main/java/com/haejwo/tripcometrue/global/exception/ErrorCode.java b/src/main/java/com/haejwo/tripcometrue/global/exception/ErrorCode.java index f348e923..55582bdf 100644 --- a/src/main/java/com/haejwo/tripcometrue/global/exception/ErrorCode.java +++ b/src/main/java/com/haejwo/tripcometrue/global/exception/ErrorCode.java @@ -23,6 +23,9 @@ public enum ErrorCode { // AUTH INVALID_PASSWORD(HttpStatus.BAD_REQUEST, "비밀번호가 틀렸습니다."), + // PLACE + PLCAE_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 여행지입니다."), + // 5xx INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 내부 에러"); From ae50d203e65a73ed73e1ccc7fc858df1f369fc8a Mon Sep 17 00:00:00 2001 From: junmo95 Date: Wed, 3 Jan 2024 11:34:24 +0900 Subject: [PATCH 04/12] =?UTF-8?q?[feat]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=201=EC=B0=A8=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20-=20=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8=20=ED=8B=80?= =?UTF-8?q?=EC=9D=84=20=EA=B5=AC=ED=98=84=ED=95=98=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/place/service/PlaceService.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java new file mode 100644 index 00000000..6f982725 --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java @@ -0,0 +1,83 @@ +package com.haejwo.tripcometrue.domain.place.service; + +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; +import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDto; +import com.haejwo.tripcometrue.domain.place.entity.Place; +import com.haejwo.tripcometrue.domain.place.exception.PlaceNotFoundException; +import com.haejwo.tripcometrue.domain.place.repositroy.PlaceRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Slf4j +public class PlaceService { + + private final PlaceRepository placeRepository; + + @Transactional + public PlaceResponseDto addPlace(PlaceRequestDto requestDto) { + + Place requestPlace = requestDto.DtoToEntity(); + Place savedPlace = placeRepository.save(requestPlace); + PlaceResponseDto responseDto = PlaceResponseDto.DtoToEntity(savedPlace); + + return responseDto; + + } + + @Transactional(readOnly = true) + public PlaceResponseDto findPlace(Long placeId) { + + Place findPlace = findPlaceById(placeId); + + PlaceResponseDto responseDto = PlaceResponseDto.DtoToEntity(findPlace); + + return responseDto; + } + + @Transactional(readOnly = true) + public Page findPlaces(Pageable pageable, PlaceFilterRequestDto requestDto) { + + Page findPlaces = placeRepository.findPlaceWithFilter(pageable, requestDto); + + Page result = findPlaces.map(PlaceResponseDto::DtoToEntity); + + return result; + + } + + @Transactional + public PlaceResponseDto modifyPlace(Long placeId, PlaceRequestDto requestDto) { + + Place place = findPlaceById(placeId); + place.update(requestDto); + PlaceResponseDto responseDto = PlaceResponseDto.DtoToEntity(place); + + return responseDto; + } + + @Transactional + public void removePlace(Long placeId) { + Place findPlace = findPlaceById(placeId); + placeRepository.delete(findPlace); + } + + + + private Place findPlaceById(Long placeId) { + + Place findPlace = placeRepository.findById(placeId) + .orElseThrow(PlaceNotFoundException::new); + + return findPlace; + } + + + +} From 8aed1527257afa361e0a06cd006b0b8d53fb9ecc Mon Sep 17 00:00:00 2001 From: junmo95 Date: Wed, 3 Jan 2024 11:35:39 +0900 Subject: [PATCH 05/12] =?UTF-8?q?[feat]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EB=A0=88=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC=201=EC=B0=A8=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20-=20=EA=B8=B0=EB=B3=B8=EC=A0=81=EC=9D=B8?= =?UTF-8?q?=20=ED=8B=80=EC=9D=84=20=EA=B5=AC=ED=98=84=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EB=A0=88=ED=8F=AC=EC=A7=80=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=ED=98=84=20-=20querydsl=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=EB=B0=8F=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EB=A0=88?= =?UTF-8?q?=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 29 +++++++++++++++ .../dto/request/PlaceFilterRequestDto.java | 13 +++++++ .../repositroy/PlaceCustomRepository.java | 13 +++++++ .../repositroy/PlaceCustomRepositoryImpl.java | 37 +++++++++++++++++++ .../place/repositroy/PlaceRepository.java | 11 ++++++ 5 files changed, 103 insertions(+) create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDto.java create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java create mode 100644 src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceRepository.java diff --git a/build.gradle b/build.gradle index 375ad6ab..98198be8 100644 --- a/build.gradle +++ b/build.gradle @@ -31,14 +31,43 @@ dependencies { //mysql connector runtimeOnly 'com.mysql:mysql-connector-j' + // queryDSL 설정 + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" + annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' // yml implementation 'org.yaml:snakeyaml:+' + } tasks.named('test') { useJUnitPlatform() } + + +// Querydsl 설정부 +// 아래 것들이 없어도 기본적인 querydsl 동작은 하나 인테리제이에서 빌드 시 발생할 문제를 예방 +def generated = 'src/main/generated' + +// querydsl QClass 파일 생성 위치를 지정 +// 원래 build 디렉토리 안에 있어서 눈에 안보였지만 꺼네서 내가 지정한 디렉토리에 꺼내옴 +// 인텔리제이 IDE와의 문제인데, 빌드 gradle 할때 스캔 영역이 달라서 중복 스캔이 발생할 수 있다. +tasks.withType(JavaCompile) { + options.getGeneratedSourceOutputDirectory().set(file(generated)) +} + +// java source set 에 querydsl QClass 위치 추가 +sourceSets { + main.java.srcDirs += [ generated ] +} + +// gradle clean 시에 QClass 디렉토리 삭제 +clean { + delete file(generated) +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDto.java new file mode 100644 index 00000000..adbafccf --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDto.java @@ -0,0 +1,13 @@ +package com.haejwo.tripcometrue.domain.place.dto.request; + +public record PlaceFilterRequestDto( + Integer stored_count, + Integer storedCount +) { + + // record는 Compact Constructor라는 기능있어, 생성자 내부의 변수에 대한 로직이 마지막으로 동작하여 변수 초기화를 한다. + public PlaceFilterRequestDto { + storedCount = stored_count; + } + +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java new file mode 100644 index 00000000..f4946c16 --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java @@ -0,0 +1,13 @@ +package com.haejwo.tripcometrue.domain.place.repositroy; + +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; +import com.haejwo.tripcometrue.domain.place.entity.Place; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +public interface PlaceCustomRepository { + + Page findPlaceWithFilter(Pageable pageable, + PlaceFilterRequestDto requestDto); + +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java new file mode 100644 index 00000000..2a3fc13a --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java @@ -0,0 +1,37 @@ +package com.haejwo.tripcometrue.domain.place.repositroy; + +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; +import com.haejwo.tripcometrue.domain.place.entity.Place; +import com.haejwo.tripcometrue.domain.place.entity.QPlace; +import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.QueryResults; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; + +public class PlaceCustomRepositoryImpl extends QuerydslRepositorySupport implements PlaceCustomRepository { + + public PlaceCustomRepositoryImpl() { + super(Place.class); + } + + @Override + public Page findPlaceWithFilter(Pageable pageable, PlaceFilterRequestDto requestDto) { + + QPlace place = QPlace.place; + BooleanBuilder booleanBuilder = new BooleanBuilder(); + + if(requestDto.storedCount() != null && requestDto.storedCount() >= 0) { + booleanBuilder.and(place.storedCount.goe(requestDto.storedCount())); + } + + QueryResults result = from(place) + .where(booleanBuilder) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetchResults(); + + return new PageImpl<>(result.getResults(), pageable, result.getTotal()); + } +} diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceRepository.java b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceRepository.java new file mode 100644 index 00000000..dda60097 --- /dev/null +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceRepository.java @@ -0,0 +1,11 @@ +package com.haejwo.tripcometrue.domain.place.repositroy; + +import com.haejwo.tripcometrue.domain.place.entity.Place; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PlaceRepository extends + JpaRepository, + PlaceCustomRepository +{ + +} From 662aadd9287e8313a333452e284f74004df2afac Mon Sep 17 00:00:00 2001 From: junmo95 Date: Wed, 3 Jan 2024 11:36:06 +0900 Subject: [PATCH 06/12] =?UTF-8?q?[feat]=20=EC=97=AC=ED=96=89=EC=A7=80=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=20=EC=9A=A9=EC=9D=B4=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=B4=20security=20=EC=98=B5=EC=85=98=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tripcometrue/global/springsecurity/SpringSecurityConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/haejwo/tripcometrue/global/springsecurity/SpringSecurityConfig.java b/src/main/java/com/haejwo/tripcometrue/global/springsecurity/SpringSecurityConfig.java index 5de3fc4a..c9e992d5 100644 --- a/src/main/java/com/haejwo/tripcometrue/global/springsecurity/SpringSecurityConfig.java +++ b/src/main/java/com/haejwo/tripcometrue/global/springsecurity/SpringSecurityConfig.java @@ -56,6 +56,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http, .requestMatchers(HttpMethod.OPTIONS, "/basket/**").permitAll() // OPTIONS 메서드에 대한 권한 허용 */ .requestMatchers(new AntPathRequestMatcher("/login/**")).permitAll() .requestMatchers(new AntPathRequestMatcher("/v1/member/signup/**")).permitAll() + .requestMatchers(new AntPathRequestMatcher("/v1/places/**")).permitAll() .anyRequest().authenticated()); http.exceptionHandling(exceptionHandling -> { From 6a9e4c09756ae2935fa690f989aa2fe62edd844a Mon Sep 17 00:00:00 2001 From: junmo95 Date: Thu, 4 Jan 2024 18:34:54 +0900 Subject: [PATCH 07/12] =?UTF-8?q?[refactor]=20dto=20=EC=88=98=EC=A0=95=20-?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9A=A9=EC=9D=84=20=EB=82=A8?= =?UTF-8?q?=EA=B2=A8=EB=91=94=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?-=20=ED=95=A8=EC=88=98=EB=AA=85=20=EC=88=98=EC=A0=95(toEntity,?= =?UTF-8?q?=20fromEntity)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/place/dto/request/PlaceRequestDto.java | 11 +---------- .../domain/place/dto/response/PlaceResponseDto.java | 12 +----------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java index 1cab45ae..32fefb63 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java @@ -1,15 +1,10 @@ package com.haejwo.tripcometrue.domain.place.dto.request; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.PropertyNamingStrategies; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.haejwo.tripcometrue.domain.place.entity.Place; import java.time.LocalTime; import lombok.Builder; -import lombok.Getter; -@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) public record PlaceRequestDto( String name, String address, @@ -18,10 +13,6 @@ public record PlaceRequestDto( @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekdayCloseTime, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendOpenTime, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendCloseTime, -// LocalTime weekdayOpenTime, -// LocalTime weekdayCloseTime, -// LocalTime weekendOpenTime, -// LocalTime weekendCloseTime, Integer storedCount, Long cityId ) { @@ -49,7 +40,7 @@ public PlaceRequestDto( this.cityId = cityId; } - public Place DtoToEntity() { + public Place toEntity() { return Place.builder() .name(this.name) .address(this.address) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java index 3a992beb..7a9b41a5 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java @@ -1,15 +1,9 @@ package com.haejwo.tripcometrue.domain.place.dto.response; import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.PropertyNamingStrategies; -import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.haejwo.tripcometrue.domain.place.entity.Place; import java.time.LocalTime; import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) public record PlaceResponseDto( Long id, String name, @@ -19,10 +13,6 @@ public record PlaceResponseDto( @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekdayCloseTime, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendOpenTime, @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm") LocalTime weekendCloseTime, -// LocalTime weekdayOpenTime, -// LocalTime weekdayCloseTime, -// LocalTime weekendOpenTime, -// LocalTime weekendCloseTime, Integer storedCount, Long cityId ) { @@ -52,7 +42,7 @@ public PlaceResponseDto( this.cityId = cityId; } - public static PlaceResponseDto DtoToEntity(Place entity) { + public static PlaceResponseDto fromEntity(Place entity) { return PlaceResponseDto.builder() .id(entity.getId()) .name(entity.getName()) From c823292a678f53543da8022a0769d78103842288 Mon Sep 17 00:00:00 2001 From: junmo95 Date: Thu, 4 Jan 2024 18:36:14 +0900 Subject: [PATCH 08/12] =?UTF-8?q?[refactor]=20update=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20-=20patch=20=3D>=20put=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD=20-=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=ED=95=A8=EC=88=98=EB=A5=BC=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EB=AA=A8=EB=93=A0=20=EA=B0=92=EC=9D=B4=20?= =?UTF-8?q?=EB=93=A4=EC=96=B4=EC=9E=88=EB=8A=94=20Dto=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EB=A1=9C=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EB=8C=80=EC=B2=B4=ED=95=98=EA=B3=A0,=20=EB=8D=94?= =?UTF-8?q?=ED=8B=B0=EC=B1=84=ED=82=B9=EC=9D=84=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/place/entity/Place.java | 36 +++++-------------- .../domain/place/service/PlaceService.java | 14 ++++---- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java b/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java index 6739b6b7..948c0042 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java @@ -51,32 +51,14 @@ public Place( } public void update(PlaceRequestDto requestDto) { - if(requestDto.name() != null) { - this.name = requestDto.name(); - } - if(requestDto.address() != null) { - this.address = requestDto.address(); - } - if(requestDto.description() != null) { - this.description = requestDto.description(); - } - if(requestDto.weekdayOpenTime() != null) { - this.weekdayOpenTime = requestDto.weekdayOpenTime(); - } - if(requestDto.weekdayCloseTime() != null) { - this.weekdayCloseTime = requestDto.weekdayCloseTime(); - } - if(requestDto.weekendOpenTime() != null) { - this.weekendOpenTime = requestDto.weekendOpenTime(); - } - if(requestDto.weekendCloseTime() != null) { - this.weekendCloseTime = requestDto.weekendCloseTime(); - } - if(requestDto.storedCount() != null) { - this.storedCount = requestDto.storedCount(); - } - if(requestDto.cityId() != null) { - this.cityId = requestDto.cityId(); - } + this.name = requestDto.name(); + this.address = requestDto.address(); + this.description = requestDto.description(); + this.weekdayOpenTime = requestDto.weekdayOpenTime(); + this.weekdayCloseTime = requestDto.weekdayCloseTime(); + this.weekendOpenTime = requestDto.weekendOpenTime(); + this.weekendCloseTime = requestDto.weekendCloseTime(); + this.storedCount = requestDto.storedCount(); + this.cityId = requestDto.cityId(); } } diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java index 6f982725..3767e459 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java @@ -23,9 +23,9 @@ public class PlaceService { @Transactional public PlaceResponseDto addPlace(PlaceRequestDto requestDto) { - Place requestPlace = requestDto.DtoToEntity(); + Place requestPlace = requestDto.toEntity(); Place savedPlace = placeRepository.save(requestPlace); - PlaceResponseDto responseDto = PlaceResponseDto.DtoToEntity(savedPlace); + PlaceResponseDto responseDto = PlaceResponseDto.fromEntity(savedPlace); return responseDto; @@ -36,17 +36,17 @@ public PlaceResponseDto findPlace(Long placeId) { Place findPlace = findPlaceById(placeId); - PlaceResponseDto responseDto = PlaceResponseDto.DtoToEntity(findPlace); + PlaceResponseDto responseDto = PlaceResponseDto.fromEntity(findPlace); return responseDto; } @Transactional(readOnly = true) - public Page findPlaces(Pageable pageable, PlaceFilterRequestDto requestDto) { + public Page findPlaces(Pageable pageable, Integer storedCount) { - Page findPlaces = placeRepository.findPlaceWithFilter(pageable, requestDto); + Page findPlaces = placeRepository.findPlaceWithFilter(pageable, storedCount); - Page result = findPlaces.map(PlaceResponseDto::DtoToEntity); + Page result = findPlaces.map(PlaceResponseDto::fromEntity); return result; @@ -57,7 +57,7 @@ public PlaceResponseDto modifyPlace(Long placeId, PlaceRequestDto requestDto) { Place place = findPlaceById(placeId); place.update(requestDto); - PlaceResponseDto responseDto = PlaceResponseDto.DtoToEntity(place); + PlaceResponseDto responseDto = PlaceResponseDto.fromEntity(place); return responseDto; } From d60927300a651b09f7b737cd27ab75f2919e2b48 Mon Sep 17 00:00:00 2001 From: junmo95 Date: Thu, 4 Jan 2024 18:38:15 +0900 Subject: [PATCH 09/12] =?UTF-8?q?[refactor]=20=ED=95=84=ED=84=B0=EB=A7=81?= =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=B0=9B=EC=95=84=EC=98=A4?= =?UTF-8?q?=EB=8A=94=20=EB=B0=A9=EB=B2=95=20=EB=B3=80=EA=B2=BD=20-=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=EC=97=90=EB=8A=94=20@ModelAttribute=20?= =?UTF-8?q?=ED=99=9C=EC=9A=A9,=20=ED=95=98=EC=A7=80=EB=A7=8C=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=EB=A7=81=20=EC=9A=94=EC=86=8C=EA=B0=80=20=EC=95=84?= =?UTF-8?q?=EC=A3=BC=20=EB=A7=8E=EC=9D=84=EA=B2=83=20=EA=B0=99=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EA=B8=B0=EC=97=90=20=EC=9A=B0=EC=84=A0=EC=9D=80=20@Re?= =?UTF-8?q?questParam=ED=86=B5=ED=95=B4=20=EA=B5=AC=ED=98=84=20-=20?= =?UTF-8?q?=EC=9C=84=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=9D=BC=20?= =?UTF-8?q?quetdsl=20=EC=BD=94=EB=93=9C=EB=8F=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../place/controller/PlaceController.java | 9 ++++--- .../repositroy/PlaceCustomRepository.java | 2 +- .../repositroy/PlaceCustomRepositoryImpl.java | 24 ++++++++++++------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java index b0073f5f..ccf61475 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; 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; @@ -57,12 +58,10 @@ public ResponseEntity> placeDetails( @GetMapping public ResponseEntity>> placeList( Pageable pageable, - @ModelAttribute PlaceFilterRequestDto requestDto + @RequestParam Integer storedCount ) { - System.out.println("requestDto : " + requestDto.toString()); - - Page placePage = placeService.findPlaces(pageable, requestDto); + Page placePage = placeService.findPlaces(pageable, storedCount); ResponseDTO responseBody = ResponseDTO.okWithData(placePage); @@ -71,7 +70,7 @@ public ResponseEntity>> placeList( .body(responseBody); } - @PatchMapping("/{placeId}") + @PutMapping("/{placeId}") public ResponseEntity> placeModify( @PathVariable Long placeId, @RequestBody PlaceRequestDto requestDto diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java index f4946c16..1ccc0a6c 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java @@ -8,6 +8,6 @@ public interface PlaceCustomRepository { Page findPlaceWithFilter(Pageable pageable, - PlaceFilterRequestDto requestDto); + Integer storedCount); } diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java index 2a3fc13a..027c3102 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java @@ -5,6 +5,8 @@ import com.haejwo.tripcometrue.domain.place.entity.QPlace; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.QueryResults; +import com.querydsl.jpa.impl.JPAQuery; +import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -17,21 +19,25 @@ public PlaceCustomRepositoryImpl() { } @Override - public Page findPlaceWithFilter(Pageable pageable, PlaceFilterRequestDto requestDto) { + public Page findPlaceWithFilter(Pageable pageable, Integer storedCount) { QPlace place = QPlace.place; BooleanBuilder booleanBuilder = new BooleanBuilder(); - if(requestDto.storedCount() != null && requestDto.storedCount() >= 0) { - booleanBuilder.and(place.storedCount.goe(requestDto.storedCount())); + if(storedCount != null && storedCount >= 0) { + booleanBuilder.and(place.storedCount.goe(storedCount)); } - QueryResults result = from(place) - .where(booleanBuilder) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .fetchResults(); + List result = from(place) + .where(booleanBuilder) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + + // 프론트의 Page 정보 필요 유무에 따라 응답 객체 List, Page 나뉨 + long total = from(place).where(booleanBuilder).fetchCount(); + + return new PageImpl<>(result, pageable, total); - return new PageImpl<>(result.getResults(), pageable, result.getTotal()); } } From 3675676769aa15e064a65e278b605c34b1a9429f Mon Sep 17 00:00:00 2001 From: junmo95 Date: Thu, 4 Jan 2024 18:39:55 +0900 Subject: [PATCH 10/12] =?UTF-8?q?[refactor]=20objectMapper=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80=20&=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20import=20=EC=A0=9C=EA=B1=B0=20-=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=EC=97=90=EB=8A=94=20=EC=8A=A4=ED=94=84?= =?UTF-8?q?=EB=A7=81=20=EB=B6=80=ED=8A=B8=EA=B0=80=20ObjectMapper=EB=A5=BC?= =?UTF-8?q?=20=EC=9E=90=EB=8F=99=20=EC=84=A4=EC=A0=95=ED=95=B4=EC=A3=BC?= =?UTF-8?q?=EB=8A=94=EB=8D=B0,=20=EC=A7=81=EC=A0=91=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=88=9C=EA=B0=84=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=ED=95=9C=20=EB=82=B4=EC=9A=A9=EB=A7=8C=20=EC=A0=81=EC=9A=A9?= =?UTF-8?q?=EB=90=98=EA=B8=B0=EC=97=90=20place=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8A=94=20LocalTime=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20-=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../place/controller/PlaceController.java | 4 ---- .../repositroy/PlaceCustomRepository.java | 1 - .../repositroy/PlaceCustomRepositoryImpl.java | 3 --- .../domain/place/service/PlaceService.java | 1 - .../tripcometrue/global/config/AppConfig.java | 18 +++++++++++------- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java index ccf61475..73c602a8 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java @@ -1,19 +1,15 @@ package com.haejwo.tripcometrue.domain.place.controller; -import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDto; import com.haejwo.tripcometrue.domain.place.service.PlaceService; import com.haejwo.tripcometrue.global.util.ResponseDTO; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java index 1ccc0a6c..79021e46 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepository.java @@ -1,6 +1,5 @@ package com.haejwo.tripcometrue.domain.place.repositroy; -import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; import com.haejwo.tripcometrue.domain.place.entity.Place; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java index 027c3102..039e4a43 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/repositroy/PlaceCustomRepositoryImpl.java @@ -1,11 +1,8 @@ package com.haejwo.tripcometrue.domain.place.repositroy; -import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; import com.haejwo.tripcometrue.domain.place.entity.Place; import com.haejwo.tripcometrue.domain.place.entity.QPlace; import com.querydsl.core.BooleanBuilder; -import com.querydsl.core.QueryResults; -import com.querydsl.jpa.impl.JPAQuery; import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java index 3767e459..fb5f992a 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java @@ -1,6 +1,5 @@ package com.haejwo.tripcometrue.domain.place.service; -import com.haejwo.tripcometrue.domain.place.dto.request.PlaceFilterRequestDto; import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDto; import com.haejwo.tripcometrue.domain.place.entity.Place; diff --git a/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java b/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java index 8783c38f..4cde1bbe 100644 --- a/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java +++ b/src/main/java/com/haejwo/tripcometrue/global/config/AppConfig.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -18,11 +19,14 @@ public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } -// @Bean -// public ObjectMapper objectMapper() { -// ObjectMapper objectMapper = new ObjectMapper(); -// // RestController에서 json 응답 시 null 값의 필드는 아예 보여주지 않도록 설정하는 부분 -// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); -// return objectMapper; -// } + @Bean + public ObjectMapper objectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + // RestController에서 json 응답 시 null 값의 필드는 아예 보여주지 않도록 설정하는 부분 + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + // LocalTime, LocalDateTime 과 같은 시간관련 클래스의 직렬화, 역직렬화 포함한 클래스 설정을 추가 + objectMapper.registerModule(new JavaTimeModule()); + + return objectMapper; + } } From 93043c9b46f35404794e3aca3fdf5ecb551623d4 Mon Sep 17 00:00:00 2001 From: junmo95 Date: Thu, 4 Jan 2024 21:05:41 +0900 Subject: [PATCH 11/12] =?UTF-8?q?[refactor]=20dto=20=EB=AA=85=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../place/controller/PlaceController.java | 30 +++++++++---------- ...estDto.java => PlaceFilterRequestDTO.java} | 4 +-- ...ceRequestDto.java => PlaceRequestDTO.java} | 4 +-- ...ResponseDto.java => PlaceResponseDTO.java} | 8 ++--- .../domain/place/service/PlaceService.java | 22 +++++++------- 5 files changed, 35 insertions(+), 33 deletions(-) rename src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/{PlaceFilterRequestDto.java => PlaceFilterRequestDTO.java} (81%) rename src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/{PlaceRequestDto.java => PlaceRequestDTO.java} (96%) rename src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/{PlaceResponseDto.java => PlaceResponseDTO.java} (92%) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java index 73c602a8..1f963443 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/controller/PlaceController.java @@ -1,7 +1,7 @@ package com.haejwo.tripcometrue.domain.place.controller; -import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; -import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDto; +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDTO; +import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDTO; import com.haejwo.tripcometrue.domain.place.service.PlaceService; import com.haejwo.tripcometrue.global.util.ResponseDTO; import lombok.RequiredArgsConstructor; @@ -26,12 +26,12 @@ public class PlaceController { private final PlaceService placeService; @PostMapping - public ResponseEntity> placeAdd( - @RequestBody PlaceRequestDto requestDto + public ResponseEntity> placeAdd( + @RequestBody PlaceRequestDTO requestDto ) { - PlaceResponseDto responseDto = placeService.addPlace(requestDto); - ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); + PlaceResponseDTO responseDto = placeService.addPlace(requestDto); + ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); return ResponseEntity .status(responseBody.getCode()) @@ -39,12 +39,12 @@ public ResponseEntity> placeAdd( } @GetMapping("/{placeId}") - public ResponseEntity> placeDetails( + public ResponseEntity> placeDetails( @PathVariable Long placeId ) { - PlaceResponseDto responseDto = placeService.findPlace(placeId); - ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); + PlaceResponseDTO responseDto = placeService.findPlace(placeId); + ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); return ResponseEntity .status(responseBody.getCode()) @@ -52,12 +52,12 @@ public ResponseEntity> placeDetails( } @GetMapping - public ResponseEntity>> placeList( + public ResponseEntity>> placeList( Pageable pageable, @RequestParam Integer storedCount ) { - Page placePage = placeService.findPlaces(pageable, storedCount); + Page placePage = placeService.findPlaces(pageable, storedCount); ResponseDTO responseBody = ResponseDTO.okWithData(placePage); @@ -67,13 +67,13 @@ public ResponseEntity>> placeList( } @PutMapping("/{placeId}") - public ResponseEntity> placeModify( + public ResponseEntity> placeModify( @PathVariable Long placeId, - @RequestBody PlaceRequestDto requestDto + @RequestBody PlaceRequestDTO requestDto ) { - PlaceResponseDto responseDto = placeService.modifyPlace(placeId, requestDto); - ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); + PlaceResponseDTO responseDto = placeService.modifyPlace(placeId, requestDto); + ResponseDTO responseBody = ResponseDTO.okWithData(responseDto); return ResponseEntity .status(responseBody.getCode()) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDTO.java similarity index 81% rename from src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDto.java rename to src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDTO.java index adbafccf..d8bd5f1c 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDto.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceFilterRequestDTO.java @@ -1,12 +1,12 @@ package com.haejwo.tripcometrue.domain.place.dto.request; -public record PlaceFilterRequestDto( +public record PlaceFilterRequestDTO( Integer stored_count, Integer storedCount ) { // record는 Compact Constructor라는 기능있어, 생성자 내부의 변수에 대한 로직이 마지막으로 동작하여 변수 초기화를 한다. - public PlaceFilterRequestDto { + public PlaceFilterRequestDTO { storedCount = stored_count; } diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDTO.java similarity index 96% rename from src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java rename to src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDTO.java index 32fefb63..38b7b89b 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDto.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/request/PlaceRequestDTO.java @@ -5,7 +5,7 @@ import java.time.LocalTime; import lombok.Builder; -public record PlaceRequestDto( +public record PlaceRequestDTO( String name, String address, String description, @@ -18,7 +18,7 @@ public record PlaceRequestDto( ) { @Builder - public PlaceRequestDto( + public PlaceRequestDTO( String name, String address, String description, diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDTO.java similarity index 92% rename from src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java rename to src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDTO.java index 7a9b41a5..c631e866 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDto.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/dto/response/PlaceResponseDTO.java @@ -4,7 +4,7 @@ import com.haejwo.tripcometrue.domain.place.entity.Place; import java.time.LocalTime; import lombok.Builder; -public record PlaceResponseDto( +public record PlaceResponseDTO( Long id, String name, String address, @@ -18,7 +18,7 @@ public record PlaceResponseDto( ) { @Builder - public PlaceResponseDto( + public PlaceResponseDTO( Long id, String name, String address, @@ -42,8 +42,8 @@ public PlaceResponseDto( this.cityId = cityId; } - public static PlaceResponseDto fromEntity(Place entity) { - return PlaceResponseDto.builder() + public static PlaceResponseDTO fromEntity(Place entity) { + return PlaceResponseDTO.builder() .id(entity.getId()) .name(entity.getName()) .address(entity.getAddress()) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java index fb5f992a..528ee1cd 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/service/PlaceService.java @@ -1,7 +1,7 @@ package com.haejwo.tripcometrue.domain.place.service; -import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; -import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDto; +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDTO; +import com.haejwo.tripcometrue.domain.place.dto.response.PlaceResponseDTO; import com.haejwo.tripcometrue.domain.place.entity.Place; import com.haejwo.tripcometrue.domain.place.exception.PlaceNotFoundException; import com.haejwo.tripcometrue.domain.place.repositroy.PlaceRepository; @@ -20,43 +20,45 @@ public class PlaceService { private final PlaceRepository placeRepository; @Transactional - public PlaceResponseDto addPlace(PlaceRequestDto requestDto) { + public PlaceResponseDTO addPlace(PlaceRequestDTO requestDto) { + System.out.println(requestDto.storedCount()); Place requestPlace = requestDto.toEntity(); Place savedPlace = placeRepository.save(requestPlace); - PlaceResponseDto responseDto = PlaceResponseDto.fromEntity(savedPlace); + System.out.println(savedPlace.getStoredCount()); + PlaceResponseDTO responseDto = PlaceResponseDTO.fromEntity(savedPlace); return responseDto; } @Transactional(readOnly = true) - public PlaceResponseDto findPlace(Long placeId) { + public PlaceResponseDTO findPlace(Long placeId) { Place findPlace = findPlaceById(placeId); - PlaceResponseDto responseDto = PlaceResponseDto.fromEntity(findPlace); + PlaceResponseDTO responseDto = PlaceResponseDTO.fromEntity(findPlace); return responseDto; } @Transactional(readOnly = true) - public Page findPlaces(Pageable pageable, Integer storedCount) { + public Page findPlaces(Pageable pageable, Integer storedCount) { Page findPlaces = placeRepository.findPlaceWithFilter(pageable, storedCount); - Page result = findPlaces.map(PlaceResponseDto::fromEntity); + Page result = findPlaces.map(PlaceResponseDTO::fromEntity); return result; } @Transactional - public PlaceResponseDto modifyPlace(Long placeId, PlaceRequestDto requestDto) { + public PlaceResponseDTO modifyPlace(Long placeId, PlaceRequestDTO requestDto) { Place place = findPlaceById(placeId); place.update(requestDto); - PlaceResponseDto responseDto = PlaceResponseDto.fromEntity(place); + PlaceResponseDTO responseDto = PlaceResponseDTO.fromEntity(place); return responseDto; } From ef12d1c8f13345c23cd4eec9b6e51888ab1cb849 Mon Sep 17 00:00:00 2001 From: junmo95 Date: Thu, 4 Jan 2024 21:07:23 +0900 Subject: [PATCH 12/12] =?UTF-8?q?[refactor]=20place=20entity=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20id=20=EB=AA=85=20=EC=88=98=EC=A0=95=20-=20null?= =?UTF-8?q?=20=EB=B6=88=EA=B0=80=20=EC=86=8D=EC=84=B1=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20-=20storedCount=20=EC=B4=88=EA=B8=B0=20=EA=B0=92=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tripcometrue/domain/place/entity/Place.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java b/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java index 948c0042..20deb3dc 100644 --- a/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java +++ b/src/main/java/com/haejwo/tripcometrue/domain/place/entity/Place.java @@ -1,11 +1,13 @@ package com.haejwo.tripcometrue.domain.place.entity; -import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDto; +import com.haejwo.tripcometrue.domain.place.dto.request.PlaceRequestDTO; import com.haejwo.tripcometrue.global.entity.BaseTimeEntity; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.PrePersist; import java.time.LocalTime; import lombok.AccessLevel; import lombok.Builder; @@ -18,9 +20,12 @@ public class Place extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "place_id") private Long id; + @Column(nullable = false) private String name; + @Column(nullable = false) private String address; private String description; private LocalTime weekdayOpenTime; @@ -32,12 +37,17 @@ public class Place extends BaseTimeEntity { // 임시 City 테이블 데이터 private Long cityId; + @PrePersist + public void prePersist() { + this.storedCount = this.storedCount == null ? 0 : storedCount; + } + @Builder public Place( Long id, String name, String address, String description, LocalTime weekdayOpenTime, LocalTime weekdayCloseTime, LocalTime weekendOpenTime, LocalTime weekendCloseTime, - Integer storedCount, Long cityId, String city) { + Integer storedCount, Long cityId) { this.id = id; this.name = name; this.address = address; @@ -50,7 +60,7 @@ public Place( this.cityId = cityId; } - public void update(PlaceRequestDto requestDto) { + public void update(PlaceRequestDTO requestDto) { this.name = requestDto.name(); this.address = requestDto.address(); this.description = requestDto.description();