From ea57c94670216f718cfb477cc769af40e5e2ac3c Mon Sep 17 00:00:00 2001 From: seoyeon-jung Date: Sat, 28 Jun 2025 06:51:31 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[feat]=20#22=20-=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20?= =?UTF-8?q?response=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/PlaceListResponse.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceListResponse.java diff --git a/src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceListResponse.java b/src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceListResponse.java new file mode 100644 index 0000000..d6a9026 --- /dev/null +++ b/src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceListResponse.java @@ -0,0 +1,25 @@ +package com.kernellabs.kernellabs.presentation.dto.response; + +import com.kernellabs.kernellabs.domain.Place; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class PlaceListResponse { + + private final Long id; + private final String thumbnailUrl; + private final String name; + private final String address; + + public static PlaceListResponse from(Place place) { + return PlaceListResponse.builder() + .id(place.getId()) + .thumbnailUrl(place.getThumbnailUrl()) + .name(place.getName()) + .address(place.getAddress()) + .build(); + } + +} From e017d825c9af45b0223248d59bb32e63dc907c0a Mon Sep 17 00:00:00 2001 From: seoyeon-jung Date: Sat, 28 Jun 2025 06:51:42 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[feat]=20#22=20-=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EA=B0=9C=EB=B3=84=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20response?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/PlaceViewResponse.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceViewResponse.java diff --git a/src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceViewResponse.java b/src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceViewResponse.java new file mode 100644 index 0000000..c8d04e5 --- /dev/null +++ b/src/main/java/com/kernellabs/kernellabs/presentation/dto/response/PlaceViewResponse.java @@ -0,0 +1,34 @@ +package com.kernellabs.kernellabs.presentation.dto.response; + +import com.kernellabs.kernellabs.domain.Place; +import java.time.LocalTime; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class PlaceViewResponse { + + private final Long id; + private final String thumbnailUrl; + private final String name; + private final String address; + private final LocalTime openTime; + private final LocalTime closeTime; + private final Integer unitPrice; + private final String description; + + public static PlaceViewResponse from(Place place) { + return PlaceViewResponse.builder() + .id(place.getId()) + .thumbnailUrl(place.getThumbnailUrl()) + .name(place.getName()) + .address(place.getAddress()) + .openTime(place.getOpenTime()) + .closeTime(place.getCloseTime()) + .unitPrice(place.getUnitPrice()) + .description(place.getDescription()) + .build(); + } + +} From 5a655825dc28966185db83832cb1112c177659e4 Mon Sep 17 00:00:00 2001 From: seoyeon-jung Date: Sat, 28 Jun 2025 06:51:53 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[feat]=20#22=20-=20=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kernellabs/application/PlaceService.java | 34 +++++++++++++++++++ .../controller/PlaceController.java | 33 ++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/com/kernellabs/kernellabs/application/PlaceService.java create mode 100644 src/main/java/com/kernellabs/kernellabs/presentation/controller/PlaceController.java diff --git a/src/main/java/com/kernellabs/kernellabs/application/PlaceService.java b/src/main/java/com/kernellabs/kernellabs/application/PlaceService.java new file mode 100644 index 0000000..936515a --- /dev/null +++ b/src/main/java/com/kernellabs/kernellabs/application/PlaceService.java @@ -0,0 +1,34 @@ +package com.kernellabs.kernellabs.application; + +import com.kernellabs.kernellabs.domain.Place; +import com.kernellabs.kernellabs.global.exception.CustomException; +import com.kernellabs.kernellabs.global.exception.ErrorCode; +import com.kernellabs.kernellabs.infrastructure.repository.PlaceRepository; +import com.kernellabs.kernellabs.presentation.dto.response.PlaceListResponse; +import com.kernellabs.kernellabs.presentation.dto.response.PlaceViewResponse; +import java.util.List; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class PlaceService { + + private final PlaceRepository placeRepository; + + public List getAllPlace() { + return placeRepository.findAll().stream() + .map(PlaceListResponse::from) + .collect(Collectors.toList()); + } + + public PlaceViewResponse getPlaceDetail(Long placeId) { + Place place = placeRepository.findById(placeId) + .orElseThrow(() -> new CustomException(ErrorCode.PLACE_NOT_FOUND)); + + return PlaceViewResponse.from(place); + } +} diff --git a/src/main/java/com/kernellabs/kernellabs/presentation/controller/PlaceController.java b/src/main/java/com/kernellabs/kernellabs/presentation/controller/PlaceController.java new file mode 100644 index 0000000..e25fcc3 --- /dev/null +++ b/src/main/java/com/kernellabs/kernellabs/presentation/controller/PlaceController.java @@ -0,0 +1,33 @@ +package com.kernellabs.kernellabs.presentation.controller; + +import com.kernellabs.kernellabs.application.PlaceService; +import com.kernellabs.kernellabs.global.common.ApiResponse; +import com.kernellabs.kernellabs.presentation.dto.response.PlaceListResponse; +import com.kernellabs.kernellabs.presentation.dto.response.PlaceViewResponse; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/places") +@RequiredArgsConstructor +public class PlaceController { + + private final PlaceService placeService; + + @GetMapping("") + public ResponseEntity getAllPlaces() { + List response = placeService.getAllPlace(); + return ResponseEntity.ok(ApiResponse.success(response)); + } + + @GetMapping("/{placeId}") + public ResponseEntity> getPlace(@PathVariable Long placeId) { + PlaceViewResponse response = placeService.getPlaceDetail(placeId); + return ResponseEntity.ok(ApiResponse.success(response)); + } +}