diff --git a/MonsterTradingCards.sh b/MonsterTradingCards.sh old mode 100644 new mode 100755 diff --git a/src/at/nanopenguin/mtcg/application/Trade.java b/src/at/nanopenguin/mtcg/application/Trade.java index f755f15..c5fee4c 100644 --- a/src/at/nanopenguin/mtcg/application/Trade.java +++ b/src/at/nanopenguin/mtcg/application/Trade.java @@ -1,8 +1,10 @@ package at.nanopenguin.mtcg.application; +import at.nanopenguin.mtcg.Pair; import at.nanopenguin.mtcg.application.service.schemas.TradingDeal; import at.nanopenguin.mtcg.db.DbQuery; import at.nanopenguin.mtcg.db.SqlCommand; +import at.nanopenguin.mtcg.db.SqlComparisonOperator; import at.nanopenguin.mtcg.db.Table; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.val; @@ -12,14 +14,15 @@ import java.util.ArrayList; import java.util.UUID; public class Trade { - public static TradingDeal[] get() throws SQLException { + public static TradingDeal[] get(UUID userUuid) throws SQLException { val dbQueryBuilder = DbQuery.builder() .command(SqlCommand.SELECT) .table(Table.TRADES) .column("uuid AS id") .column("card AS cardToTrade") .column("card_type AS type") - .column("min_dmg AS minimumDamage"); + .column("min_dmg AS minimumDamage") + .condition("user_uuid", new Pair<>(userUuid, SqlComparisonOperator.NOT_EQUAL)); ArrayList trades = new ArrayList<>(); for (val row : dbQueryBuilder.executeQuery()) { @@ -65,10 +68,16 @@ public class Trade { val tradeResult = DbQuery.builder() .command(SqlCommand.SELECT) .table(Table.TRADES) + .column("uuid AS id") + .column("card AS cardToTrade") + .column("card_type AS type") + .column("min_dmg AS minimumDamage") + .column("user_uuid") .condition("uuid", tradeUuid) .executeQuery(); if (tradeResult.isEmpty()) throw new NullPointerException(); + if (tradeResult.get(0).get("user_uuid") == userUuid) return false; TradingDeal trade = new ObjectMapper().convertValue(tradeResult.get(0), TradingDeal.class); diff --git a/src/at/nanopenguin/mtcg/application/service/TradingService.java b/src/at/nanopenguin/mtcg/application/service/TradingService.java index af7b940..d5d4774 100644 --- a/src/at/nanopenguin/mtcg/application/service/TradingService.java +++ b/src/at/nanopenguin/mtcg/application/service/TradingService.java @@ -26,7 +26,7 @@ public class TradingService implements Service { if (request.getPath().split("/")[1].equals("tradings")) { return switch (request.getMethod()) { case GET -> { - val result = Trade.get(); + val result = Trade.get(userUuid); if (result.length == 0) yield new Response(HttpStatus.NO_CONTENT); yield new Response(HttpStatus.OK, new ObjectMapper().writeValueAsString(result)); } @@ -44,8 +44,8 @@ public class TradingService implements Service { try { yield new Response(Trade.acceptTrade( - UUID.fromString(request.getPath().split("/")[3]), - UUID.fromString(request.getBody()), + UUID.fromString(request.getPath().split("/")[2]), + UUID.fromString(new ObjectMapper().readValue(request.getBody(), String.class)), userUuid) ? HttpStatus.OK : HttpStatus.FORBIDDEN); @@ -57,7 +57,7 @@ public class TradingService implements Service { case DELETE -> { try { yield new Response(Trade.removeTrade( - UUID.fromString(request.getPath().split("/")[3]), + UUID.fromString(request.getPath().split("/")[2]), userUuid) ? HttpStatus.OK : HttpStatus.FORBIDDEN); diff --git a/src/at/nanopenguin/mtcg/db/DbQuery.java b/src/at/nanopenguin/mtcg/db/DbQuery.java index ff56db1..7594fb7 100644 --- a/src/at/nanopenguin/mtcg/db/DbQuery.java +++ b/src/at/nanopenguin/mtcg/db/DbQuery.java @@ -1,5 +1,6 @@ package at.nanopenguin.mtcg.db; +import at.nanopenguin.mtcg.Pair; import lombok.Builder; import lombok.NonNull; import lombok.Singular; @@ -37,7 +38,8 @@ public final class DbQuery { public List> executeQuery() throws SQLException { DbQuery dbQuery = this.build(); - if (dbQuery.customSql != null) return DbQuery.executeQuery(dbQuery.customSql, dbQuery.values, dbQuery.isScript); + if (dbQuery.customSql != null) + return DbQuery.executeQuery(dbQuery.customSql, dbQuery.values, dbQuery.isScript); if (dbQuery.command != SqlCommand.SELECT && dbQuery.returnColumn == null) throw new SQLException(); return switch (dbQuery.command) { case INSERT -> dbQuery.create(true); @@ -49,7 +51,8 @@ public final class DbQuery { public int executeUpdate() throws SQLException { DbQuery dbQuery = this.build(); - if (dbQuery.customSql != null) return DbQuery.executeUpdate(dbQuery.customSql, dbQuery.values, dbQuery.isScript); + if (dbQuery.customSql != null) + return DbQuery.executeUpdate(dbQuery.customSql, dbQuery.values, dbQuery.isScript); if (this.returnColumn != null) throw new SQLException(); return switch (dbQuery.command) { case INSERT -> dbQuery.create(); @@ -82,13 +85,15 @@ public final class DbQuery { return DriverManager.getConnection(connectionString); } - private String buildParameterizedString(@NonNull SortedMap parameters, String separator) { - if (parameters.isEmpty()) { + private String buildParameterizedString(@NonNull SortedMap parameterMap, String separator) { + + if (parameterMap.isEmpty()) { return ""; } + StringBuilder stringBuilder = new StringBuilder(); - for (val parameter : parameters.entrySet()) { + for (val parameter : parameterMap.entrySet()) { if (!stringBuilder.isEmpty()) stringBuilder.append(separator); if (parameter.getValue() instanceof List) { stringBuilder @@ -99,6 +104,15 @@ public final class DbQuery { continue; } + if(parameter.getValue() instanceof Pair && ((Pair) parameter.getValue()).right() instanceof SqlComparisonOperator sqlComparisonOperator) { + stringBuilder + .append(parameter.getKey()) + .append(" ") + .append(sqlComparisonOperator.Operator) + .append(" ?"); + continue; + } + stringBuilder .append(parameter.getKey()) .append(" = ?"); @@ -164,6 +178,10 @@ public final class DbQuery { new PreparedStatementExecutor(connection.prepareStatement(sql)); int i = 1; for (val value : parameterValues) { + if (value instanceof Pair) { + statementExecutor.setObject(i++, ((Pair) value).left()); + continue; + } if (value instanceof List) { for (Object o : (List) value) statementExecutor.setObject(i++, o); @@ -183,7 +201,7 @@ public final class DbQuery { result.add(row); } - return result; + return result; } } } diff --git a/src/at/nanopenguin/mtcg/db/SqlComparisonOperator.java b/src/at/nanopenguin/mtcg/db/SqlComparisonOperator.java new file mode 100644 index 0000000..3f2b4b3 --- /dev/null +++ b/src/at/nanopenguin/mtcg/db/SqlComparisonOperator.java @@ -0,0 +1,16 @@ +package at.nanopenguin.mtcg.db; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum SqlComparisonOperator { + EQUAL("="), + GREATER_THAN(">"), + LESS_THAN("<"), + GREATER_EQUAL(">="), + LESS_EQUAL("<="), + NOT_EQUAL("!="); + + public final String Operator; + +}