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)); + } +} 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(); + } + +} 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(); + } + +}