Skip to content

Commit 9400206

Browse files
Amends the Generic solution to PATCH HTPP requests.
1 parent 29e3d70 commit 9400206

6 files changed

Lines changed: 35 additions & 59 deletions

File tree

src/main/java/dev/drugowick/algaworks/algafoodapi/api/controller/CityController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@ public class CityController {
2626

2727
private CityRepository cityRepository;
2828
private CityCrudService cityCrudService;
29-
private ObjectMerger<City> objectMerger;
3029

31-
public CityController(CityRepository cityRepository, CityCrudService cityCrudService, ObjectMerger<City> objectMerger) {
30+
public CityController(CityRepository cityRepository, CityCrudService cityCrudService) {
3231
this.cityRepository = cityRepository;
3332
this.cityCrudService = cityCrudService;
34-
this.objectMerger = objectMerger;
3533
}
3634

3735
@GetMapping
@@ -98,7 +96,9 @@ public ResponseEntity<?> partialUpdate(@PathVariable Long id, @RequestBody Map<S
9896
return ResponseEntity.notFound().build();
9997
}
10098

101-
cityToUpdate = objectMerger.mergeRequestBodyToGenericObject(cityMap, cityToUpdate);
99+
ObjectMerger
100+
.of(City.class)
101+
.mergeRequestBodyToGenericObject(cityMap, cityToUpdate);
102102

103103
return update(id, cityToUpdate);
104104
}

src/main/java/dev/drugowick/algaworks/algafoodapi/api/controller/CuisineController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@ public class CuisineController {
2626

2727
private CuisineRepository cuisineRepository;
2828
private CuisineCrudService cuisinesCrudService;
29-
private ObjectMerger<Cuisine> objectMerger;
3029

31-
public CuisineController(CuisineRepository cuisineRepository, CuisineCrudService cuisinesCrudService, ObjectMerger<Cuisine> objectMerger) {
30+
public CuisineController(CuisineRepository cuisineRepository, CuisineCrudService cuisinesCrudService) {
3231
this.cuisineRepository = cuisineRepository;
3332
this.cuisinesCrudService = cuisinesCrudService;
34-
this.objectMerger = objectMerger;
3533
}
3634

3735
@GetMapping
@@ -82,7 +80,9 @@ public ResponseEntity<?> partialUpdate(@PathVariable Long id, @RequestBody Map<S
8280
return ResponseEntity.notFound().build();
8381
}
8482

85-
cuisineToUpdate = objectMerger.mergeRequestBodyToGenericObject(cuisineMap, cuisineToUpdate);
83+
ObjectMerger
84+
.of(Cuisine.class)
85+
.mergeRequestBodyToGenericObject(cuisineMap, cuisineToUpdate);
8686

8787
return update(id, cuisineToUpdate);
8888
}

src/main/java/dev/drugowick/algaworks/algafoodapi/api/controller/ProvinceController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@ public class ProvinceController {
2626

2727
private ProvinceRepository provinceRepository;
2828
private ProvinceCrudService provinceCrudService;
29-
private ObjectMerger<Province> objectMerger;
3029

31-
public ProvinceController(ProvinceRepository provinceRepository, ProvinceCrudService provinceCrudService, ObjectMerger<Province> objectMerger) {
30+
public ProvinceController(ProvinceRepository provinceRepository, ProvinceCrudService provinceCrudService) {
3231
this.provinceRepository = provinceRepository;
3332
this.provinceCrudService = provinceCrudService;
34-
this.objectMerger = objectMerger;
3533
}
3634

3735
@GetMapping
@@ -88,7 +86,9 @@ public ResponseEntity<?> partialUpdate(@PathVariable Long id, @RequestBody Map<S
8886
return ResponseEntity.notFound().build();
8987
}
9088

91-
provinceToUpdate = objectMerger.mergeRequestBodyToGenericObject(provinceMap, provinceToUpdate);
89+
ObjectMerger
90+
.of(Province.class)
91+
.mergeRequestBodyToGenericObject(provinceMap, provinceToUpdate);
9292

9393
return update(id, provinceToUpdate);
9494
}

src/main/java/dev/drugowick/algaworks/algafoodapi/api/controller/RestaurantController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818
public class RestaurantController {
1919

2020
private RestaurantCrudService restaurantCrudService;
21-
private ObjectMerger<Restaurant> objectMerger;
2221

23-
public RestaurantController(RestaurantCrudService restaurantCrudService, ObjectMerger<Restaurant> objectMerger) {
22+
public RestaurantController(RestaurantCrudService restaurantCrudService) {
2423
this.restaurantCrudService = restaurantCrudService;
25-
this.objectMerger = objectMerger;
2624
}
2725

2826
@GetMapping
@@ -85,7 +83,9 @@ public ResponseEntity<?> partialUpdate(@PathVariable Long id, @RequestBody Map<S
8583
return ResponseEntity.notFound().build();
8684
}
8785

88-
restaurantToUpdate = objectMerger.mergeRequestBodyToGenericObject(restaurantMap, restaurantToUpdate);
86+
ObjectMerger
87+
.of(Restaurant.class)
88+
.mergeRequestBodyToGenericObject(restaurantMap, restaurantToUpdate);
8989

9090
return update(id, restaurantToUpdate);
9191
}

src/main/java/dev/drugowick/algaworks/algafoodapi/api/controller/utils/ObjectMerger.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,29 @@ public class ObjectMerger<T> {
1818
private ObjectMapper objectMapper;
1919
private Class<T> type;
2020

21-
public ObjectMerger(Class<T> type) {
21+
private ObjectMerger(Class<T> type) {
2222
this.objectMapper = new ObjectMapper();
2323
this.type = type;
2424
}
2525

26-
public T mergeRequestBodyToGenericObject(Map<String, Object> objectMap, T objectToUpdate) {
26+
/**
27+
* Returns a new instance of ObjectMerger<T> of the given type as parameter.
28+
*
29+
* @param type a class to be merged with a Map of <String, Object>.
30+
* @return
31+
*/
32+
public static ObjectMerger of(Class type) {
33+
return new ObjectMerger(type);
34+
}
35+
36+
/**
37+
* Updates an objectToUpdate according to data from a Map<String, Object>.
38+
*
39+
* @param objectMap a Map of <String, Object> with data to update destination object. The string values
40+
* must match fields on the destination object.
41+
* @param objectToUpdate the object to update.
42+
*/
43+
public void mergeRequestBodyToGenericObject(Map<String, Object> objectMap, T objectToUpdate) {
2744
T newObject = objectMapper.convertValue(objectMap, type);
2845

2946
objectMap.forEach((fieldProp, valueProp) -> {
@@ -34,7 +51,5 @@ public T mergeRequestBodyToGenericObject(Map<String, Object> objectMap, T object
3451

3552
ReflectionUtils.setField(field, objectToUpdate, newValue);
3653
});
37-
38-
return objectToUpdate;
3954
}
4055
}

src/main/java/dev/drugowick/algaworks/algafoodapi/config/ObjectMergerConfig.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

0 commit comments

Comments
 (0)