From d1450cb400d0987908f8dc09144a9e8ef41657a7 Mon Sep 17 00:00:00 2001
From: Haidar <16521522@mahasiswa.itb.ac.id>
Date: Fri, 17 Nov 2023 08:21:02 +0700
Subject: [PATCH] feat: add uangconverterservice implement

---
 .../service/uangConverterServiceImpl.java     | 103 ++++++++++++++++++
 1 file changed, 103 insertions(+)
 create mode 100644 src/main/java/org/example/service/uangConverterServiceImpl.java

diff --git a/src/main/java/org/example/service/uangConverterServiceImpl.java b/src/main/java/org/example/service/uangConverterServiceImpl.java
new file mode 100644
index 0000000..b874f3f
--- /dev/null
+++ b/src/main/java/org/example/service/uangConverterServiceImpl.java
@@ -0,0 +1,103 @@
+package org.example.service;
+
+import javax.annotation.Resource;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+import com.sun.net.httpserver.HttpExchange;
+import java.sql.PreparedStatement;
+
+import com.sun.xml.internal.ws.developer.JAXWSProperties;
+import org.example.model.Challenge;
+import org.example.model.ChallengeDAOImpl;
+import org.example.core.Database;
+import org.example.model.Log;
+import org.w3c.dom.Element;
+import java.security.Principal;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+
+@WebService
+public class uangConverterServiceImpl implements uangConverterService {
+
+    @Resource
+    public WebServiceContext wsContext;
+
+   public Boolean checkApiKey() {
+       String[] API_KEYS = { "RestClient" , "PHPClient" };
+       MessageContext msgContext = wsContext.getMessageContext();
+       HttpExchange httpExchange = (HttpExchange) msgContext.get("com.sun.xml.internal.ws.http.exchange");
+       String apiKey = httpExchange.getRequestHeaders().getFirst("X-API-Key");
+       if (apiKey == null) {
+         return false;
+       } else if (apiKey.equals(API_KEYS[0]) || apiKey.equals(API_KEYS[1])) {
+         return true;
+       } else {
+         return false;
+       }
+   }
+
+   public void log(String description) {
+    try {
+        MessageContext msgContext = wsContext.getMessageContext();
+        HttpExchange httpExchange = (HttpExchange) msgContext.get("com.sun.xml.internal.ws.http.exchange");
+        String ip = httpExchange.getRemoteAddress().getAddress().getHostAddress();
+        String endpoint = httpExchange.getRequestURI().toString();
+        System.out.println(ip);
+        System.out.println(endpoint);
+        Log log = new Log();
+        String apiKey = httpExchange.getRequestHeaders().getFirst("X-API-Key");
+        String desc = apiKey + ": " + description;
+       log.InsertLog(desc, ip, endpoint);
+    } catch (Exception e) {
+       System.out.println("Internal Server Error: " + e.getMessage());
+    }
+}
+
+    @WebMethod
+    @Override
+    public int uangConverter(int restId, int balance) {
+        if (!checkApiKey()) {
+            return 0;
+        }
+        Database db = new Database();
+        Connection connection = db.getConnection();
+        System.out.println(restId);
+        System.out.println(balance);
+        try {
+            String validateQuery = "SELECT * FROM soap_connector WHERE user_id_Rest = ?";
+            PreparedStatement validateStatement = connection.prepareStatement(validateQuery);
+            validateStatement.setInt(1, restId);
+            ResultSet resultSet = validateStatement.executeQuery();
+            if (resultSet.next()) {
+                int currentUang = resultSet.getInt("uang");
+                if (currentUang < balance) {
+                    return 0;
+                }
+            } else {
+                return 0;
+            }
+
+            String query = "UPDATE soap_connector SET point = point + ?, uang = uang - ? WHERE user_id_Rest = ?";
+            PreparedStatement preparedStatement = connection.prepareStatement(query);
+            preparedStatement.setInt(1, balance); 
+            preparedStatement.setInt(2, balance); 
+            preparedStatement.setInt(3, restId);
+            int rowsAffected = preparedStatement.executeUpdate();
+            preparedStatement.close();
+            connection.close();
+            log("converting uang to point with user id rest " + restId + " and total " + balance + " point");
+            return 1;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            log("Error when converting uang to point with user id rest " + restId + " and total " + balance + " point");
+            return 0;
+        }
+    }
+
+    
+}
-- 
GitLab