implemented fetch qr code scanned details

This commit is contained in:
ltiongku
2024-07-19 20:32:55 +08:00
parent 0af328977b
commit a236eb13f8
36 changed files with 148 additions and 82 deletions

View File

@@ -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<QRCodeTypeEntity> configs;
private QRCodeTypeEntity defaultQRCodeTypeEntity;
private Map<Long, QRCodeTypeEntity> 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<QRCodeTypeEntity> 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<String> detectType(QRCodePayload payload) {
String data = payload.getData();

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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;