diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1209fb0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+target/
+.env
+.ideal
+*.iml
+.vscode/
+.DS_Store
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..f241570
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ com.igirepay
+ idempotency-gateway
+ 1.0.0
+ jar
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.2.5
+
+
+
+
+ 17
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/igirepay/Application.java b/src/main/java/com/igirepay/Application.java
new file mode 100644
index 0000000..9785fa6
--- /dev/null
+++ b/src/main/java/com/igirepay/Application.java
@@ -0,0 +1,12 @@
+package com.igirepay;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+
+@SpringBootApplication
+public class Application {
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/src/main/java/com/igirepay/controller/PaymentController.java b/src/main/java/com/igirepay/controller/PaymentController.java
new file mode 100644
index 0000000..5d09d67
--- /dev/null
+++ b/src/main/java/com/igirepay/controller/PaymentController.java
@@ -0,0 +1,88 @@
+package com.igirepay.controller;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
+
+@RestController
+@RequestMapping("/api")
+public class PaymentController {
+ // Stores: idempotency_key -> saved response
+ private final ConcurrentHashMap>> responseCache = new ConcurrentHashMap<>();
+
+ // Stores: idempotency_key -> original request body (for conflict detection)
+ private final ConcurrentHashMap> requestCache = new ConcurrentHashMap<>();
+
+ // Stores: idempotency_key -> lock (for race condition handling)
+ private final ConcurrentHashMap lockMap = new ConcurrentHashMap<>();
+
+ @PostMapping("/process-payment")
+ public ResponseEntity