diff --git a/.env.xmpl b/.env.xmpl index 349acf6d8e19ce551b4aa87e50705d168fc0760c..62ecec38d1ed0b8bd0c7725297d5938f16e7d01a 100644 --- a/.env.xmpl +++ b/.env.xmpl @@ -1,3 +1,3 @@ -DB_URL=jdbc:mysql://mysql:3306/tocosoap +DB_URL=jdbc:mysql://localhost:3306/tocosoap DB_USERNAME=toco DB_PASSWORD=toco \ No newline at end of file diff --git a/db/tocosoap.sql b/db/tocosoap.sql index 98d40c79696d34370afa08c57a35ea633e209359..4faaedbc14c78bbcf0b8a47eb547a7e68492d7b7 100644 --- a/db/tocosoap.sql +++ b/db/tocosoap.sql @@ -43,6 +43,15 @@ INSERT INTO `api` (`api_key`) VALUES ('toco_rest'), ('toco_php'); +CREATE TABLE `voucher`( + `vid` int(11) NOT NULL AUTO_INCREMENT, + `code` varchar(255) NOT NULL, + `user_id` int NOT NULL, + `amount` int NOT NULL, + `timestamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`vid`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + diff --git a/docker-compose.yml b/docker-compose.yml index 64efb8a91de5d097c3ebf046fa739a310ec832dd..8d11b58ff5d05c3a848716449f31c7566020ea98 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,16 +7,16 @@ services: - "./db:/docker-entrypoint-initdb.d" environment: MYSQL_ROOT_PASSWORD: root - MYSQL_DATABASE: toco_soap + MYSQL_DATABASE: tocosoap MYSQL_USER: toco MYSQL_PASSWORD: toco - toco-soap: - build: - dockerfile: Dockerfile - context: . - ports: - - "8080:8080" - depends_on: - - toco-soap-db +# toco-soap: +# build: +# dockerfile: Dockerfile +# context: . +# ports: +# - "8080:8080" +# depends_on: +# - toco-soap-db diff --git a/dockerfile b/dockerfile index f46acab1952d6c2840e399614bd41455371a3fc8..1e8e49a088f825130874f72c7ae2146f352e2b5d 100644 --- a/dockerfile +++ b/dockerfile @@ -1,15 +1,15 @@ FROM mysql/mysql-server:8.0.23 -COPY db/toco_soap.sql /docker-entrypoint-initdb.d/ - -FROM maven:3.8-openjdk-11-slim - -WORKDIR /app - -COPY src ./src -COPY pom.xml . -COPY .env . -COPY target ./target - -RUN mvn clean package - -CMD ["mvn", "exec:java"] \ No newline at end of file +COPY db/tocosoap.sql /docker-entrypoint-initdb.d/ + +#FROM maven:3.8-openjdk-11-slim +# +#WORKDIR /app +# +#COPY src ./src +#COPY pom.xml . +#COPY .env . +#COPY target ./target +# +#RUN mvn clean package +# +#CMD ["mvn", "exec:java"] \ No newline at end of file diff --git a/src/main/java/org/toco/entity/voucher_entity.java b/src/main/java/org/toco/entity/voucher_entity.java new file mode 100644 index 0000000000000000000000000000000000000000..f786a85be6f1ced70eecfa17c1fd08d09f23f9fe --- /dev/null +++ b/src/main/java/org/toco/entity/voucher_entity.java @@ -0,0 +1,15 @@ +package org.toco.entity; +import lombok.Data; + +@Data +public class voucher_entity { + private String code; + private Integer user_id; + private Integer amount; + + public voucher_entity(String code, Integer user_id, Integer amount) { + this.code = code; + this.user_id = user_id; + this.amount = amount; + } +} diff --git a/src/main/java/org/toco/model/voucher_model.java b/src/main/java/org/toco/model/voucher_model.java new file mode 100644 index 0000000000000000000000000000000000000000..4f5937a4eeeddb8d5d96f9fcddde046b64a6e78d --- /dev/null +++ b/src/main/java/org/toco/model/voucher_model.java @@ -0,0 +1,97 @@ +package org.toco.model; + +import java.sql.*; + +import org.toco.core.connector; +import org.toco.entity.voucher_entity; + +public class voucher_model { + public void insert (voucher_entity voucher_entity) { + String sql = "INSERT INTO voucher (code, user_id, amount) VALUES (?, ?, ?)"; + try (Connection connection = connector.connect() ; + PreparedStatement command = connection.prepareStatement(sql)) { + command.setString(1, voucher_entity.getCode()); + command.setInt(2, voucher_entity.getUser_id()); + command.setInt(3, voucher_entity.getAmount()); + command.execute(); + } catch (SQLException exception) { + throw new RuntimeException("Error when inserting", exception); + } + } + + public voucher_entity [] getAllVouchers () { + String sql = "SELECT * FROM voucher"; + try (Connection connection = connector.connect() ; + PreparedStatement command = connection.prepareStatement(sql)) { + ResultSet result = command.executeQuery(); + voucher_entity [] voucher_entity = new voucher_entity[getAllCount()]; + int i = 0; + while (result.next()) { + voucher_entity[i] = new voucher_entity(result.getString("code"), result.getInt("user_id"), result.getInt("amount")); + i++; + } + return voucher_entity; + } catch (SQLException exception) { + throw new RuntimeException("Error when inserting", exception); + } + } + + public voucher_entity[] getSpecifiedVoucher(String code){ + String sql = "SELECT * FROM voucher WHERE code = ?"; + try (Connection connection = connector.connect() ; + PreparedStatement command = connection.prepareStatement(sql)) { + command.setString(1, code); + ResultSet result = command.executeQuery(); + voucher_entity [] voucher_entity = new voucher_entity[getSpecifiedCount(code)]; + int i = 0; + while (result.next()) { + voucher_entity[i] = new voucher_entity(result.getString("code"), result.getInt("user_id"), result.getInt("amount")); + i++; + } + return voucher_entity; + } catch (SQLException exception) { + throw new RuntimeException("Error when inserting", exception); + } + } + + public Integer getSpecifiedCount(String code){ + String sql = "SELECT COUNT(*) FROM voucher WHERE code = ?"; + try (Connection connection = connector.connect() ; + PreparedStatement command = connection.prepareStatement(sql)) { + command.setString(1, code); + ResultSet result = command.executeQuery(); + if (result.next()) { + return result.getInt(1); + } + else{ + return 0; + } + } catch (SQLException exception) { + throw new RuntimeException("Error when inserting", exception); + } + } + + public Integer getAllCount(){ + String sql = "SELECT COUNT(*) FROM voucher"; + try (Connection connection = connector.connect() ; + PreparedStatement command = connection.prepareStatement(sql)) { + ResultSet result = command.executeQuery(); + if (result.next()) { + return result.getInt(1); + } + else{ + return 0; + } + } catch (SQLException exception) { + throw new RuntimeException("Error when inserting", exception); + } + } + + + + + + + + +} diff --git a/src/main/java/org/toco/service/toco_service.java b/src/main/java/org/toco/service/toco_service.java index 30ad53f216302ef3f5b44944d3f38685912fa8e6..f3d82ce7f110fac14e6aa4252778ea0a339f09f7 100644 --- a/src/main/java/org/toco/service/toco_service.java +++ b/src/main/java/org/toco/service/toco_service.java @@ -36,4 +36,24 @@ public interface toco_service { @WebParam(name = "user_id") Integer user_id ); + @WebMethod + public String useVoucher( + @WebParam(name = "code") String code, + @WebParam(name = "user_id") Integer user_id, + @WebParam(name = "amount") Integer amount + + ); + + @WebMethod + public String[] getSpecifiedVouchers( + @WebParam(name = "code") String code + ); + + @WebMethod + public String[] getAllVouchers( + + ); + + + } diff --git a/src/main/java/org/toco/service/toco_service_impl.java b/src/main/java/org/toco/service/toco_service_impl.java index a1df6c149d4caeed539a49dd4dc5851fecb1afed..c4277e61b1f0621104fe768a42723ca08ed92689 100644 --- a/src/main/java/org/toco/service/toco_service_impl.java +++ b/src/main/java/org/toco/service/toco_service_impl.java @@ -105,6 +105,66 @@ public class toco_service_impl implements toco_service { } } + @Override + public String useVoucher(String voucher, Integer user_id, Integer amount) { + if(validateApiKey()){ + voucher_model voucherModel = new voucher_model(); + userGems_model userGemsModel = new userGems_model(); + transaction_model transactionModel = new transaction_model(); + voucher_entity voucherEntity = new voucher_entity(voucher,user_id,amount); + voucherModel.insert(voucherEntity); + transactionModel.insert(new transaction_entity(user_id, amount, "voucher", "accepted", "0")); + if (userGemsModel.checkUser(user_id)) { + Integer currentGems = userGemsModel.getUserGems(user_id); + userGemsModel.update(new userGems_Entity(user_id, currentGems + amount)); + } else { + userGemsModel.insert(new userGems_Entity(user_id, amount)); + } + addLoggging("User with id " + user_id + " used voucher " + voucher + "with amount " + amount); + return "success"; + } + else { + addLoggging("User with id " + user_id + " tried to use a voucher with amount " + amount + " but failed because of invalid api key"); + return "invalid apikey"; + } + } + + @Override + public String[] getSpecifiedVouchers (String code){ + if(validateApiKey()){ + voucher_model voucherModel = new voucher_model(); + voucher_entity[] voucherEntity = voucherModel.getSpecifiedVoucher(code); + Integer len = voucherModel.getSpecifiedCount(code); + String[] ret = new String[len]; + for (int i = 0; i < len; i++) { + ret[i] = voucherEntity[i].getCode()+", "+voucherEntity[i].getAmount().toString()+", "+voucherEntity[i].getUser_id().toString(); + } + return ret; + } + else { + addLoggging("invalid api key"); + return null; + } + } + + @Override + public String[] getAllVouchers() { + if(validateApiKey()){ + voucher_model voucherModel = new voucher_model(); + voucher_entity[] voucherEntity = voucherModel.getAllVouchers(); + Integer len = voucherModel.getAllCount(); + String[] ret = new String[len]; + for (int i = 0; i < len; i++) { + ret[i] = voucherEntity[i].getCode()+", "+voucherEntity[i].getAmount().toString()+", "+voucherEntity[i].getUser_id().toString(); + } + return ret; + } + else { + addLoggging("invalid api key"); + return null; + } + } + public Boolean validateApiKey() { api_model apiModel = new api_model(); MessageContext mc = wsctx.getMessageContext();