From daf3dfed1d6c1fd07c51ec9ac095de4693c5ccd0 Mon Sep 17 00:00:00 2001 From: BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr> Date: Thu, 23 Sep 2021 19:32:32 +0200 Subject: [PATCH] Added a mapping to retrieve stocks info. --- scripts/create-dev.sql | 4 +- .../java/fr/unistra/sil/erp/back/Config.java | 2 + .../erp/back/controller/IRetrieveStocks.java | 20 +++++++ .../api/ApiRetrieveCategoriesController.java | 1 + .../controller/api/ApiRetrieveStocks.java | 57 +++++++++++++++++++ .../sil/erp/back/db/DatabaseInterface.java | 8 +++ .../sil/erp/back/db/DatabaseSQLiteImpl.java | 32 ++++++++++- .../fr/unistra/sil/erp/back/model/Stock.java | 48 ++++++++++++++++ 8 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 src/main/java/fr/unistra/sil/erp/back/controller/IRetrieveStocks.java create mode 100644 src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveStocks.java create mode 100644 src/main/java/fr/unistra/sil/erp/back/model/Stock.java diff --git a/scripts/create-dev.sql b/scripts/create-dev.sql index ebff9cf..f73ce2f 100644 --- a/scripts/create-dev.sql +++ b/scripts/create-dev.sql @@ -89,5 +89,5 @@ INSERT INTO registry (id, dt, type, account_id, debit, credit, remarks) INSERT INTO stocks (id, item, quantity) VALUES(1, 1, 25), - VALUES(2, 2, 12), - VALUES(3, 3, 50); \ No newline at end of file + (2, 2, 12), + (3, 3, 50); \ No newline at end of file diff --git a/src/main/java/fr/unistra/sil/erp/back/Config.java b/src/main/java/fr/unistra/sil/erp/back/Config.java index 0fa1b11..dd7c053 100644 --- a/src/main/java/fr/unistra/sil/erp/back/Config.java +++ b/src/main/java/fr/unistra/sil/erp/back/Config.java @@ -22,4 +22,6 @@ public class Config { public static final String MAPPING_SUBTRANSAC = URL_PREFIX + "/submitTransaction"; + public static final String MAPPING_GETSTOCKS = URL_PREFIX + + "/retrieveStocks"; } diff --git a/src/main/java/fr/unistra/sil/erp/back/controller/IRetrieveStocks.java b/src/main/java/fr/unistra/sil/erp/back/controller/IRetrieveStocks.java new file mode 100644 index 0000000..883ba1d --- /dev/null +++ b/src/main/java/fr/unistra/sil/erp/back/controller/IRetrieveStocks.java @@ -0,0 +1,20 @@ +/* + * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B + * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html + */ +package fr.unistra.sil.erp.back.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.springframework.http.ResponseEntity; + +/** + * Interface for designing stocks access. + * @author BEAUVAIS ANTOINE + */ +public interface IRetrieveStocks { + + public ResponseEntity<Object> retrieveStocks(HttpServletRequest request, + HttpServletResponse response) throws Exception; + +} diff --git a/src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveCategoriesController.java b/src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveCategoriesController.java index fa4a767..977b42a 100644 --- a/src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveCategoriesController.java +++ b/src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveCategoriesController.java @@ -5,6 +5,7 @@ package fr.unistra.sil.erp.back.controller.api; import static fr.unistra.sil.erp.back.Config.MAPPING_GETCATEGORIES; +import static fr.unistra.sil.erp.back.Config.MAPPING_GETSTOCKS; import fr.unistra.sil.erp.back.DatabaseSystem; import fr.unistra.sil.erp.back.controller.IRetrieveCategoriesController; import fr.unistra.sil.erp.back.model.Category; diff --git a/src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveStocks.java b/src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveStocks.java new file mode 100644 index 0000000..0e47d00 --- /dev/null +++ b/src/main/java/fr/unistra/sil/erp/back/controller/api/ApiRetrieveStocks.java @@ -0,0 +1,57 @@ +/* + * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B + * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html + */ +package fr.unistra.sil.erp.back.controller.api; + +import static fr.unistra.sil.erp.back.Config.MAPPING_GETSTOCKS; +import fr.unistra.sil.erp.back.DatabaseSystem; +import fr.unistra.sil.erp.back.controller.IRetrieveStocks; +import fr.unistra.sil.erp.back.db.DatabaseConnectionException; +import fr.unistra.sil.erp.back.db.DatabaseInterface; +import fr.unistra.sil.erp.back.model.Stock; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +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.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Retrieves stocks in JSON format. + * @author BEAUVAIS ANTOINE + */ +@RestController +public class ApiRetrieveStocks implements IRetrieveStocks { + + /** + * Sends the stocks as JSON format back to the client. + * @param request the HTTP request. + * @param response the HTTP response. + * @return the response. + * @throws fr.unistra.sil.erp.back.controller.api.ApiServerErrorException + */ + @GetMapping(MAPPING_GETSTOCKS) + @Override + public ResponseEntity<Object> retrieveStocks(HttpServletRequest request, + HttpServletResponse response) throws ApiServerErrorException { + DatabaseInterface db; + try { + db = DatabaseSystem.getInstance(); + } catch (DatabaseConnectionException ex) { + Logger.getLogger(ApiRetrieveCategoriesController.class.getName()) + .log(Level.SEVERE, "Failed to connect to database.", ex); + throw new ApiServerErrorException("Database failure."); + } + + List<Stock> res = db.getStocks(); + if(res == null) + throw new ApiServerErrorException("Database failure."); + + return new ResponseEntity<>(res, HttpStatus.OK); + } + +} diff --git a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java index d9b5f58..19f0dfa 100644 --- a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java +++ b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java @@ -6,6 +6,7 @@ package fr.unistra.sil.erp.back.db; import fr.unistra.sil.erp.back.model.Category; import fr.unistra.sil.erp.back.model.Item; +import fr.unistra.sil.erp.back.model.Stock; import java.util.List; /** @@ -38,4 +39,11 @@ public interface DatabaseInterface { */ public List<Category> getCategories(); + /** + * Returns the list of all stocks. + * + * @return the list of stocks. + */ + public List<Stock> getStocks(); + } 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 a67ae65..6ba2ee9 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 @@ -6,6 +6,7 @@ package fr.unistra.sil.erp.back.db; import fr.unistra.sil.erp.back.model.Category; import fr.unistra.sil.erp.back.model.Item; +import fr.unistra.sil.erp.back.model.Stock; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; @@ -18,7 +19,7 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * + * SQLite implementation of the Database interface. * @author BEAUVAIS ANTOINE <antoine.beauvais@etu.unistra.fr> */ public class DatabaseSQLiteImpl implements DatabaseInterface { @@ -33,6 +34,11 @@ public class DatabaseSQLiteImpl implements DatabaseInterface { private static final String SQL_GETCATEGORIES = "SELECT id, name FROM categories"; + private static final String SQL_GETSTOCKS = + "SELECT s.id AS id, s.item AS item, " + + "i.name AS name, s.quantity AS quantity FROM stocks s " + + "INNER JOIN items i ON s.item = i.ref"; + private Connection conn; public DatabaseSQLiteImpl() @@ -156,5 +162,29 @@ public class DatabaseSQLiteImpl implements DatabaseInterface { return res; } + + @Override + public List<Stock> getStocks() { + ResultSet rs = this.query(SQL_GETSTOCKS); + if(rs == null) + return null; + + List<Stock> res = new ArrayList<>(); + try { + while(rs.next()) + { + Stock s = new Stock(rs.getInt("id"), + rs.getInt("item"), rs.getString("name"), + rs.getInt("quantity")); + res.add(s); + } + } catch (SQLException ex) { + Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log( + Level.SEVERE, "Failed to fetch results.", ex); + return null; + } + + return res; + } } diff --git a/src/main/java/fr/unistra/sil/erp/back/model/Stock.java b/src/main/java/fr/unistra/sil/erp/back/model/Stock.java new file mode 100644 index 0000000..05c9504 --- /dev/null +++ b/src/main/java/fr/unistra/sil/erp/back/model/Stock.java @@ -0,0 +1,48 @@ +/* + * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B + * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html + */ +package fr.unistra.sil.erp.back.model; + +/** + * Representation of a stock entry. + * @author BEAUVAIS ANTOINE + */ +public class Stock { + + private final int id; + + private final int itemId; + + private final String itemName; + + private final int quantity; + + public Stock(int id, int itemId, String itemName, int quantity) + { + this.id = id; + this.itemId = itemId; + this.itemName = itemName; + this.quantity = quantity; + } + + public int getId() + { + return this.id; + } + + public int getItemId() + { + return this.itemId; + } + + public String getItemName() + { + return this.itemName; + } + + public int getQuantity() + { + return this.quantity; + } +} -- GitLab