diff --git a/pom.xml b/pom.xml
index e8ce888..c2ab6b4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,11 @@
lombok
true
+
+ com.vladmihalcea
+ hibernate-types-52
+ 2.21.1
+
org.springframework.boot
spring-boot-starter-test
@@ -57,12 +62,6 @@
reactor-core
-
-
- io.projectreactor
- reactor-core
-
-
io.netty
diff --git a/src/main/java/com/safeqr/app/constants/APIConstants.java b/src/main/java/com/safeqr/app/constants/APIConstants.java
index 91a4e24..d0fd8f0 100644
--- a/src/main/java/com/safeqr/app/constants/APIConstants.java
+++ b/src/main/java/com/safeqr/app/constants/APIConstants.java
@@ -11,5 +11,6 @@ public class APIConstants {
public static final String API_URL_QRCODE_VERIFY_URL = "/qrcodetypes/verifyurl";
public static final String API_URL_QRCODE_VIRUS_TOTAL_CHECK = "/qrcodetypes/virustotalcheck";
public static final String API_URL_QRCODE_REDIRECT_COUNT = "/qrcodetypes/redirectcount";
+ public static final String API_URL_QRCODE_GET_SCANNED_DETAILS = "/qrcodetypes/getScannedDetails";
}
diff --git a/src/main/java/com/safeqr/app/exceptions/ErrorResponse.java b/src/main/java/com/safeqr/app/exceptions/ErrorResponse.java
new file mode 100644
index 0000000..3184cec
--- /dev/null
+++ b/src/main/java/com/safeqr/app/exceptions/ErrorResponse.java
@@ -0,0 +1,16 @@
+package com.safeqr.app.exceptions;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Builder
+@Data
+public class ErrorResponse {
+ private String error;
+ private int status;
+
+ public ErrorResponse(String message, int status){
+ this.error = message;
+ this.status = status;
+ }
+}
diff --git a/src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java b/src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java
new file mode 100644
index 0000000..6a0e08d
--- /dev/null
+++ b/src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java
@@ -0,0 +1,15 @@
+package com.safeqr.app.exceptions;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+ @ExceptionHandler(QRCodeExceptions.class)
+ public ResponseEntity handleQRCodeNotFoundException(QRCodeExceptions e) {
+ return new ResponseEntity<>(new ErrorResponse(e.getMessage(), HttpStatus.NOT_FOUND.value()), HttpStatus.NOT_FOUND);
+ }
+}
diff --git a/src/main/java/com/safeqr/app/exceptions/QRCodeExceptions.java b/src/main/java/com/safeqr/app/exceptions/QRCodeExceptions.java
new file mode 100644
index 0000000..f2d98dc
--- /dev/null
+++ b/src/main/java/com/safeqr/app/exceptions/QRCodeExceptions.java
@@ -0,0 +1,7 @@
+package com.safeqr.app.exceptions;
+
+public class QRCodeExceptions extends RuntimeException {
+ public QRCodeExceptions(String message){
+ super(message);
+ }
+}
diff --git a/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java b/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java
index fb7a94d..fbb3984 100644
--- a/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java
+++ b/src/main/java/com/safeqr/app/qrcode/controller/QRCodeTypeController.java
@@ -2,7 +2,7 @@ package com.safeqr.app.qrcode.controller;
import static com.safeqr.app.constants.APIConstants.*;
import static com.safeqr.app.constants.CommonConstants.*;
-import com.safeqr.app.qrcode.dto.QRCodePayload;
+import com.safeqr.app.qrcode.dto.request.QRCodePayload;
import com.safeqr.app.qrcode.dto.RedirectCountResponse;
import com.safeqr.app.qrcode.dto.URLVerificationResponse;
import com.safeqr.app.qrcode.dto.response.BaseScanResponse;
@@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
+import java.util.UUID;
@RestController
@RequestMapping(API_VERSION)
@@ -42,6 +43,11 @@ public class QRCodeTypeController {
public ResponseEntity> getAllTypes() {
return ResponseEntity.ok(qrCodeTypeService.getAllTypes());
}
+ @GetMapping(value = API_URL_QRCODE_GET_SCANNED_DETAILS)
+ public ResponseEntity getScannedQRCodeDetails(@RequestHeader(name="QR-ID") UUID qrCodeId) {
+ logger.info("Invoking GET QRCode details endpoint, qrCodeId: {}", qrCodeId);
+ return ResponseEntity.ok(qrCodeTypeService.getScannedQRCodeDetails(qrCodeId));
+ }
@PostMapping(value = API_URL_QRCODE_SCAN, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity scanQRCode(@RequestBody QRCodePayload payload,
diff --git a/src/main/java/com/safeqr/app/qrcode/dto/QRCodePayload.java b/src/main/java/com/safeqr/app/qrcode/dto/request/QRCodePayload.java
similarity index 80%
rename from src/main/java/com/safeqr/app/qrcode/dto/QRCodePayload.java
rename to src/main/java/com/safeqr/app/qrcode/dto/request/QRCodePayload.java
index 2d140bb..2e06f28 100644
--- a/src/main/java/com/safeqr/app/qrcode/dto/QRCodePayload.java
+++ b/src/main/java/com/safeqr/app/qrcode/dto/request/QRCodePayload.java
@@ -1,4 +1,4 @@
-package com.safeqr.app.qrcode.dto;
+package com.safeqr.app.qrcode.dto.request;
import lombok.Data;
diff --git a/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java b/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java
index d72120a..62bafb4 100644
--- a/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java
+++ b/src/main/java/com/safeqr/app/qrcode/entity/URLEntity.java
@@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
+import org.hibernate.annotations.Type;
import org.hibernate.annotations.UuidGenerator;
import java.util.List;
@@ -45,12 +46,12 @@ public class URLEntity {
private int redirect = 0;
- @Column(name = "hsts_header")
+ @Column(name = "hsts_header", columnDefinition = "text[]")
private List hstsHeader;
- @Column(name = "ssl_stripping")
+ @Column(name = "ssl_stripping", columnDefinition = "boolean[]")
private List sslStripping;
- @Column(name = "redirect_chain")
+ @Column(name = "redirect_chain", columnDefinition = "text[]")
private List redirectChain;
}
diff --git a/src/main/java/com/safeqr/app/qrcode/model/EmailModel.java b/src/main/java/com/safeqr/app/qrcode/model/EmailModel.java
index ab3410b..da42b31 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/EmailModel.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/EmailModel.java
@@ -3,7 +3,7 @@ package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.EmailEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
+
import com.safeqr.app.qrcode.service.EmailVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -12,14 +12,12 @@ import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
-public class EmailModel extends QRCodeModel {
+public final class EmailModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(EmailModel.class);
@JsonIgnore
private final EmailVerificationService emailVerificationService;
- EmailEntity details;
-
public EmailModel(QRCodeEntity scannedQRCodeEntity, EmailVerificationService emailVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.emailVerificationService = emailVerificationService;
@@ -32,4 +30,9 @@ public class EmailModel extends QRCodeModel {
// Insert into email table
emailVerificationService.insertDB(details);
}
+
+ @Override
+ public EmailEntity getDetails () {
+ return new EmailEntity();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/model/PhoneModel.java b/src/main/java/com/safeqr/app/qrcode/model/PhoneModel.java
index 37f18f8..8fca7c5 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/PhoneModel.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/PhoneModel.java
@@ -1,9 +1,9 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.safeqr.app.qrcode.entity.EmailEntity;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.PhoneEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.PhoneVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -12,14 +12,12 @@ import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
-public class PhoneModel extends QRCodeModel {
+public final class PhoneModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(PhoneModel.class);
@JsonIgnore
private final PhoneVerificationService phoneVerificationService;
- PhoneEntity details;
-
public PhoneModel(QRCodeEntity scannedQRCodeEntity, PhoneVerificationService phoneVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.phoneVerificationService = phoneVerificationService;
@@ -32,4 +30,8 @@ public class PhoneModel extends QRCodeModel {
// Insert into phone table
phoneVerificationService.insertDB(details);
}
+ @Override
+ public PhoneEntity getDetails () {
+ return new PhoneEntity();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/model/QRCodeModel.java b/src/main/java/com/safeqr/app/qrcode/model/QRCodeModel.java
index 9ea8820..2abd91c 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/QRCodeModel.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/QRCodeModel.java
@@ -1,11 +1,13 @@
package com.safeqr.app.qrcode.model;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import lombok.Data;
@Data
-public abstract class QRCodeModel {
+public abstract class QRCodeModel{
QRCodeEntity scannedQRCode;
+ T details;
+
public abstract void setDetails();
+ public abstract T getDetails();
}
diff --git a/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java b/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java
index b679810..556786d 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/SMSModel.java
@@ -1,9 +1,9 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.safeqr.app.qrcode.entity.EmailEntity;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.SMSEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.SMSVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -12,14 +12,12 @@ import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
-public class SMSModel extends QRCodeModel {
+public final class SMSModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(SMSModel.class);
@JsonIgnore
private final SMSVerificationService smsVerificationService;
- SMSEntity details;
-
public SMSModel(QRCodeEntity scannedQRCodeEntity, SMSVerificationService smsVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.smsVerificationService = smsVerificationService;
@@ -32,4 +30,8 @@ public class SMSModel extends QRCodeModel {
// Insert into sms table
smsVerificationService.insertDB(details);
}
+ @Override
+ public SMSEntity getDetails () {
+ return new SMSEntity();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/model/TextModel.java b/src/main/java/com/safeqr/app/qrcode/model/TextModel.java
index 8ac9d66..a6deed6 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/TextModel.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/TextModel.java
@@ -1,9 +1,9 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.safeqr.app.qrcode.entity.EmailEntity;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.TextEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.TextVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -12,14 +12,12 @@ import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
-public class TextModel extends QRCodeModel {
+public final class TextModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(TextModel.class);
@JsonIgnore
private final TextVerificationService textVerificationService;
- TextEntity details;
-
public TextModel(QRCodeEntity scannedQRCodeEntity, TextVerificationService textVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.textVerificationService = textVerificationService;
@@ -32,4 +30,8 @@ public class TextModel extends QRCodeModel {
// Insert into text table
textVerificationService.insertDB(details);
}
+ @Override
+ public TextEntity getDetails () {
+ return new TextEntity();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/model/URLModel.java b/src/main/java/com/safeqr/app/qrcode/model/URLModel.java
index 462b0d0..564bb1e 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/URLModel.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/URLModel.java
@@ -1,8 +1,8 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.safeqr.app.qrcode.entity.EmailEntity;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.entity.URLEntity;
import com.safeqr.app.qrcode.service.URLVerificationService;
import lombok.*;
@@ -15,17 +15,16 @@ import java.net.URISyntaxException;
@EqualsAndHashCode(callSuper = true)
@Data
-public class URLModel extends QRCodeModel {
+public final class URLModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(URLModel.class);
@JsonIgnore
private final URLVerificationService urlVerificationService;
- URLEntity details;
@Autowired
public URLModel(QRCodeEntity scannedQRCodeEntity, URLVerificationService urlVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.urlVerificationService = urlVerificationService;
- this.details = null;
+ details = null;
}
@Override
@@ -44,4 +43,8 @@ public class URLModel extends QRCodeModel {
logger.error("Error: ", e);
}
}
+ @Override
+ public URLEntity getDetails () {
+ return urlVerificationService.getURLEntityByQRCodeId(scannedQRCode.getId());
+ }
}
diff --git a/src/main/java/com/safeqr/app/qrcode/model/WifiModel.java b/src/main/java/com/safeqr/app/qrcode/model/WifiModel.java
index 185c776..f65b15f 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/WifiModel.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/WifiModel.java
@@ -1,9 +1,9 @@
package com.safeqr.app.qrcode.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.safeqr.app.qrcode.entity.EmailEntity;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.WifiEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.WifiVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -12,14 +12,12 @@ import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
-public class WifiModel extends QRCodeModel {
+public final class WifiModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(WifiModel.class);
@JsonIgnore
private final WifiVerificationService wifiVerificationService;
- WifiEntity details;
-
public WifiModel(QRCodeEntity scannedQRCodeEntity, WifiVerificationService wifiVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.wifiVerificationService = wifiVerificationService;
@@ -32,4 +30,8 @@ public class WifiModel extends QRCodeModel {
// Insert into wifi table
wifiVerificationService.insertDB(details);
}
+ @Override
+ public WifiEntity getDetails () {
+ return new WifiEntity();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/EmailFactory.java b/src/main/java/com/safeqr/app/qrcode/model/factory/EmailFactory.java
index 0f3cd81..e52f269 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/EmailFactory.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/EmailFactory.java
@@ -1,7 +1,6 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.EmailModel;
import com.safeqr.app.qrcode.service.EmailVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/PhoneFactory.java b/src/main/java/com/safeqr/app/qrcode/model/factory/PhoneFactory.java
index ef8b41e..8d10ef9 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/PhoneFactory.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/PhoneFactory.java
@@ -1,7 +1,6 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.PhoneModel;
import com.safeqr.app.qrcode.service.PhoneVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactory.java b/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactory.java
index 3162597..afb5afe 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactory.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactory.java
@@ -1,10 +1,9 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.QRCodeModel;
@FunctionalInterface
-public interface QRCodeFactory {
+public interface QRCodeFactory> {
T create(QRCodeEntity scannedQRCodeEntity);
}
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactoryProvider.java b/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactoryProvider.java
index dcca4c8..49d689e 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactoryProvider.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/QRCodeFactoryProvider.java
@@ -1,7 +1,6 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.QRCodeModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/SMSFactory.java b/src/main/java/com/safeqr/app/qrcode/model/factory/SMSFactory.java
index 3d8055c..54133e7 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/SMSFactory.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/SMSFactory.java
@@ -1,7 +1,6 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.SMSModel;
import com.safeqr.app.qrcode.service.SMSVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/TextFactory.java b/src/main/java/com/safeqr/app/qrcode/model/factory/TextFactory.java
index 7510fa0..3a9121c 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/TextFactory.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/TextFactory.java
@@ -1,7 +1,6 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.TextModel;
import com.safeqr.app.qrcode.service.TextVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/URLFactory.java b/src/main/java/com/safeqr/app/qrcode/model/factory/URLFactory.java
index 82dedf4..e90b9a5 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/URLFactory.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/URLFactory.java
@@ -1,7 +1,6 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.URLModel;
import com.safeqr.app.qrcode.service.URLVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/safeqr/app/qrcode/model/factory/WifiFactory.java b/src/main/java/com/safeqr/app/qrcode/model/factory/WifiFactory.java
index 3b18d6a..92c8440 100644
--- a/src/main/java/com/safeqr/app/qrcode/model/factory/WifiFactory.java
+++ b/src/main/java/com/safeqr/app/qrcode/model/factory/WifiFactory.java
@@ -1,7 +1,6 @@
package com.safeqr.app.qrcode.model.factory;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.model.WifiModel;
import com.safeqr.app.qrcode.service.WifiVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/EmailRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/EmailRepository.java
index b11edcb..bca377c 100644
--- a/src/main/java/com/safeqr/app/qrcode/repository/EmailRepository.java
+++ b/src/main/java/com/safeqr/app/qrcode/repository/EmailRepository.java
@@ -1,8 +1,6 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.EmailEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import java.util.UUID;
-public interface EmailRepository extends JpaRepository {
+public interface EmailRepository extends GenericRepository {
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/GenericRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/GenericRepository.java
new file mode 100644
index 0000000..a32f927
--- /dev/null
+++ b/src/main/java/com/safeqr/app/qrcode/repository/GenericRepository.java
@@ -0,0 +1,10 @@
+package com.safeqr.app.qrcode.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+
+import java.util.UUID;
+
+@NoRepositoryBean
+public interface GenericRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/PhoneRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/PhoneRepository.java
index 00a876d..c60ba75 100644
--- a/src/main/java/com/safeqr/app/qrcode/repository/PhoneRepository.java
+++ b/src/main/java/com/safeqr/app/qrcode/repository/PhoneRepository.java
@@ -1,8 +1,6 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.PhoneEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import java.util.UUID;
-public interface PhoneRepository extends JpaRepository {
+public interface PhoneRepository extends GenericRepository {
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/QRCodeRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/QRCodeRepository.java
index 4e89241..a87492c 100644
--- a/src/main/java/com/safeqr/app/qrcode/repository/QRCodeRepository.java
+++ b/src/main/java/com/safeqr/app/qrcode/repository/QRCodeRepository.java
@@ -1,8 +1,6 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import java.util.UUID;
-public interface QRCodeRepository extends JpaRepository {
+public interface QRCodeRepository extends GenericRepository {
}
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/SMSRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/SMSRepository.java
index 7ce211b..3fc049e 100644
--- a/src/main/java/com/safeqr/app/qrcode/repository/SMSRepository.java
+++ b/src/main/java/com/safeqr/app/qrcode/repository/SMSRepository.java
@@ -1,8 +1,6 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.SMSEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import java.util.UUID;
-public interface SMSRepository extends JpaRepository {
+public interface SMSRepository extends GenericRepository {
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/TextRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/TextRepository.java
index cd9cfcc..69390dc 100644
--- a/src/main/java/com/safeqr/app/qrcode/repository/TextRepository.java
+++ b/src/main/java/com/safeqr/app/qrcode/repository/TextRepository.java
@@ -1,8 +1,6 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.TextEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import java.util.UUID;
-public interface TextRepository extends JpaRepository {
+public interface TextRepository extends GenericRepository {
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/URLRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/URLRepository.java
index 392b7fe..7bef37b 100644
--- a/src/main/java/com/safeqr/app/qrcode/repository/URLRepository.java
+++ b/src/main/java/com/safeqr/app/qrcode/repository/URLRepository.java
@@ -1,8 +1,10 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.URLEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.Optional;
import java.util.UUID;
-public interface URLRepository extends JpaRepository {
+public interface URLRepository extends GenericRepository {
+ Optional findByQrCodeId(UUID qrCodeId);
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/repository/WifiRepository.java b/src/main/java/com/safeqr/app/qrcode/repository/WifiRepository.java
index f64be0c..0130a3d 100644
--- a/src/main/java/com/safeqr/app/qrcode/repository/WifiRepository.java
+++ b/src/main/java/com/safeqr/app/qrcode/repository/WifiRepository.java
@@ -1,8 +1,6 @@
package com.safeqr.app.qrcode.repository;
import com.safeqr.app.qrcode.entity.WifiEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import java.util.UUID;
-public interface WifiRepository extends JpaRepository {
+public interface WifiRepository extends GenericRepository {
}
\ No newline at end of file
diff --git a/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java b/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java
index 5a53cd3..ce5e1dd 100644
--- a/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java
+++ b/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java
@@ -2,7 +2,9 @@
package com.safeqr.app.qrcode.service;
import static com.safeqr.app.constants.CommonConstants.*;
-import com.safeqr.app.qrcode.dto.QRCodePayload;
+
+import com.safeqr.app.exceptions.QRCodeExceptions;
+import com.safeqr.app.qrcode.dto.request.QRCodePayload;
import com.safeqr.app.qrcode.dto.response.BaseScanResponse;
import com.safeqr.app.qrcode.entity.QRCodeEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
@@ -23,6 +25,8 @@ import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -48,11 +52,8 @@ public class QRCodeTypeService {
this.qrCodeRepository = qrCodeRepository;
this.safeBrowsingService = safeBrowsingService;
}
-
-
private List configs;
private QRCodeTypeEntity defaultQRCodeTypeEntity;
- private Map qrCodeTypeMap;
@PostConstruct
public void loadQRCodeTypes() {
@@ -63,15 +64,23 @@ public class QRCodeTypeService {
.filter(config -> config.getType().equals(DEFAULT_QR_CODE_TYPE))
.findFirst()
.orElse(null);
- // Construct the tableMap with key = qrCodeTypeId, value = tableName
- qrCodeTypeMap = configs.stream().collect(Collectors.toMap(QRCodeTypeEntity::getId, Function.identity()));
- logger.info("QRCodeType map: {}", qrCodeTypeMap);
}
public List getAllTypes() {
return configs;
}
+ // Get scanned qrcode details
+ public BaseScanResponse getScannedQRCodeDetails(UUID qrCodeId){
+ // Find scanned qr code in qr code table
+ QRCodeEntity qrCodeEntity = qrCodeRepository.findById(qrCodeId)
+ .orElseThrow(() -> new QRCodeExceptions("QR Code not found with id: " + qrCodeId));
+ logger.info("qrCodeEntity: {}", qrCodeEntity);
+ QRCodeModel> qrCodeModel = qrCodeFactoryProvider.createQRCodeInstance(qrCodeEntity);
+ logger.info("Retrieved details: {}", qrCodeModel.getDetails());
+ return BaseScanResponse.builder().qrcode(qrCodeModel).build();
+ }
+ // Process Scanned QR Code
public BaseScanResponse scanQRCode(String userId, QRCodePayload payload) {
String data = payload.getData();
logger.info("scanQRCode: userId={}, data={}", userId, data);
@@ -97,7 +106,7 @@ public class QRCodeTypeService {
.build());
}
// Create the QR Code Instance based on the QR Code Type & insert into the respective table
- QRCodeModel qrCodeModel = qrCodeFactoryProvider.createQRCodeInstance(scannedQR);
+ QRCodeModel> qrCodeModel = qrCodeFactoryProvider.createQRCodeInstance(scannedQR);
qrCodeModel.setDetails();
return BaseScanResponse.builder().qrcode(qrCodeModel).build();
@@ -109,10 +118,6 @@ public class QRCodeTypeService {
.findFirst()
.orElse(defaultQRCodeTypeEntity);
}
- // Returns name of table given type
- public QRCodeTypeEntity getQRCodeMap(Long qrTypeId) {
- return qrCodeTypeMap.get(qrTypeId);
- }
public Mono detectType(QRCodePayload payload) {
String data = payload.getData();
diff --git a/src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java b/src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java
index 3d375e8..82ff172 100644
--- a/src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java
+++ b/src/main/java/com/safeqr/app/qrcode/service/RedirectCountService.java
@@ -1,7 +1,7 @@
package com.safeqr.app.qrcode.service;
-import com.safeqr.app.qrcode.dto.QRCodePayload;
+import com.safeqr.app.qrcode.dto.request.QRCodePayload;
import com.safeqr.app.qrcode.dto.RedirectCountResponse;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
diff --git a/src/main/java/com/safeqr/app/qrcode/service/URLVerificationService.java b/src/main/java/com/safeqr/app/qrcode/service/URLVerificationService.java
index 25fcbf0..9cbb891 100644
--- a/src/main/java/com/safeqr/app/qrcode/service/URLVerificationService.java
+++ b/src/main/java/com/safeqr/app/qrcode/service/URLVerificationService.java
@@ -1,7 +1,9 @@
package com.safeqr.app.qrcode.service;
import static com.safeqr.app.constants.CommonConstants.*;
-import com.safeqr.app.qrcode.dto.QRCodePayload;
+
+import com.safeqr.app.exceptions.QRCodeExceptions;
+import com.safeqr.app.qrcode.dto.request.QRCodePayload;
import com.safeqr.app.qrcode.dto.URLVerificationResponse;
import com.safeqr.app.qrcode.entity.URLEntity;
import com.safeqr.app.qrcode.repository.URLRepository;
@@ -25,6 +27,12 @@ public class URLVerificationService {
this.urlRepository = urlRepository;
}
+ public URLEntity getURLEntityByQRCodeId(UUID qrCodeId) {
+ logger.info("qrCodeId retrieving: {}", qrCodeId);
+ return urlRepository.findByQrCodeId(qrCodeId)
+ .orElseThrow(() -> new QRCodeExceptions("URL not found for QR Code id: " + qrCodeId));
+ }
+
public void insertDB(URLEntity urlEntity) {
urlRepository.save(urlEntity);
}
diff --git a/src/main/java/com/safeqr/app/qrcode/service/VirusTotalService.java b/src/main/java/com/safeqr/app/qrcode/service/VirusTotalService.java
index 7913357..acc2171 100644
--- a/src/main/java/com/safeqr/app/qrcode/service/VirusTotalService.java
+++ b/src/main/java/com/safeqr/app/qrcode/service/VirusTotalService.java
@@ -2,7 +2,7 @@
package com.safeqr.app.qrcode.service;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.safeqr.app.qrcode.dto.QRCodePayload;
+import com.safeqr.app.qrcode.dto.request.QRCodePayload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 7e0b90c..e927dbf 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -14,7 +14,7 @@ spring.datasource.url=${SERVER_DB_URL}
spring.datasource.username=${SERVER_DB_USERNAME}
spring.datasource.password=${SERVER_DB_PASSWORD}
spring.datasource.driver-class-name=${SERVER_DB_DRIVER_CLASS_NAME}
-#spring.jpa.database-platform=${SERVER_DB_DIALECT}
+spring.jpa.database-platform=${SERVER_DB_DIALECT}
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true