diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiErrorHandler.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiErrorHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..baac2e559ce444e5184be6da2ff5d44e2865c464 --- /dev/null +++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiErrorHandler.java @@ -0,0 +1,30 @@ +/* + * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B + * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html + */ +package fr.unistra.sil.erp.back.api.controller; + +import fr.unistra.sil.erp.back.api.model.ErrorMessage; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * Handles API exceptions. + * @author BEAUVAIS ANTOINE + */ +@RestControllerAdvice +public class ApiErrorHandler { + + @ExceptionHandler(ApiServerErrorException.class) + public ResponseEntity<Object> handleServerError(Exception ex, + HttpServletRequest request, HttpServletResponse response) + { + return new ResponseEntity<>(new ErrorMessage(ex.getMessage()), + HttpStatus.INTERNAL_SERVER_ERROR); + } + +} diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java index 73fcd23cb26e114169c8e1617cc65ad5365a52a0..26a9d9ee29b1bf5929bebf29380e55ee3728875f 100644 --- a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java +++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java @@ -24,9 +24,10 @@ public class ApiRetrieveInfoController { /** * Returns an Item as a JSON response. * @return an Item. + * @throws fr.unistra.sil.erp.back.api.controller.ApiServerErrorException */ @GetMapping("/erp-back/api/v1/retrieveInfo") - public List<Item> retrieveInfo() + public Object retrieveInfo() throws ApiServerErrorException { DatabaseInterface db; try { @@ -34,12 +35,12 @@ public class ApiRetrieveInfoController { } catch (DatabaseConnectionException ex) { Logger.getLogger(ApiRetrieveInfoController.class.getName()).log( Level.SEVERE, "Database failure.", ex); - throw new ApiServerErrorController("Connection to database failed"); + throw new ApiServerErrorException("Failed to connect to database."); } List<Item> res = db.getAllItems(); if(res == null) - throw new ApiServerErrorController("Failed to retrieve list."); + throw new ApiServerErrorException("Failed to query info."); return res; } diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorController.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorException.java similarity index 51% rename from src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorController.java rename to src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorException.java index 882f5f27abb7d00c768aa08251dd5c2ec5c2abff..235fc9883ec845054c0d6597718c7a772368933e 100644 --- a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorController.java +++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiServerErrorException.java @@ -4,19 +4,14 @@ */ package fr.unistra.sil.erp.back.api.controller; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ResponseStatus; - /** * Returns HTTP 500 error page. * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr> */ -@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) -public class ApiServerErrorController extends RuntimeException { - - public ApiServerErrorController(String errMsg) +public class ApiServerErrorException extends Exception { + + public ApiServerErrorException(String errMsg) { super(errMsg); } - } diff --git a/src/main/java/fr/unistra/sil/erp/back/api/model/ErrorMessage.java b/src/main/java/fr/unistra/sil/erp/back/api/model/ErrorMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..b0b869bf2dd8765aedbf3b05b2a770513b76de0a --- /dev/null +++ b/src/main/java/fr/unistra/sil/erp/back/api/model/ErrorMessage.java @@ -0,0 +1,25 @@ +/* + * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B + * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html + */ +package fr.unistra.sil.erp.back.api.model; + +/** + * JSON error message. + * @author BEAUVAIS ANTOINE + */ +public class ErrorMessage { + + private final String message; + + public ErrorMessage(String message) + { + this.message = message; + } + + public String getMessage() + { + return this.message; + } + +} diff --git a/src/main/java/fr/unistra/sil/erp/back/api/model/Item.java b/src/main/java/fr/unistra/sil/erp/back/api/model/Item.java index 3657fc41a2fd0926652a667782d24c0414830d0b..6e7fb42acde0156e79be0de0ef7e311a223acbf4 100644 --- a/src/main/java/fr/unistra/sil/erp/back/api/model/Item.java +++ b/src/main/java/fr/unistra/sil/erp/back/api/model/Item.java @@ -4,6 +4,8 @@ */ package fr.unistra.sil.erp.back.api.model; +import java.math.BigDecimal; + /** * Item description. * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr> @@ -23,12 +25,12 @@ public class Item { /** * The product's regular price. */ - private final double price; + private final BigDecimal price; /** * The product's price for subscribers. */ - private final double subscriberPrice; + private final BigDecimal subscriberPrice; /** * Class constructor. @@ -37,8 +39,8 @@ public class Item { * @param price The item's price. * @param subscriberPrice The item's price for subscribers. */ - public Item(int ref, String name, double price, - double subscriberPrice) + public Item(int ref, String name, BigDecimal price, + BigDecimal subscriberPrice) { this.ref = ref; this.name = name; @@ -68,7 +70,7 @@ public class Item { * Returns the current item's price. * @return the price. */ - public double getPrice() + public BigDecimal getPrice() { return this.price; } @@ -77,7 +79,7 @@ public class Item { * Returns the current item's price for subscribers. * @return the price for subscribers. */ - public double getSubscriberPrice() + public BigDecimal getSubscriberPrice() { return this.subscriberPrice; } diff --git a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java index dfdabaf49f300476d1474c1f8c63c19c3607474e..9a00463e9661fdaf51f58cf09d06d46e2dbaa39c 100644 --- a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java +++ b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java @@ -64,8 +64,8 @@ public class DatabaseSQLiteImpl implements DatabaseInterface { while(rs.next()) { Item item = new Item(rs.getInt("ref"), rs.getString("name"), - rs.getDouble("price"), - rs.getDouble("subscriberPrice")); + rs.getBigDecimal("price"), + rs.getBigDecimal("subscriberPrice")); res.add(item); } } catch (SQLException ex) {