UniversalRoutingController.java
package com.soen390.backend.controller;
import com.soen390.backend.exception.GoogleMapsDirectionEmptyException;
import com.soen390.backend.exception.GoogleMapsDirectionsApiException;
import com.soen390.backend.object.UniversalDirectionResponse;
import com.soen390.backend.service.UniversalRoutingService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("/api/directions/universal")
public class UniversalRoutingController {
private static final String ERR_KEY = "error";
private final UniversalRoutingService universalRoutingService;
public UniversalRoutingController(UniversalRoutingService universalRoutingService) {
this.universalRoutingService = universalRoutingService;
}
@GetMapping
public ResponseEntity<Object> getUniversalRoute(
@RequestParam String startBuilding,
@RequestParam String startRoom,
@RequestParam String startFloor,
@RequestParam String endBuilding,
@RequestParam String endRoom,
@RequestParam String endFloor,
@RequestParam(defaultValue = "false") boolean avoidStairs) {
try {
UniversalDirectionResponse response = universalRoutingService.getCompleteRoute(
startBuilding, startRoom, startFloor,
endBuilding, endRoom, endFloor, avoidStairs);
return ResponseEntity.ok(response);
} catch (GoogleMapsDirectionEmptyException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(Map.of(ERR_KEY, e.getMessage()));
} catch (GoogleMapsDirectionsApiException e) {
return ResponseEntity.status(HttpStatus.BAD_GATEWAY).body(Map.of(ERR_KEY, e.getMessage()));
} catch (Exception e) {
return ResponseEntity.internalServerError().body(Map.of(
ERR_KEY, e.getMessage() != null ? e.getMessage() : "Universal routing failed"));
}
}
}