diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index 9b0619b..45bc6dd 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -13,17 +13,5 @@
$ProjectFileDir$
-
- postgresql
- true
- org.postgresql.Driver
- jdbc:postgresql://localhost:5432/postgres
-
-
-
-
-
- $ProjectFileDir$
-
\ No newline at end of file
diff --git a/.idea/libraries/postgresql.xml b/.idea/libraries/postgresql.xml
new file mode 100644
index 0000000..2377f32
--- /dev/null
+++ b/.idea/libraries/postgresql.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index a74e8ef..70e0d3a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,6 +9,54 @@
+
+
+
+
+
+
diff --git a/lib/checker-qual-3.41.0.jar b/lib/checker-qual-3.41.0.jar
new file mode 100644
index 0000000..17a85a1
Binary files /dev/null and b/lib/checker-qual-3.41.0.jar differ
diff --git a/lib/lombok-1.18.30.jar b/lib/lombok-1.18.30.jar
new file mode 100644
index 0000000..05e3e5b
Binary files /dev/null and b/lib/lombok-1.18.30.jar differ
diff --git a/lib/postgresql-42.7.1.jar b/lib/postgresql-42.7.1.jar
new file mode 100644
index 0000000..18331b7
Binary files /dev/null and b/lib/postgresql-42.7.1.jar differ
diff --git a/src/at/nanopenguin/mtcg/application/User.java b/src/at/nanopenguin/mtcg/application/User.java
index 805dd5f..3da4674 100644
--- a/src/at/nanopenguin/mtcg/application/User.java
+++ b/src/at/nanopenguin/mtcg/application/User.java
@@ -1,5 +1,20 @@
package at.nanopenguin.mtcg.application;
-public class User {
+import at.nanopenguin.mtcg.application.service.schemas.UserCredentials;
+import at.nanopenguin.mtcg.db.DbQuery;
+import at.nanopenguin.mtcg.db.SqlCommand;
+import at.nanopenguin.mtcg.db.Table;
-}
+import java.sql.SQLException;
+
+public class User {
+ public static int create(UserCredentials userCredentials) throws SQLException {
+ return DbQuery.builder()
+ .command(SqlCommand.INSERT)
+ .table(Table.USERS)
+ .parameter("username", userCredentials.username())
+ .parameter("password", userCredentials.password())
+ .executeUpdate();
+
+ }
+}
\ No newline at end of file
diff --git a/src/at/nanopenguin/mtcg/application/service/UserService.java b/src/at/nanopenguin/mtcg/application/service/UserService.java
index beb0142..3696938 100644
--- a/src/at/nanopenguin/mtcg/application/service/UserService.java
+++ b/src/at/nanopenguin/mtcg/application/service/UserService.java
@@ -1,13 +1,15 @@
package at.nanopenguin.mtcg.application.service;
+import at.nanopenguin.mtcg.application.User;
+import at.nanopenguin.mtcg.application.service.schemas.UserCredentials;
import at.nanopenguin.mtcg.http.HttpMethod;
import at.nanopenguin.mtcg.http.HttpRequest;
import at.nanopenguin.mtcg.http.HttpStatus;
import at.nanopenguin.mtcg.http.Response;
-
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
+
+import java.sql.SQLException;
public class UserService implements Service {
@@ -22,7 +24,10 @@ public class UserService implements Service {
if (request.getPath().split("/")[1].equals("users")) {
return switch (request.getMethod()) {
case GET -> new Response(HttpStatus.NOT_IMPLEMENTED);
- case POST -> new Response(HttpStatus.NOT_IMPLEMENTED); // new ObjectMapper().readValue(request.getBody(), UserCredentials.class);
+ case POST -> {
+ int success = User.create(new ObjectMapper().readValue(request.getBody(), UserCredentials.class));
+ yield new Response(success > 0 ? HttpStatus.CREATED : HttpStatus.CONFLICT);
+ }
case PUT -> new Response(HttpStatus.NOT_IMPLEMENTED); // new ObjectMapper().readValue(request.getBody(), UserData.class);
default -> new Response(HttpStatus.NOT_FOUND);
};
@@ -32,6 +37,9 @@ public class UserService implements Service {
}
catch (ArrayIndexOutOfBoundsException e) {
return new Response(HttpStatus.BAD_REQUEST);
+ } catch (SQLException e) {
+ System.out.println(e.getMessage());
+ return new Response(HttpStatus.INTERNAL);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/at/nanopenguin/mtcg/db/DbQuery.java b/src/at/nanopenguin/mtcg/db/DbQuery.java
index b52384e..aa64535 100644
--- a/src/at/nanopenguin/mtcg/db/DbQuery.java
+++ b/src/at/nanopenguin/mtcg/db/DbQuery.java
@@ -11,7 +11,7 @@ import java.util.stream.Collectors;
@Builder
public final class DbQuery {
- private static final String connectionString = "jdbc:postgres://localhost:5432/mydb?user=postgres&password=postgres";
+ private static final String connectionString = "jdbc:postgresql://localhost:5432/mydb?user=postgres&password=postgres";
@NonNull
private final SqlCommand command;
@@ -61,7 +61,8 @@ public final class DbQuery {
.filter(columnName -> columnName.matches("[a-zA-Z0-9_]+"))
.collect(Collectors.joining(", "));
- String sql = String.format("INSERT INTO %s (%s) VALUES (%s);", table.table, columns, String.join(", ", Collections.nCopies(this.parameters.size(), "?")));
+ String sql = String.format("INSERT INTO %s (%s) VALUES (%s) ON CONFLICT DO NOTHING;", table.table, columns, String.join(", ", Collections.nCopies(this.parameters.size(), "?")));
+ // on conflict return int equals 0
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
int i = 1;