diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorCode.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorCode.java index 3c8a2cb..d28b618 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorCode.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorCode.java @@ -1,5 +1,7 @@ package com.softeer5.uniro_backend.common.error; +import org.springframework.http.HttpStatus; + import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,8 +10,12 @@ public enum ErrorCode { // 길찾기 FASTEST_ROUTE_NOT_FOUND(422, "경로가 없습니다."), - SAME_START_AND_END_POINT(400, "출발지와 도착지가 같습니다."); + SAME_START_AND_END_POINT(400, "출발지와 도착지가 같습니다."), + + // 건물 노드 + BUILDING_NOT_FOUND(404, "유효한 건물을 찾을 수 없습니다."), + ; - final private int httpStatus; - final private String message; + private final int httpStatus; + private final String message; } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorResponse.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorResponse.java index 8ba8afc..8d1557a 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorResponse.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/error/ErrorResponse.java @@ -5,7 +5,7 @@ @Getter @Setter -public class ErrorResponse extends Error { +public class ErrorResponse { private int status; private String message; diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/exception/custom/BuildingNotFoundException.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/exception/custom/BuildingNotFoundException.java new file mode 100644 index 0000000..1c6e74a --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/exception/custom/BuildingNotFoundException.java @@ -0,0 +1,13 @@ +package com.softeer5.uniro_backend.common.exception.custom; + +import com.softeer5.uniro_backend.common.error.ErrorCode; +import com.softeer5.uniro_backend.common.exception.CustomException; + +import lombok.Getter; + +@Getter +public class BuildingNotFoundException extends CustomException { + public BuildingNotFoundException(String message, ErrorCode errorCode) { + super(message, errorCode); + } +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeApi.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeApi.java index 3f7b235..61e2874 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeApi.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeApi.java @@ -42,4 +42,14 @@ ResponseEntity searchBuildings( @RequestParam(value = "cursor-id", required = false) Long cursorId, @RequestParam(value = "page-size", required = false) Integer pageSize ); + + @Operation(summary = "상세 건물 노드 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "상세 건물 노드 조회 성공"), + @ApiResponse(responseCode = "400", description = "EXCEPTION(임시)", content = @Content), + }) + ResponseEntity getBuilding( + @PathVariable("univId") Long univId, + @PathVariable("nodeId") Long nodeId + ); } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeController.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeController.java index 7b3aef8..70400ca 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeController.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/controller/NodeController.java @@ -46,4 +46,14 @@ public ResponseEntity searchBuildings( return ResponseEntity.ok().body(searchBuildingResDTO); } + @Override + @GetMapping("{univId}/nodes/buildings/{nodeId}") + public ResponseEntity getBuilding( + @PathVariable("univId") Long univId, + @PathVariable("nodeId") Long nodeId) { + + GetBuildingResDTO buildingResDTO = nodeService.getBuilding(nodeId); + return ResponseEntity.ok().body(buildingResDTO); + } + } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java index afb633e..9049dc7 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/repository/BuildingRepository.java @@ -1,6 +1,7 @@ package com.softeer5.uniro_backend.node.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -20,4 +21,12 @@ public interface BuildingRepository extends JpaRepository, Build AND ST_Within(n.coordinates, ST_MakeEnvelope(:lux, :luy, :rdx, :rdy, 4326)) """) List findByUnivIdAndLevelWithNode(Long univId, int level, double lux , double luy, double rdx , double rdy); + + @Query(""" + SELECT new com.softeer5.uniro_backend.node.dto.BuildingNode(b, n) + FROM Building b + JOIN FETCH Node n ON b.nodeId = n.id + WHERE b.nodeId = :nodeId + """) + Optional findByNodeIdWithNode(Long nodeId); } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java index 27f4926..0652e1a 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/service/NodeService.java @@ -1,11 +1,14 @@ package com.softeer5.uniro_backend.node.service; import java.util.List; +import java.util.Optional; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.softeer5.uniro_backend.common.CursorPage; +import com.softeer5.uniro_backend.common.error.ErrorCode; +import com.softeer5.uniro_backend.common.exception.custom.BuildingNotFoundException; import com.softeer5.uniro_backend.node.dto.BuildingNode; import com.softeer5.uniro_backend.node.dto.GetBuildingResDTO; import com.softeer5.uniro_backend.node.dto.SearchBuildingResDTO; @@ -42,4 +45,13 @@ public SearchBuildingResDTO searchBuildings(Long univId, String name, Long curso return SearchBuildingResDTO.of(data, buildingNodes.getNextCursor(), buildingNodes.isHasNext()); } + public GetBuildingResDTO getBuilding(Long nodeId){ + Optional buildingNode = buildingRepository.findByNodeIdWithNode(nodeId); + if(buildingNode.isEmpty()){ + throw new BuildingNotFoundException("Building Not Found", ErrorCode.BUILDING_NOT_FOUND); + } + + return GetBuildingResDTO.of(buildingNode.get().getBuilding(), buildingNode.get().getNode()); + } + }