Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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<PlaceListResponse> 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);
}
}
Original file line number Diff line number Diff line change
@@ -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<PlaceListResponse> response = placeService.getAllPlace();
return ResponseEntity.ok(ApiResponse.success(response));
}

@GetMapping("/{placeId}")
public ResponseEntity<ApiResponse<PlaceViewResponse>> getPlace(@PathVariable Long placeId) {
PlaceViewResponse response = placeService.getPlaceDetail(placeId);
return ResponseEntity.ok(ApiResponse.success(response));
}
}
Original file line number Diff line number Diff line change
@@ -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();
}

}
Original file line number Diff line number Diff line change
@@ -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();
}

}