Skip to content

Commit 63bd9fa

Browse files
committed
updated controllers with error handling + used lombok data and builder + refactored integration tests
1 parent b557d2c commit 63bd9fa

File tree

13 files changed

+691
-546
lines changed

13 files changed

+691
-546
lines changed

src/main/java/org/couchbase/quickstart/springdata/controller/AirlineController.java

Lines changed: 67 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import org.couchbase.quickstart.springdata.models.Airline;
88
import org.couchbase.quickstart.springdata.services.AirlineService;
9-
import org.springframework.beans.factory.annotation.Autowired;
109
import org.springframework.data.domain.Page;
1110
import org.springframework.data.domain.PageRequest;
1211
import org.springframework.http.HttpStatus;
@@ -21,67 +20,115 @@
2120
import org.springframework.web.bind.annotation.RequestParam;
2221
import org.springframework.web.bind.annotation.RestController;
2322

23+
import com.couchbase.client.core.error.DocumentExistsException;
24+
import com.couchbase.client.core.error.DocumentNotFoundException;
25+
26+
import io.swagger.v3.oas.annotations.Operation;
27+
2428
@RestController
2529
@RequestMapping("/api/v1/airline")
2630
public class AirlineController {
2731

2832
private AirlineService airlineService;
2933

30-
@Autowired
3134
public AirlineController(AirlineService airlineService) {
3235
this.airlineService = airlineService;
3336
}
3437

35-
@PostMapping("/{id}")
36-
public ResponseEntity<Airline> createAirline(@PathVariable String id, @Valid @RequestBody Airline airline) {
37-
Airline createdAirline = airlineService.createAirline(id, airline);
38-
return new ResponseEntity<>(createdAirline, HttpStatus.CREATED);
39-
}
40-
38+
@Operation(summary = "Get an airline by ID")
4139
@GetMapping("/{id}")
4240
public ResponseEntity<Airline> getAirline(@PathVariable String id) {
43-
Optional<Airline> airline = airlineService.getAirlineById(id);
44-
return airline.map(value -> new ResponseEntity<>(value, HttpStatus.OK))
45-
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
41+
try {
42+
Optional<Airline> airline = airlineService.getAirlineById(id);
43+
return airline.map(value -> new ResponseEntity<>(value, HttpStatus.OK))
44+
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
45+
} catch (DocumentNotFoundException e) {
46+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
47+
} catch (Exception e) {
48+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
49+
}
4650
}
4751

52+
@Operation(summary = "Create an airline")
53+
@PostMapping("/{id}")
54+
public ResponseEntity<Airline> createAirline(@Valid @RequestBody Airline airline) {
55+
try {
56+
Airline newAirline = airlineService.createAirline(airline);
57+
return new ResponseEntity<>(newAirline, HttpStatus.CREATED);
58+
} catch (DocumentExistsException e) {
59+
return new ResponseEntity<>(HttpStatus.CONFLICT);
60+
} catch (Exception e) {
61+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
62+
}
63+
}
64+
65+
@Operation(summary = "Update an airline")
4866
@PutMapping("/{id}")
4967
public ResponseEntity<Airline> updateAirline(@PathVariable String id, @Valid @RequestBody Airline airline) {
50-
Airline updatedAirline = airlineService.updateAirline(id, airline);
51-
return new ResponseEntity<>(updatedAirline, HttpStatus.OK);
68+
try {
69+
Airline updatedAirline = airlineService.updateAirline(id, airline);
70+
if (updatedAirline != null) {
71+
return new ResponseEntity<>(updatedAirline, HttpStatus.OK);
72+
} else {
73+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
74+
}
75+
} catch (DocumentNotFoundException e) {
76+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
77+
} catch (Exception e) {
78+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
79+
}
5280
}
5381

82+
@Operation(summary = "Delete an airline")
5483
@DeleteMapping("/{id}")
5584
public ResponseEntity<Void> deleteAirline(@PathVariable String id) {
56-
airlineService.deleteAirline(id);
57-
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
85+
try {
86+
airlineService.deleteAirline(id);
87+
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
88+
} catch (DocumentNotFoundException e) {
89+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
90+
} catch (Exception e) {
91+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
92+
}
5893
}
5994

95+
@Operation(summary = "List all airlines")
6096
@GetMapping("/list")
6197
public ResponseEntity<Page<Airline>> listAirlines(@RequestParam(defaultValue = "0") int page,
6298
@RequestParam(defaultValue = "10") int size) {
6399
Page<Airline> airlines = airlineService.getAllAirlines(PageRequest.of(page, size));
64100
return new ResponseEntity<>(airlines, HttpStatus.OK);
65101
}
66102

103+
@Operation(summary = "List all airlines by country")
67104
@GetMapping("/country/{country}")
68105
public ResponseEntity<Page<Airline>> listAirlinesByCountry(
69106
@PathVariable String country,
70107
@RequestParam(defaultValue = "0") int page,
71108
@RequestParam(defaultValue = "10") int size) {
72-
Page<Airline> airlines = airlineService.findByCountry(country, PageRequest.of(page, size));
73-
return new ResponseEntity<>(airlines, HttpStatus.OK);
109+
try {
110+
111+
Page<Airline> airlines = airlineService.findByCountry(country, PageRequest.of(page, size));
112+
return new ResponseEntity<>(airlines, HttpStatus.OK);
113+
} catch (Exception e) {
114+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
115+
}
74116
}
75117

118+
@Operation(summary = "List all airlines by desination airport")
76119
@GetMapping("/destination/{destinationAirport}")
77120
public ResponseEntity<Page<Airline>> listAirlinesByDestinationAirport(
78121
@PathVariable String destinationAirport,
79122
@RequestParam(defaultValue = "0") int page,
80123
@RequestParam(defaultValue = "10") int size) {
81124

82-
Page<Airline> airlines = airlineService.findByDestinationAirport(destinationAirport,
83-
PageRequest.of(page, size));
125+
try {
126+
Page<Airline> airlines = airlineService.findByDestinationAirport(destinationAirport,
127+
PageRequest.of(page, size));
84128

85-
return new ResponseEntity<>(airlines, HttpStatus.OK);
129+
return new ResponseEntity<>(airlines, HttpStatus.OK);
130+
} catch (Exception e) {
131+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
132+
}
86133
}
87134
}

src/main/java/org/couchbase/quickstart/springdata/controller/AirportController.java

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import org.couchbase.quickstart.springdata.models.Airport;
88
import org.couchbase.quickstart.springdata.services.AirportService;
9-
import org.springframework.beans.factory.annotation.Autowired;
109
import org.springframework.data.domain.Page;
1110
import org.springframework.data.domain.PageRequest;
1211
import org.springframework.http.HttpStatus;
@@ -21,51 +20,100 @@
2120
import org.springframework.web.bind.annotation.RequestParam;
2221
import org.springframework.web.bind.annotation.RestController;
2322

23+
import com.couchbase.client.core.error.DocumentExistsException;
24+
import com.couchbase.client.core.error.DocumentNotFoundException;
25+
26+
import io.swagger.v3.oas.annotations.Operation;
27+
2428
@RestController
2529
@RequestMapping("/api/v1/airport")
2630
public class AirportController {
2731

28-
@Autowired
2932
private AirportService airportService;
3033

31-
@PostMapping("/{id}")
32-
public ResponseEntity<Airport> createAirport(@PathVariable String id, @Valid @RequestBody Airport airport) {
33-
Airport createdAirport = airportService.createAirport(id, airport);
34-
return new ResponseEntity<>(createdAirport, HttpStatus.CREATED);
34+
public AirportController(AirportService airportService) {
35+
this.airportService = airportService;
3536
}
3637

38+
@Operation(summary = "Get an airport by ID")
3739
@GetMapping("/{id}")
3840
public ResponseEntity<Airport> getAirport(@PathVariable String id) {
39-
Optional<Airport> airport = airportService.getAirportById(id);
40-
return airport.map(value -> new ResponseEntity<>(value, HttpStatus.OK))
41-
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
41+
try {
42+
Optional<Airport> airport = airportService.getAirportById(id);
43+
return airport.map(value -> new ResponseEntity<>(value, HttpStatus.OK))
44+
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
45+
} catch (DocumentNotFoundException e) {
46+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
47+
} catch (Exception e) {
48+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
49+
}
50+
}
51+
52+
@Operation(summary = "Create an airport")
53+
@PostMapping("/{id}")
54+
public ResponseEntity<Airport> createAirport(@PathVariable String id, @Valid @RequestBody Airport airport) {
55+
try {
56+
Airport newAirport = airportService.createAirport(airport);
57+
return new ResponseEntity<>(newAirport, HttpStatus.CREATED);
58+
} catch (DocumentExistsException e) {
59+
return new ResponseEntity<>(HttpStatus.CONFLICT);
60+
} catch (Exception e) {
61+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
62+
}
63+
4264
}
4365

66+
@Operation(summary = "Update an airport")
4467
@PutMapping("/{id}")
4568
public ResponseEntity<Airport> updateAirport(@PathVariable String id, @Valid @RequestBody Airport airport) {
46-
Airport updatedAirport = airportService.updateAirport(id, airport);
47-
return new ResponseEntity<>(updatedAirport, HttpStatus.OK);
69+
try {
70+
Airport updatedAirport = airportService.updateAirport(id, airport);
71+
if (updatedAirport != null) {
72+
return new ResponseEntity<>(updatedAirport, HttpStatus.OK);
73+
} else {
74+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
75+
}
76+
} catch (DocumentNotFoundException e) {
77+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
78+
} catch (Exception e) {
79+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
80+
}
4881
}
4982

83+
@Operation(summary = "Delete an airport")
5084
@DeleteMapping("/{id}")
5185
public ResponseEntity<Void> deleteAirport(@PathVariable String id) {
52-
airportService.deleteAirport(id);
53-
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
86+
try {
87+
airportService.deleteAirport(id);
88+
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
89+
} catch (DocumentNotFoundException e) {
90+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
91+
} catch (Exception e) {
92+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
93+
}
5494
}
5595

5696
@GetMapping("/list")
5797
public ResponseEntity<Page<Airport>> listAirports(@RequestParam(defaultValue = "0") int page,
5898
@RequestParam(defaultValue = "10") int size) {
59-
Page<Airport> airports = airportService.getAllAirports(PageRequest.of(page, size));
60-
return new ResponseEntity<>(airports, HttpStatus.OK);
99+
try {
100+
Page<Airport> airports = airportService.getAllAirports(PageRequest.of(page, size));
101+
return new ResponseEntity<>(airports, HttpStatus.OK);
102+
} catch (Exception e) {
103+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
104+
}
61105
}
62106

63107
@GetMapping("/direct-connections")
64108
public ResponseEntity<Page<Airport>> listDirectConnections(
65109
@RequestParam String airport,
66110
@RequestParam(defaultValue = "0") int page,
67111
@RequestParam(defaultValue = "10") int size) {
68-
Page<Airport> airports = airportService.getDirectConnections(airport, PageRequest.of(page, size));
69-
return new ResponseEntity<>(airports, HttpStatus.OK);
112+
try {
113+
Page<Airport> airports = airportService.getDirectConnections(airport, PageRequest.of(page, size));
114+
return new ResponseEntity<>(airports, HttpStatus.OK);
115+
} catch (Exception e) {
116+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
117+
}
70118
}
71119
}

src/main/java/org/couchbase/quickstart/springdata/controller/RouteController.java

Lines changed: 60 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import org.couchbase.quickstart.springdata.models.Route;
88
import org.couchbase.quickstart.springdata.services.RouteService;
9-
import org.springframework.beans.factory.annotation.Autowired;
109
import org.springframework.data.domain.Page;
1110
import org.springframework.data.domain.PageRequest;
1211
import org.springframework.http.HttpStatus;
@@ -21,43 +20,88 @@
2120
import org.springframework.web.bind.annotation.RequestParam;
2221
import org.springframework.web.bind.annotation.RestController;
2322

23+
import com.couchbase.client.core.error.DocumentExistsException;
24+
import com.couchbase.client.core.error.DocumentNotFoundException;
25+
26+
import io.swagger.v3.oas.annotations.Operation;
27+
2428
@RestController
2529
@RequestMapping("/api/v1/route")
2630
public class RouteController {
2731

28-
@Autowired
29-
private RouteService routeService;
32+
private final RouteService routeService;
3033

31-
@PostMapping("/{id}")
32-
public ResponseEntity<Route> createRoute(@PathVariable String id, @Valid @RequestBody Route route) {
33-
Route createdRoute = routeService.createRoute(id, route);
34-
return new ResponseEntity<>(createdRoute, HttpStatus.CREATED);
34+
public RouteController(RouteService routeService) {
35+
this.routeService = routeService;
3536
}
3637

38+
@Operation(summary = "Get a route by ID")
3739
@GetMapping("/{id}")
3840
public ResponseEntity<Route> getRoute(@PathVariable String id) {
39-
Optional<Route> route = routeService.getRouteById(id);
40-
return route.map(value -> new ResponseEntity<>(value, HttpStatus.OK))
41-
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
41+
try {
42+
Optional<Route> route = routeService.getRouteById(id);
43+
return route.map(value -> new ResponseEntity<>(value, HttpStatus.OK))
44+
.orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
45+
} catch (DocumentNotFoundException e) {
46+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
47+
} catch (Exception e) {
48+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
49+
}
50+
}
51+
52+
@Operation(summary = "Create a route")
53+
@PostMapping("/{id}")
54+
public ResponseEntity<Route> createRoute(@Valid @RequestBody Route route) {
55+
try {
56+
Route newRoute = routeService.createRoute(route);
57+
return new ResponseEntity<>(newRoute, HttpStatus.CREATED);
58+
} catch (DocumentExistsException e) {
59+
return new ResponseEntity<>(HttpStatus.CONFLICT);
60+
} catch (Exception e) {
61+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
62+
}
63+
4264
}
4365

66+
@Operation(summary = "Update a route")
4467
@PutMapping("/{id}")
4568
public ResponseEntity<Route> updateRoute(@PathVariable String id, @Valid @RequestBody Route route) {
46-
Route updatedRoute = routeService.updateRoute(id, route);
47-
return new ResponseEntity<>(updatedRoute, HttpStatus.OK);
69+
try {
70+
Route updatedRoute = routeService.updateRoute(id, route);
71+
if (updatedRoute != null) {
72+
return new ResponseEntity<>(updatedRoute, HttpStatus.OK);
73+
} else {
74+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
75+
}
76+
} catch (DocumentNotFoundException e) {
77+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
78+
} catch (Exception e) {
79+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
80+
}
4881
}
4982

83+
@Operation(summary = "Delete a route")
5084
@DeleteMapping("/{id}")
5185
public ResponseEntity<Void> deleteRoute(@PathVariable String id) {
52-
routeService.deleteRoute(id);
53-
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
86+
try {
87+
routeService.deleteRoute(id);
88+
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
89+
} catch (DocumentNotFoundException e) {
90+
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
91+
} catch (Exception e) {
92+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
93+
}
5494
}
5595

5696
@GetMapping("/list")
5797
public ResponseEntity<Page<Route>> listRoutes(@RequestParam(defaultValue = "0") int page,
5898
@RequestParam(defaultValue = "10") int size) {
59-
Page<Route> routes = routeService.getAllRoutes(PageRequest.of(page, size));
60-
return new ResponseEntity<>(routes, HttpStatus.OK);
99+
try {
100+
Page<Route> routes = routeService.getAllRoutes(PageRequest.of(page, size));
101+
return new ResponseEntity<>(routes, HttpStatus.OK);
102+
} catch (Exception e) {
103+
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
104+
}
61105
}
62106

63107
}

0 commit comments

Comments
 (0)