From a236eb13f849c924320970b6af8a81d439df25ed Mon Sep 17 00:00:00 2001 From: ltiongku Date: Fri, 19 Jul 2024 20:32:55 +0800 Subject: [PATCH] implemented fetch qr code scanned details --- pom.xml | 11 ++++--- .../safeqr/app/constants/APIConstants.java | 1 + .../safeqr/app/exceptions/ErrorResponse.java | 16 ++++++++++ .../exceptions/GlobalExceptionHandler.java | 15 ++++++++++ .../app/exceptions/QRCodeExceptions.java | 7 +++++ .../controller/QRCodeTypeController.java | 8 ++++- .../dto/{ => request}/QRCodePayload.java | 2 +- .../safeqr/app/qrcode/entity/URLEntity.java | 7 +++-- .../safeqr/app/qrcode/model/EmailModel.java | 11 ++++--- .../safeqr/app/qrcode/model/PhoneModel.java | 10 ++++--- .../safeqr/app/qrcode/model/QRCodeModel.java | 6 ++-- .../com/safeqr/app/qrcode/model/SMSModel.java | 10 ++++--- .../safeqr/app/qrcode/model/TextModel.java | 10 ++++--- .../com/safeqr/app/qrcode/model/URLModel.java | 11 ++++--- .../safeqr/app/qrcode/model/WifiModel.java | 10 ++++--- .../qrcode/model/factory/EmailFactory.java | 1 - .../qrcode/model/factory/PhoneFactory.java | 1 - .../qrcode/model/factory/QRCodeFactory.java | 3 +- .../model/factory/QRCodeFactoryProvider.java | 1 - .../app/qrcode/model/factory/SMSFactory.java | 1 - .../app/qrcode/model/factory/TextFactory.java | 1 - .../app/qrcode/model/factory/URLFactory.java | 1 - .../app/qrcode/model/factory/WifiFactory.java | 1 - .../qrcode/repository/EmailRepository.java | 4 +-- .../qrcode/repository/GenericRepository.java | 10 +++++++ .../qrcode/repository/PhoneRepository.java | 4 +-- .../qrcode/repository/QRCodeRepository.java | 4 +-- .../app/qrcode/repository/SMSRepository.java | 4 +-- .../app/qrcode/repository/TextRepository.java | 4 +-- .../app/qrcode/repository/URLRepository.java | 6 ++-- .../app/qrcode/repository/WifiRepository.java | 4 +-- .../app/qrcode/service/QRCodeTypeService.java | 29 +++++++++++-------- .../qrcode/service/RedirectCountService.java | 2 +- .../service/URLVerificationService.java | 10 ++++++- .../app/qrcode/service/VirusTotalService.java | 2 +- src/main/resources/application.properties | 2 +- 36 files changed, 148 insertions(+), 82 deletions(-) create mode 100644 src/main/java/com/safeqr/app/exceptions/ErrorResponse.java create mode 100644 src/main/java/com/safeqr/app/exceptions/GlobalExceptionHandler.java create mode 100644 src/main/java/com/safeqr/app/exceptions/QRCodeExceptions.java rename src/main/java/com/safeqr/app/qrcode/dto/{ => request}/QRCodePayload.java (80%) create mode 100644 src/main/java/com/safeqr/app/qrcode/repository/GenericRepository.java 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