From 1742ee4c146e1abcc0c560fcf25c0b4cfe730c98 Mon Sep 17 00:00:00 2001 From: joethei Date: Tue, 21 May 2019 13:04:31 +0200 Subject: [PATCH] + Shopping cart database handling + documentation --- pom.xml | 2 +- src/main/java/de/hsel/itech/db/AddressDB.java | 41 ++++++- src/main/java/de/hsel/itech/db/Database.java | 9 ++ .../java/de/hsel/itech/db/ShoppingCartDB.java | 106 ++++++++++++++++++ src/main/java/de/hsel/itech/db/UserDB.java | 2 +- ...hoppingCart.java => ShoppingCartItem.java} | 3 +- src/main/resources/database.sql | 3 +- 7 files changed, 155 insertions(+), 11 deletions(-) create mode 100644 src/main/java/de/hsel/itech/db/ShoppingCartDB.java rename src/main/java/de/hsel/itech/db/pojo/{ShoppingCart.java => ShoppingCartItem.java} (88%) diff --git a/pom.xml b/pom.xml index cc3a8ab..79f2417 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ de.hsel itech - 0.1.0-SNAPSHOT + 0.5.0-SNAPSHOT war diff --git a/src/main/java/de/hsel/itech/db/AddressDB.java b/src/main/java/de/hsel/itech/db/AddressDB.java index 7c1e18a..dbe969c 100644 --- a/src/main/java/de/hsel/itech/db/AddressDB.java +++ b/src/main/java/de/hsel/itech/db/AddressDB.java @@ -14,6 +14,8 @@ import java.util.List; import java.util.Map; /** + * handles all database stuff for addresses of users. + * * @author Johannes Theiner * @version 0.1 * @since 0.5 @@ -26,6 +28,12 @@ public class AddressDB { this.database = database; } + /** + * get all addresses of specified user. + * + * @param user user to get addresses from + * @return list of users addresses + */ @NotNull public List
getAll(@NotNull User user) { Map.Entry entry = database.getResultSetsByValue(database.tableUserAddress, "user", String.valueOf(user.getId())); @@ -47,6 +55,12 @@ public class AddressDB { return list; } + /** + * get specific address. + * + * @param id address id + * @return specific address + */ @Nullable public Address get(long id) { Map.Entry entry = database.getResultSetById(database.tableAddress, id); @@ -64,6 +78,12 @@ public class AddressDB { return null; } + /** + * get user from address id. + * + * @param id address id + * @return User + */ @Nullable private User getUserFromId(long id) { Map.Entry entry = database.getResultSetByValue(database.tableUserAddress, "address", id); @@ -79,11 +99,16 @@ public class AddressDB { return null; } - + /** + * insert address into database. + * + * @param address address to insert + * @return insert count + */ public int insert(@NotNull Address address) { Connection connection = database.getConnection(); - int updateCount = 0; + int insertCount = 0; try { assert connection != null; @@ -94,21 +119,27 @@ public class AddressDB { statement.setInt(4, address.getZipCode()); statement.setString(5, address.getCity()); - updateCount += statement.executeUpdate(); + insertCount += statement.executeUpdate(); PreparedStatement relationStatement = connection.prepareStatement("INSERT INTO user_address (user, address) VALUES (?, ?)"); relationStatement.setLong(1, address.getUser().getId()); relationStatement.setLong(2, address.getId()); - updateCount += statement.executeUpdate(); + insertCount += statement.executeUpdate(); connection.close(); } catch (SQLException e) { e.printStackTrace(); } - return updateCount; + return insertCount; } + /** + * delete address from database. + * + * @param address address to delete + * @return deletion count + */ public int delete(@NotNull Address address) { return database.delete(address.getId(), database.tableUserAddress); } diff --git a/src/main/java/de/hsel/itech/db/Database.java b/src/main/java/de/hsel/itech/db/Database.java index 0fb4b6d..af3748c 100644 --- a/src/main/java/de/hsel/itech/db/Database.java +++ b/src/main/java/de/hsel/itech/db/Database.java @@ -36,6 +36,7 @@ public class Database { final String tableUser = "user"; final String tableUserAddress = "user_address"; final String tableAddress = "address"; + final String tableCartBooks = "cart_books"; private AuthorDB authorDB; private BookDB bookDB; @@ -43,6 +44,7 @@ public class Database { private PublisherDB publisherDB; private UserDB userDB; private AddressDB addressDB; + private ShoppingCartDB shoppingCartDB; private static Database instance; @@ -149,6 +151,13 @@ public class Database { return addressDB; } + @Contract + public ShoppingCartDB shoppingCart() { + if(shoppingCartDB == null) + shoppingCartDB = new ShoppingCartDB(this); + return shoppingCartDB; + } + /** diff --git a/src/main/java/de/hsel/itech/db/ShoppingCartDB.java b/src/main/java/de/hsel/itech/db/ShoppingCartDB.java new file mode 100644 index 0000000..78775dc --- /dev/null +++ b/src/main/java/de/hsel/itech/db/ShoppingCartDB.java @@ -0,0 +1,106 @@ +package de.hsel.itech.db; + +import de.hsel.itech.db.pojo.ShoppingCartItem; +import de.hsel.itech.db.pojo.User; +import org.jetbrains.annotations.NotNull; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * handles all database stuff for the shopping cart. + * + * @author Johannes Theiner + * @version 0.1 + * @since 0.5 + */ +public class ShoppingCartDB { + + private Database database; + + ShoppingCartDB(Database database) { + this.database = database; + } + + /** + * get all items from users shopping cart. + * + * @param user which users shopping cart to get. + * @return list of shopping cart items. + */ + @NotNull + public List get(@NotNull User user) { + Map.Entry entry = database.getResultSetsById(database.tableCartBooks, "user", user.getId()); + assert entry != null; + + List list = new ArrayList<>(); + + try { + ResultSet rs = entry.getKey(); + while(rs.next()) { + list.add(new ShoppingCartItem(user, database.book().get(rs.getLong("book")), rs.getInt("count"))); + } + entry.getValue().close(); + } catch (SQLException e) { + e.printStackTrace(); + } + return list; + } + + /** + * insert new item to users shopping cart. + * + * @param item item to insert + * @return insert count + */ + public int insert(@NotNull ShoppingCartItem item) { + Connection connection = database.getConnection(); + int insertCount = 0; + + try { + assert connection != null; + PreparedStatement statement = connection.prepareStatement("INSERT INTO cart_books (user, book, count) VALUES (?, ?, ?)"); + statement.setLong(1, item.getUser().getId()); + statement.setLong(2, item.getArticle().getId()); + statement.setInt(3, item.getCount()); + + insertCount += statement.executeUpdate(); + + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + + return insertCount; + } + + /** + * delete item from shopping cart. + * + * @param item item to delete + * @return deletion count + */ + public int delete(@NotNull ShoppingCartItem item) { + Connection connection = database.getConnection(); + int deleteCount = 0; + + try { + assert connection != null; + PreparedStatement statement = connection.prepareStatement("DELETE FROM cart_books WHERE user = ? AND book = ?"); + statement.setLong(1, item.getUser().getId()); + statement.setLong(2, item.getArticle().getId()); + + deleteCount += statement.executeUpdate(); + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + + return deleteCount; + } +} \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/UserDB.java b/src/main/java/de/hsel/itech/db/UserDB.java index dd562ac..36bbd15 100644 --- a/src/main/java/de/hsel/itech/db/UserDB.java +++ b/src/main/java/de/hsel/itech/db/UserDB.java @@ -63,7 +63,7 @@ public class UserDB { PreparedStatement statement = connection.prepareStatement("INSERT INTO user (name, email, password, type) values (?, ?, ?, ?)"); statement.setString(1, user.getName()); statement.setString(2, user.getEmail()); - statement.setString(3, user.getEmail()); + statement.setString(3, user.getPassword()); statement.setShort(4, user.getType()); updateCount += statement.executeUpdate(); diff --git a/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java b/src/main/java/de/hsel/itech/db/pojo/ShoppingCartItem.java similarity index 88% rename from src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java rename to src/main/java/de/hsel/itech/db/pojo/ShoppingCartItem.java index c7fd9ec..91bca48 100644 --- a/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java +++ b/src/main/java/de/hsel/itech/db/pojo/ShoppingCartItem.java @@ -16,9 +16,8 @@ import lombok.RequiredArgsConstructor; @Data @AllArgsConstructor @RequiredArgsConstructor -public class ShoppingCart { +public class ShoppingCartItem { - private long id; @NonNull private User user; @NonNull private Book article; @NonNull private int count; diff --git a/src/main/resources/database.sql b/src/main/resources/database.sql index 38d4af4..f0d0f96 100644 --- a/src/main/resources/database.sql +++ b/src/main/resources/database.sql @@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS publisher(id bigint primary key auto_increment, name CREATE TABLE IF NOT EXISTS author(id bigint primary key auto_increment, name varchar(50) unique); CREATE TABLE IF NOT EXISTS author_book(author bigint, book bigint, primary key(author, book), foreign key (author) REFERENCES author(id), foreign key (book) references book(id) on delete cascade); CREATE TABLE IF NOT EXISTS category(id bigint primary key auto_increment, name varchar(25), image varchar(11)); -CREATE TABLE IF NOT EXISTS user(id bigint primary key auto_increment, name varchar(50), email varchar(255), password binary(40), type tinyint); +CREATE TABLE IF NOT EXISTS user(id bigint primary key auto_increment, name varchar(50), email varchar(255), password binary(60), type tinyint); CREATE TABLE IF NOT EXISTS address(id bigint primary key auto_increment, name varchar(100), street varchar(100), number smallint, zipCode smallint, city varchar(50)); CREATE TABLE IF NOT EXISTS user_address(id bigint primary key auto_increment, user bigint, address bigint, foreign key (user) REFERENCES user(id), foreign key (address) references address(id) on delete cascade); CREATE TABLE IF NOT EXISTS payment_type(id bigint primary key auto_increment, name varchar(25) unique); @@ -19,5 +19,4 @@ CREATE TABLE IF NOT EXISTS payment_invoice(id bigint primary key auto_increment) CREATE TABLE IF NOT EXISTS payment_paypal(id bigint primary key auto_increment, mail varchar(255), auth varchar(255)); CREATE TABLE IF NOT EXISTS `order`(id bigint primary key auto_increment, user bigint, price bigint); CREATE TABLE IF NOT EXISTS order_book(`order` bigint, book bigint, count tinyint, primary key (`order`, book, count), foreign key (`order`) references `order`(id), foreign key (book) references `order`(id)); -CREATE TABLE IF NOT EXISTS shopping_cart(id bigint primary key auto_increment); CREATE TABLE IF NOT EXISTS cart_books(user bigint, book bigint, count tinyint, primary key(book, user), foreign key (book) REFERENCES book(id), foreign key (user) REFERENCES user(id)); \ No newline at end of file