diff --git a/mysql/CreateDB.sql b/mysql/CreateDB.sql index 474e80c..38fae84 100644 --- a/mysql/CreateDB.sql +++ b/mysql/CreateDB.sql @@ -12,10 +12,12 @@ CREATE TABLE Game ( description text DEFAULT(""), shortDescription text DEFAULT(""), releaseDate date DEFAULT("1999-09-09"), - state ENUM("Released", "Beta", "Alpha", "Coming_soon", "Unlisted") NOT NULL DEFAULT("Coming_soon"), + state ENUM("Released", "Beta", "Alpha", "Unlisted") NOT NULL DEFAULT("Alpha"), pegi int NOT NULL DEFAULT(18), publisher varchar(30) NOT NULL DEFAULT("Microsoft"), - primary key(id) + primary key(id), + constraint number_price_game + check(price >= 0 and price <= 1000) ); CREATE TABLE Category ( @@ -95,7 +97,9 @@ CREATE TABLE Purchase ( CONSTRAINT usernameConsPurchase foreign key (username) references User (username), UNIQUE (gameId, username), -- TEST: IF WORK - primary key (id) + primary key (id), + constraint number_price_purchase + check(price >= 0 and price <= 1000) ); CREATE TABLE Review ( diff --git a/src/main/java/control/BaseServlet.java b/src/main/java/control/BaseServlet.java index 406ad94..acf2483 100644 --- a/src/main/java/control/BaseServlet.java +++ b/src/main/java/control/BaseServlet.java @@ -51,13 +51,10 @@ protected boolean validParameters(HttpServletRequest request, HttpServletRespons return true; } - protected void showError(HttpServletRequest request, HttpServletResponse response, String message, String path) { + protected void showError(HttpServletRequest request, HttpServletResponse response, String message, String path) throws ServletException, IOException { request.setAttribute("logError", message); RequestDispatcher rs = request.getRequestDispatcher(path); - try { - rs.forward(request, response); - } catch (ServletException | IOException e) { - //AAAAAAAA - } + + rs.forward(request, response); } } diff --git a/src/main/java/control/DeleteFromCartServlet.java b/src/main/java/control/DeleteFromCartServlet.java index 7f48e71..f659da3 100644 --- a/src/main/java/control/DeleteFromCartServlet.java +++ b/src/main/java/control/DeleteFromCartServlet.java @@ -20,7 +20,7 @@ import model.Cart; import model.Interested; import model.User; - +import utility.BackendException; import utility.InvalidParameters; @WebServlet("/DeleteFromCartServlet") @@ -70,7 +70,7 @@ protected synchronized void doGet(HttpServletRequest request, HttpServletRespons try { interestedDAO.removeInterest(interested); } catch (SQLException e) { - e.printStackTrace(); + throw new BackendException(); } //Add interest to the database } diff --git a/src/main/java/dao/GameDAO.java b/src/main/java/dao/GameDAO.java index 0f45f83..a431dbd 100644 --- a/src/main/java/dao/GameDAO.java +++ b/src/main/java/dao/GameDAO.java @@ -86,6 +86,10 @@ public void updateGame (Game game) throws SQLException { } } + private static final String COUNTGAMEQUERY = "SELECT Count(DISTINCT id) as count" + + " FROM Game as G, Belongs as B, Category as C " + + "WHERE G.id = B.gameId AND C.name = B.categoryName AND C.name in "; + public int countGames(List categories, int maxPrice, int pegi, String searchText, boolean unListed) throws SQLException { int size = 0; @@ -110,17 +114,13 @@ public int countGames(List categories, int maxPrice, int pegi, String //Construct query string //Construct query - String query = "SELECT Count(DISTINCT id) as count" - + " FROM Game as G, Belongs as B, Category as C " - + "WHERE G.id = B.gameId AND C.name = B.categoryName AND C.name in " + String query = COUNTGAMEQUERY + categoriesToSearch + "AND G.price <= ? AND " + "G.pegi <= ? AND INSTR(G.name, ?) > 0 "; if(! unListed) - query = "SELECT Count(DISTINCT id) as count" - + " FROM Game as G, Belongs as B, Category as C " - + "WHERE G.id = B.gameId AND C.name = B.categoryName AND C.name in " + query = COUNTGAMEQUERY + categoriesToSearch + "AND G.price <= ? AND " + "G.state != 'unlisted' AND " @@ -158,6 +158,10 @@ public int countGames(List categories, int maxPrice, int pegi, String return size; } + private static final String RETRIEVEGAMEQUERY = "SELECT DISTINCT id, price, G.name, description, shortDescription, releaseDate, state, pegi, publisher" + + " FROM Game as G, Belongs as B, Category as C " + + "WHERE G.id = B.gameId AND C.name = B.categoryName AND C.name in "; + public List retrieveGames(List categories, int maxPrice, int pegi, String searchText, String order, int limit, int offset, boolean unListed) throws SQLException { List games = new ArrayList<>(); @@ -182,9 +186,7 @@ public List retrieveGames(List categories, int maxPrice, int peg //Construct query string //Construct query - String query = "SELECT DISTINCT id, price, G.name, description, shortDescription, releaseDate, state, pegi, publisher" - + " FROM Game as G, Belongs as B, Category as C " - + "WHERE G.id = B.gameId AND C.name = B.categoryName AND C.name in " + String query = RETRIEVEGAMEQUERY + categoriesToSearch + "AND G.price <= ? AND " + "G.pegi <= ? AND INSTR(G.name, ?) > 0 " @@ -192,9 +194,7 @@ public List retrieveGames(List categories, int maxPrice, int peg + " LIMIT ? OFFSET ?"; if(! unListed) { - query = "SELECT DISTINCT id, price, G.name, description, shortDescription, releaseDate, state, pegi, publisher" - + " FROM Game as G, Belongs as B, Category as C " - + "WHERE G.id = B.gameId AND C.name = B.categoryName AND C.name in " + query = RETRIEVEGAMEQUERY + categoriesToSearch + "AND G.price <= ? AND " + "G.pegi <= ? AND INSTR(G.name, ?) > 0 " diff --git a/src/main/java/dao/ImageDAO.java b/src/main/java/dao/ImageDAO.java index 1cbd333..55ccbf2 100644 --- a/src/main/java/dao/ImageDAO.java +++ b/src/main/java/dao/ImageDAO.java @@ -17,7 +17,7 @@ public ImageDAO(DataSource ds) { super(ds); } - public synchronized Image getImageFromID(String Id) throws SQLException { + public synchronized Image getImageFromID(String id) throws SQLException { Image image = null; @@ -28,7 +28,7 @@ public synchronized Image getImageFromID(String Id) throws SQLException { //Retrieve connection and make prepared statement //Create query - ps.setString(1, Id); + ps.setString(1, id); //Create query //Execute query @@ -40,7 +40,7 @@ public synchronized Image getImageFromID(String Id) throws SQLException { //Create the image object image = new Image(); - image.setId(Id); + image.setId(id); image.setAltText(rs.getString("alt")); byte[] bytes = rs.getBytes("raw"); image.setBytes(bytes); diff --git a/src/main/java/model/Game.java b/src/main/java/model/Game.java index 3690a11..de59220 100644 --- a/src/main/java/model/Game.java +++ b/src/main/java/model/Game.java @@ -88,7 +88,6 @@ public enum State{ RELEASED("Released"), BETA("Beta"), ALPHA("Alpha"), - COMING_SOON("Coming_soon"), UNLISTED("Unlisted"); private String value; diff --git a/src/main/webapp/CSS/CartStyle.css b/src/main/webapp/CSS/CartStyle.css index 97ac7d7..10b1b66 100644 --- a/src/main/webapp/CSS/CartStyle.css +++ b/src/main/webapp/CSS/CartStyle.css @@ -12,5 +12,4 @@ p.gamePrice span.removeButton{ #emptyCartButton{ font-size: 12px; - float:right; } \ No newline at end of file diff --git a/src/main/webapp/Cart.jsp b/src/main/webapp/Cart.jsp index 3941d66..afc950c 100644 --- a/src/main/webapp/Cart.jsp +++ b/src/main/webapp/Cart.jsp @@ -12,7 +12,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Cart diff --git a/src/main/webapp/Catalog.jsp b/src/main/webapp/Catalog.jsp index 6f26537..c0116d7 100644 --- a/src/main/webapp/Catalog.jsp +++ b/src/main/webapp/Catalog.jsp @@ -10,7 +10,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> diff --git a/src/main/webapp/PersonalGamePage.jsp b/src/main/webapp/PersonalGamePage.jsp index 1e35f93..ab094f4 100644 --- a/src/main/webapp/PersonalGamePage.jsp +++ b/src/main/webapp/PersonalGamePage.jsp @@ -13,7 +13,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Personal Game Page diff --git a/src/main/webapp/Register.jsp b/src/main/webapp/Register.jsp index 34e1679..1668568 100644 --- a/src/main/webapp/Register.jsp +++ b/src/main/webapp/Register.jsp @@ -11,7 +11,8 @@ import="org.owasp.encoder.Encode" %> + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Sign up to Gaming World diff --git a/src/main/webapp/Scripts/CartScript.js b/src/main/webapp/Scripts/CartScript.js index 3ac8acb..d41b9d6 100644 --- a/src/main/webapp/Scripts/CartScript.js +++ b/src/main/webapp/Scripts/CartScript.js @@ -6,7 +6,7 @@ let USDollar = new Intl.NumberFormat('en-US', { //when document is ready window.addEventListener('load', function () { //format prices - classes = document.getElementsByClassName("price") + let classes = document.getElementsByClassName("price") for( i = 0; i 0 ) { $('#gameListSection').append("
") let pageSize = 10; diff --git a/src/main/webapp/Scripts/GameLibrary.js b/src/main/webapp/Scripts/GameLibrary.js index 7faf8b4..7ef35b1 100644 --- a/src/main/webapp/Scripts/GameLibrary.js +++ b/src/main/webapp/Scripts/GameLibrary.js @@ -7,8 +7,8 @@ let USDollar = new Intl.NumberFormat('en-US', { $(document).ready(function() { //format prices - var classes = document.getElementsByClassName("price") - for(var i = 0; i < classes.length; i++){ + let classes = document.getElementsByClassName("price") + for(let i = 0; i < classes.length; i++){ classes[i].innerHTML = USDollar.format(classes[i].innerHTML/100); } //format prices diff --git a/src/main/webapp/Scripts/PersonalGamePageScript.js b/src/main/webapp/Scripts/PersonalGamePageScript.js index d20f1f8..e9760e6 100644 --- a/src/main/webapp/Scripts/PersonalGamePageScript.js +++ b/src/main/webapp/Scripts/PersonalGamePageScript.js @@ -10,15 +10,15 @@ function formatPrice(price) { //Convert price of game in dollars $(document).ready(function() { - var stringPrice = document.getElementById("buyButton").innerHTML; + let stringPrice = document.getElementById("buyButton").innerHTML; document.getElementById("buyButton").innerHTML = formatPrice(stringPrice); }); //Convert price of game in dollars //Function to change schede requirement function changeSchedeReq(id) { - schedes = document.getElementsByClassName("reqSchede"); - for(schede in schedes) { + let schedes = document.getElementsByClassName("reqSchede"); + for(let schede in schedes) { schedes[schede].style = "display: none"; } @@ -32,7 +32,7 @@ function addToCart(id) { $.get("/GamingWorldShop/AddToCartServlet?gameId="+id+"&category=cart"); - str = $('#cartItemCount').html(); + let str = $('#cartItemCount').html(); str = str.replace(/\s/g, ''); if(str == "") { diff --git a/src/main/webapp/Scripts/Purchase.js b/src/main/webapp/Scripts/Purchase.js index 5bdf023..ce2e7b3 100644 --- a/src/main/webapp/Scripts/Purchase.js +++ b/src/main/webapp/Scripts/Purchase.js @@ -1,10 +1,11 @@ var errorMessages = { - fname: "The name can contain only characters", + fname: "The name can contain only characters separeted by a space", state: "The state is a pair of char", zip: "ZipCode is a number of 5 digit", - cname: "The name on card can contain only characters", + cname: "The name on card can contain only characters separeted by a spaces", cvv: "CVV is a number of 3 digit", - ccnum: "Card number follow this pattern: dddd-dddd-dddd-dddd" + ccnum: "Card number follow this pattern: dddd-dddd-dddd-dddd", + email: "Email must follow this pattern: name@domain.com" } //Function to check validity of a field @@ -31,7 +32,7 @@ function checkField(field) { function checkForm(e) { //Check if all the values of the fields are valid - for(f in errorMessages) { + for(let f in errorMessages) { let i = f; //In case the field hasn't a valid value if(! checkField(i)) { @@ -53,7 +54,7 @@ function checkForm(e) { var oldLength = 0; function assistCardNumber() { - textContent = document.getElementById("ccnum").value; + let textContent = document.getElementById("ccnum").value; if(oldLength < textContent.length) { if(textContent.length == 4 || textContent.length == 9 || textContent.length == 14) diff --git a/src/main/webapp/Scripts/PurchaseListScript.js b/src/main/webapp/Scripts/PurchaseListScript.js index ebb7c3a..9d2b01b 100644 --- a/src/main/webapp/Scripts/PurchaseListScript.js +++ b/src/main/webapp/Scripts/PurchaseListScript.js @@ -20,12 +20,11 @@ $(document).ready(function() { //Function to update the page function update() { //Retrieve parameter from the form - var data = $("form").serializeArray(); - console.log(data); + let data = $("form").serializeArray(); //Retrieve parameter from the form //Retrieve purchases from the db - var url="/GamingWorldShop/admin/SearchPurchasesServlet"; + let url="/GamingWorldShop/admin/SearchPurchasesServlet"; $.get(url, data, function buildTable(responseData) { $('table tbody').empty(); diff --git a/src/main/webapp/Scripts/RegisterScript.js b/src/main/webapp/Scripts/RegisterScript.js index 5ae9936..9500b87 100644 --- a/src/main/webapp/Scripts/RegisterScript.js +++ b/src/main/webapp/Scripts/RegisterScript.js @@ -10,7 +10,7 @@ function validateFormElem(formElem, span, errorMessage) { if(formElem.checkValidity()){ //Remove error for pattern mismatching - var doc = new DOMParser().parseFromString(span.innerHTML, "text/html") + let doc = new DOMParser().parseFromString(span.innerHTML, "text/html") formElem.classList.remove("error"); if(errorMessage != null && doc.documentElement.textContent == errorMessage) { formElem.classList.remove("error"); diff --git a/src/main/webapp/admin/PurchasesList.jsp b/src/main/webapp/admin/PurchasesList.jsp index d4c7ec0..03073be 100644 --- a/src/main/webapp/admin/PurchasesList.jsp +++ b/src/main/webapp/admin/PurchasesList.jsp @@ -11,7 +11,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Purchase diff --git a/src/main/webapp/admin/UpdateGame.jsp b/src/main/webapp/admin/UpdateGame.jsp index 823f183..ea6a159 100644 --- a/src/main/webapp/admin/UpdateGame.jsp +++ b/src/main/webapp/admin/UpdateGame.jsp @@ -10,7 +10,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> @@ -50,11 +51,11 @@ Description:
- Short description:
+ Short description:
Price: $ - min="0" max="100000000" step="0.01" id=price name="price" required onchange="convertToDecimal(this)" /> + min="0" max="1000" step="0.01" id=price name="price" required onchange="convertToDecimal(this)" />
State:
- Short description:
+ Short description:
Price: $ - +
State:
diff --git a/src/main/webapp/user/GameLibrary.jsp b/src/main/webapp/user/GameLibrary.jsp index c3a3b8d..033294d 100644 --- a/src/main/webapp/user/GameLibrary.jsp +++ b/src/main/webapp/user/GameLibrary.jsp @@ -13,7 +13,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Game Library diff --git a/src/main/webapp/user/Purchase.jsp b/src/main/webapp/user/Purchase.jsp index 0db11cd..bf79666 100644 --- a/src/main/webapp/user/Purchase.jsp +++ b/src/main/webapp/user/Purchase.jsp @@ -12,7 +12,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Purchase page @@ -23,8 +24,8 @@ <% String servletToCall = (String)request.getAttribute("servletToCall"); - if(servletToCall == null) - servletToCall = "PurchaseFromCartServlet?category=cart"; +/* if(servletToCall == null) + servletToCall = "PurchaseFromCartServlet?category=cart"; */ %>
@@ -38,9 +39,10 @@

Billing Address

+ Email
+ id="cname" required name="cardname" pattern=^[a-zA-Z]+\s*[a-zA-Z]+$ placeholder="John More Doe"> diff --git a/src/main/webapp/user/UpdateCredentials.jsp b/src/main/webapp/user/UpdateCredentials.jsp index ad5f430..6c6581d 100644 --- a/src/main/webapp/user/UpdateCredentials.jsp +++ b/src/main/webapp/user/UpdateCredentials.jsp @@ -11,7 +11,8 @@ + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Update credentials diff --git a/src/main/webapp/user/Wishlist.jsp b/src/main/webapp/user/Wishlist.jsp index f02a26d..830b9cf 100644 --- a/src/main/webapp/user/Wishlist.jsp +++ b/src/main/webapp/user/Wishlist.jsp @@ -12,10 +12,11 @@ - + + integrity = "sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==" + crossorigin="anonymous"> Wishlist @@ -50,7 +51,7 @@ >Remove

- ><%=currentGame.getName()%> + ><%=currentGame.getName()%>