tbvns 5 місяців тому
батько
коміт
77bc06a234

+ 17 - 7
pom.xml

@@ -28,6 +28,9 @@
 	</scm>
 	<properties>
 		<java.version>21</java.version>
+		<maven.compiler.source>21</maven.compiler.source>
+		<maven.compiler.target>21</maven.compiler.target>
+		<maven.compiler.release>21</maven.compiler.release>
 	</properties>
 	<dependencies>
 		<dependency>
@@ -76,12 +79,6 @@
 			<version>2.17.0</version>
 		</dependency>
 
-		<dependency>
-			<groupId>org.mongodb</groupId>
-			<artifactId>mongodb-driver-sync</artifactId>
-			<version>5.2.0</version>
-		</dependency>
-
 		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
 		<dependency>
 			<groupId>org.projectlombok</groupId>
@@ -90,7 +87,11 @@
 			<scope>provided</scope>
 		</dependency>
 
-
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+			<version>2.18.1</version>
+		</dependency>
 	</dependencies>
 
 	<build>
@@ -99,6 +100,15 @@
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>21</source>
+					<target>21</target>
+					<compilerArgs>--enable-preview</compilerArgs>
+				</configuration>
+			</plugin>
 		</plugins>
 	</build>
 

+ 16 - 5
src/main/java/xyz/prismix/OPCAI_server/Account.java

@@ -1,21 +1,32 @@
 package xyz.prismix.OPCAI_server;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
-import xyz.prismix.OPCAI_server.DataBase.SQLDatabase;
+import xyz.prismix.OPCAI_server.DataBase.SQLUserDatabase;
 
 import java.sql.SQLException;
 
 @RestController
 public class Account {
     @RequestMapping("/account/create")
-    public String createAccount(@RequestParam String username, @RequestParam String password) throws SQLException {
-        return SQLDatabase.createAccount(username, password);
+    public ResponseEntity<String> createAccount(@RequestParam String username, @RequestParam String password) throws SQLException, JsonProcessingException {
+        String data = SQLUserDatabase.createAccount(username, password);
+        if (data.equals("This username is already taken !")) {
+            return new ResponseEntity<>(data, HttpStatus.CONFLICT);
+        }
+        return new ResponseEntity<>(data, HttpStatus.CREATED);
     }
 
     @RequestMapping("/account/login")
-    public String login(@RequestParam String username, @RequestParam String password) throws SQLException {
-        return SQLDatabase.getTokenForUser(username, password);
+    public ResponseEntity<String> login(@RequestParam String username, @RequestParam String password) throws SQLException {
+        String data = SQLUserDatabase.getTokenForUser(username, password);
+        if (data.equals("null")) {
+            return new ResponseEntity<>(data, HttpStatus.NOT_FOUND);
+        }
+        return new ResponseEntity<>(data, HttpStatus.OK);
     }
 }

+ 0 - 15
src/main/java/xyz/prismix/OPCAI_server/DataBase/MONGODatabase.java

@@ -1,15 +0,0 @@
-package xyz.prismix.OPCAI_server.DataBase;
-
-import com.mongodb.client.MongoClient;
-import com.mongodb.client.MongoClients;
-import com.mongodb.client.MongoDatabase;
-
-public class MONGODatabase {
-    public static final String uri = "mongodb://192.168.1.42:27017/?tls=false";
-    public static MongoDatabase database;
-    public void connect() {
-        try (MongoClient mongoClient = MongoClients.create(uri)) {
-            database = mongoClient.getDatabase("OPCAI");
-        }
-    }
-}

+ 6 - 2
src/main/java/xyz/prismix/OPCAI_server/DataBase/Objects/Cards.java → src/main/java/xyz/prismix/OPCAI_server/DataBase/Objects/Card.java

@@ -1,13 +1,17 @@
 package xyz.prismix.OPCAI_server.DataBase.Objects;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
-public class Cards {
+@AllArgsConstructor
+@NoArgsConstructor
+public class Card {
+    int id;
     String name;
     String atk1;
     int atk1dmg;
     String atk2;
     int atk2dmg;
-    String displayImage;
 }

+ 6 - 1
src/main/java/xyz/prismix/OPCAI_server/DataBase/Objects/Users.java

@@ -2,10 +2,15 @@ package xyz.prismix.OPCAI_server.DataBase.Objects;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import xyz.prismix.OPCAI_server.Json.UserJson;
+
+import java.util.List;
 
 @Data
 @AllArgsConstructor
+@NoArgsConstructor
 public class Users {
     String username;
-    String display_name;
+    UserJson data;
 }

+ 9 - 0
src/main/java/xyz/prismix/OPCAI_server/DataBase/SQLCardDatabase.java

@@ -0,0 +1,9 @@
+package xyz.prismix.OPCAI_server.DataBase;
+
+import xyz.prismix.OPCAI_server.DataBase.Objects.Card;
+
+public class SQLCardDatabase {
+    public static void addCard(Card card) {
+
+    }
+}

+ 51 - 8
src/main/java/xyz/prismix/OPCAI_server/DataBase/SQLDatabase.java → src/main/java/xyz/prismix/OPCAI_server/DataBase/SQLUserDatabase.java

@@ -1,11 +1,18 @@
 package xyz.prismix.OPCAI_server.DataBase;
 
 import at.favre.lib.crypto.bcrypt.BCrypt;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.RegExUtils;
+import org.jetbrains.annotations.Nullable;
+import xyz.prismix.OPCAI_server.Json.UserJson;
 
 import java.sql.*;
+import java.util.List;
+import java.util.regex.Matcher;
 
-public class SQLDatabase {
+public class SQLUserDatabase {
     static Connection connection;
     static {
         try {
@@ -18,9 +25,12 @@ public class SQLDatabase {
         }
     }
 
-    public static String createAccount(String username, String password) throws SQLException {
-        Statement statement = SQLDatabase.connection.createStatement();
-        ResultSet set = statement.executeQuery("SELECT * FROM Users WHERE Username='" + username + "';"); //TODO: Fix sql injection
+    public static String createAccount(String username, String password) throws SQLException, JsonProcessingException {
+        Statement statement = SQLUserDatabase.connection.createStatement();
+        ResultSet set = statement.executeQuery(STR."""
+        SELECT * FROM Users
+        WHERE Username='\{username}';
+        """); //TODO: Fix sql injection
         if (set.next()) {
             return "This username is already taken !";
         }
@@ -28,14 +38,36 @@ public class SQLDatabase {
         String salt = RandomStringUtils.randomAlphanumeric(10);
         password = BCrypt.with(BCrypt.Version.VERSION_2X).hashToString(12, (password + salt).toCharArray());
 
-        statement.executeUpdate("INSERT INTO Users (Username, Password, Salt) VALUES ('" + username + "', '" + password + "', '" + salt + "');");
+        UserJson json = new UserJson(username, List.of());
+        String data = new ObjectMapper().writeValueAsString(json);
+
+        statement.executeUpdate(STR."""
+        INSERT INTO Users (Username, Password, Salt, Data)
+        VALUES ('\{username}', '\{password}', '\{salt}', '\{data}');
+        """);
         return "Success";
     }
 
+    @Nullable
+    public UserJson getUserData(String user) throws SQLException, JsonProcessingException {
+        String sql = STR."""
+                SELECT * FROM OPCAI.Users
+                WHERE Username = '\{user}'
+                """;
+        Statement statement = connection.createStatement();
+        ResultSet set = statement.executeQuery(sql);
+        if (!set.next()) {
+            return null;
+        }
+
+        String data = set.getString(4);
+        return new ObjectMapper().readValue(data, UserJson.class);
+    }
+
 
     public static boolean verifyAccount(String username, String password) throws SQLException {
         String sql = "SELECT Password, Salt FROM Users WHERE Username = ?";
-        PreparedStatement preparedStatement = SQLDatabase.connection.prepareStatement(sql);
+        PreparedStatement preparedStatement = SQLUserDatabase.connection.prepareStatement(sql);
         preparedStatement.setString(1, username);
         ResultSet resultSet = preparedStatement.executeQuery();
 
@@ -51,6 +83,17 @@ public class SQLDatabase {
         return result.verified;
     }
 
+    public void updateData(String username, String data) throws SQLException {
+        String sql = String.format(
+                STR."""
+                UPDATE OPCAI.Users
+                SET Data = '\{data}'
+                WHERE Username = '\{username}';
+                """
+        );
+        Statement statement = connection.createStatement();
+        statement.execute(sql);
+    }
 
     public static String getTokenForUser(String username, String password) throws SQLException {
         if (!verifyAccount(username, password)) {
@@ -58,7 +101,7 @@ public class SQLDatabase {
         }
 
         String sql = "SELECT Token FROM Tokens WHERE Username = ?";
-        PreparedStatement preparedStatement = SQLDatabase.connection.prepareStatement(sql);
+        PreparedStatement preparedStatement = SQLUserDatabase.connection.prepareStatement(sql);
         preparedStatement.setString(1, username);
         ResultSet resultSet = preparedStatement.executeQuery();
 
@@ -68,7 +111,7 @@ public class SQLDatabase {
 
         String newToken = RandomStringUtils.randomAlphanumeric(50);
 
-        PreparedStatement insertion = SQLDatabase.connection.prepareStatement("INSERT INTO Tokens (Token, Username) VALUES (?, ?)");
+        PreparedStatement insertion = SQLUserDatabase.connection.prepareStatement("INSERT INTO Tokens (Token, Username) VALUES (?, ?)");
         insertion.setString(1, newToken);
         insertion.setString(2, username);
         insertion.executeUpdate();

+ 15 - 0
src/main/java/xyz/prismix/OPCAI_server/Json/UserJson.java

@@ -0,0 +1,15 @@
+package xyz.prismix.OPCAI_server.Json;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserJson {
+    String displayName;
+    List<Integer> cards;
+}

+ 15 - 15
src/main/java/xyz/prismix/OPCAI_server/OpcaiServerApplication.java

@@ -11,21 +11,21 @@ import java.io.IOException;
 public class OpcaiServerApplication {
 
 	public static void main(String[] args) throws IOException {
-		System.out.println(Mistral.prompt("""
-		Only reply with the JSON.
-		The type of the pokemon is Light
-		The name need to be original and one word
-		Generate a new imaginary pokemon by completing the following JSON
-		{
-			'name': [ENTER NAME HERE]
-			'atk 1': [ENTER ATK 1 HERE]
-			'atk desc 1': [ENTER ATK DESC 1 HERE]
-			'atk 2': [ENTER ATK 2 HERE]
-			'atk desc 2': [ENTER ATK DESC 2 HERE]
-			'visual desc': [ENTER VISUAL DESC HERE]
-		}
-		"""
-		));
+//		System.out.println(Mistral.prompt("""
+//		Only reply with the JSON.
+//		The type of the pokemon is Light
+//		The name need to be original and one word
+//		Generate a new imaginary pokemon by completing the following JSON
+//		{
+//			'name': [ENTER NAME HERE]
+//			'atk 1': [ENTER ATK 1 HERE]
+//			'atk desc 1': [ENTER ATK DESC 1 HERE]
+//			'atk 2': [ENTER ATK 2 HERE]
+//			'atk desc 2': [ENTER ATK DESC 2 HERE]
+//			'visual desc': [ENTER VISUAL DESC HERE]
+//		}
+//		"""
+//		));
 		SpringApplication.run(OpcaiServerApplication.class, args);
 	}