getTransactionsForCustomer(String customerName, String customerEmail) {
+ return find("customerName = ?1 and customerEmail = ?2 and time > ?3",
+ customerName,
+ customerEmail,
+ LocalDateTime.now().minusMinutes(30)).list();
+ }
+}
diff --git a/samples/secure-fraud-detection/src/main/resources/META-INF/resources/images/google.png b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/images/google.png
new file mode 100644
index 000000000..e2503df4e
Binary files /dev/null and b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/images/google.png differ
diff --git a/samples/secure-fraud-detection/src/main/resources/META-INF/resources/index.html b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/index.html
new file mode 100644
index 000000000..6fd3636ed
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/META-INF/resources/index.html
@@ -0,0 +1,133 @@
+
+
+
+
+ Secure Fraud Detection
+
+
+
+
+
+ Secure Fraud Detection
+
+
+
+
+
+
+
diff --git a/samples/secure-fraud-detection/src/main/resources/META-INF/services/io.quarkiverse.langchain4j.spi.DefaultMemoryIdProvider b/samples/secure-fraud-detection/src/main/resources/META-INF/services/io.quarkiverse.langchain4j.spi.DefaultMemoryIdProvider
new file mode 100644
index 000000000..4a8d26572
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/META-INF/services/io.quarkiverse.langchain4j.spi.DefaultMemoryIdProvider
@@ -0,0 +1 @@
+io.quarkiverse.langchain4j.sample.SecureMemoryIdProvider
\ No newline at end of file
diff --git a/samples/secure-fraud-detection/src/main/resources/application.properties b/samples/secure-fraud-detection/src/main/resources/application.properties
new file mode 100644
index 000000000..6c50ae0d2
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/application.properties
@@ -0,0 +1,14 @@
+quarkus.langchain4j.openai.timeout=60s
+quarkus.langchain4j.openai.chat-model.temperature=0
+quarkus.langchain4j.openai.api-key=${OPENAI_API_KEY}
+
+quarkus.oidc.provider=google
+quarkus.oidc.client-id=${GOOGLE_CLIENT_ID}
+quarkus.oidc.credentials.secret=${GOOGLE_CLIENT_SECRET}
+quarkus.oidc.authentication.redirect-path=/login
+
+quarkus.langchain4j.openai.log-requests=true
+quarkus.langchain4j.openai.log-responses=true
+
+customer.name=${name}
+customer.email=${email}
diff --git a/samples/secure-fraud-detection/src/main/resources/templates/fraudDetection.html b/samples/secure-fraud-detection/src/main/resources/templates/fraudDetection.html
new file mode 100644
index 000000000..080a487af
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/templates/fraudDetection.html
@@ -0,0 +1,18 @@
+
+
+
+
+Secure Fraud Detection
+
+
+ Hello {name}, please check fraud occurrences by amount:
+
+ Logout
+
+
diff --git a/samples/secure-fraud-detection/src/main/resources/templates/missingCustomer.html b/samples/secure-fraud-detection/src/main/resources/templates/missingCustomer.html
new file mode 100644
index 000000000..12b1e4a8b
--- /dev/null
+++ b/samples/secure-fraud-detection/src/main/resources/templates/missingCustomer.html
@@ -0,0 +1,18 @@
+
+
+
+
+Missing Customer
+
+
+ {given_name}, please make sure your Google account's full name and email are correctly registered at the startup using -Dname="{name}" and -Demail={email} system properties
+
+
+
+