added other types of qrcodes like phone, sms, email, wifi

This commit is contained in:
heyethereum
2024-07-18 00:47:01 +08:00
parent 3e0ad7db2d
commit 686c4f939e
35 changed files with 612 additions and 132 deletions

View File

@@ -0,0 +1,36 @@
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class EmailModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(EmailModel.class);
@JsonIgnore
private final EmailVerificationService emailVerificationService;
EmailEntity details;
public EmailModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, EmailVerificationService emailVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.emailVerificationService = emailVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = EmailEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into email table
emailVerificationService.insertDB(details);
}
}

View File

@@ -0,0 +1,36 @@
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.PhoneEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.PhoneVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class PhoneModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(PhoneModel.class);
@JsonIgnore
private final PhoneVerificationService phoneVerificationService;
PhoneEntity details;
public PhoneModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, PhoneVerificationService phoneVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.phoneVerificationService = phoneVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = PhoneEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into phone table
phoneVerificationService.insertDB(details);
}
}

View File

@@ -9,5 +9,5 @@ public abstract class QRCodeModel {
QRCodeEntity scannedQRCode;
QRCodeTypeEntity qrCode;
public abstract void insertDB();
public abstract void setDetails();
}

View File

@@ -0,0 +1,36 @@
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.SMSEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.SMSVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class SMSModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(SMSModel.class);
@JsonIgnore
private final SMSVerificationService smsVerificationService;
SMSEntity details;
public SMSModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, SMSVerificationService smsVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.smsVerificationService = smsVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = SMSEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into sms table
smsVerificationService.insertDB(details);
}
}

View File

@@ -2,9 +2,8 @@ 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.QRCodeTextEntity;
import com.safeqr.app.qrcode.entity.TextEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.repository.TextRepository;
import com.safeqr.app.qrcode.service.TextVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -13,28 +12,25 @@ import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class QRCodeText extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(QRCodeText.class);
public class TextModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(TextModel.class);
@JsonIgnore
private final TextVerificationService textVerificationService;
@JsonIgnore
private final TextRepository textRepository;
QRCodeTextEntity details;
TextEntity details;
public QRCodeText(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, TextVerificationService textVerificationService, TextRepository textRepository) {
public TextModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, TextVerificationService textVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.textVerificationService = textVerificationService;
this.textRepository = textRepository;
this.details = null;
}
@Override
public void insertDB() {
details = QRCodeTextEntity.builder().qrCodeId(scannedQRCode.getId()).text(scannedQRCode.getContents()).build();
// Insert into URL table
textRepository.save(details);
public void setDetails() {
details = TextEntity.builder().qrCodeId(scannedQRCode.getId()).text(scannedQRCode.getContents()).build();
// Insert into text table
textVerificationService.insertDB(details);
}
}

View File

@@ -3,12 +3,12 @@ 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.QRCodeTypeEntity;
import com.safeqr.app.qrcode.entity.QRCodeURLEntity;
import com.safeqr.app.qrcode.repository.URLRepository;
import com.safeqr.app.qrcode.entity.URLEntity;
import com.safeqr.app.qrcode.service.URLVerificationService;
import lombok.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
import java.net.URISyntaxException;
@@ -16,25 +16,22 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class QRCodeURL extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(QRCodeURL.class);
public class URLModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(URLModel.class);
@JsonIgnore
private final URLVerificationService urlVerificationService;
@JsonIgnore
private final URLRepository urlRepository;
QRCodeURLEntity details;
public QRCodeURL(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, URLVerificationService urlVerificationService, URLRepository urlRepository) {
URLEntity details;
@Autowired
public URLModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, URLVerificationService urlVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.urlVerificationService = urlVerificationService;
this.urlRepository = urlRepository;
this.details = null;
}
@Override
public void insertDB() {
public void setDetails() {
String url = scannedQRCode.getContents();
try {
details = urlVerificationService.breakdownURL(url);
@@ -45,7 +42,7 @@ public class QRCodeURL extends QRCodeModel {
details.setRedirectChain(redirectChain);
// Insert into URL table
urlRepository.save(details);
urlVerificationService.insertDB(details);
} catch (IOException | URISyntaxException e) {
logger.error("Error: ", e);

View File

@@ -0,0 +1,36 @@
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.WifiEntity;
import com.safeqr.app.qrcode.entity.QRCodeTypeEntity;
import com.safeqr.app.qrcode.service.WifiVerificationService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@EqualsAndHashCode(callSuper = true)
@Data
public class WifiModel extends QRCodeModel {
private static final Logger logger = LoggerFactory.getLogger(WifiModel.class);
@JsonIgnore
private final WifiVerificationService wifiVerificationService;
WifiEntity details;
public WifiModel(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity, WifiVerificationService wifiVerificationService) {
this.scannedQRCode = scannedQRCodeEntity;
this.qrCode = qrCodeTypeEntity;
this.wifiVerificationService = wifiVerificationService;
this.details = null;
}
@Override
public void setDetails() {
details = WifiEntity.builder().qrCodeId(scannedQRCode.getId()).build();
// Insert into wifi table
wifiVerificationService.insertDB(details);
}
}

View File

@@ -0,0 +1,24 @@
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;
import org.springframework.stereotype.Component;
@Component
public class EmailFactory implements QRCodeFactory<EmailModel> {
private final EmailVerificationService emailVerificationService;
@Autowired
public EmailFactory(EmailVerificationService emailVerificationService) {
this.emailVerificationService = emailVerificationService;
}
@Override
public EmailModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new EmailModel(scannedQRCodeEntity, qrCodeTypeEntity, emailVerificationService);
}
}

View File

@@ -0,0 +1,24 @@
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;
import org.springframework.stereotype.Component;
@Component
public class PhoneFactory implements QRCodeFactory<PhoneModel> {
private final PhoneVerificationService phoneVerificationService;
@Autowired
public PhoneFactory(PhoneVerificationService phoneVerificationService) {
this.phoneVerificationService = phoneVerificationService;
}
@Override
public PhoneModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new PhoneModel(scannedQRCodeEntity, qrCodeTypeEntity, phoneVerificationService);
}
}

View File

@@ -9,17 +9,21 @@ import org.springframework.stereotype.Component;
@Component
public class QRCodeFactoryProvider {
private final ApplicationContext applicationContext;
@Autowired
private ApplicationContext applicationContext;
public QRCodeFactoryProvider(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
public QRCodeModel createQRCodeInstance(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
switch (qrCodeTypeEntity.getType().toUpperCase()) {
case "URL":
return applicationContext.getBean(QRCodeURLFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
case "TEXT":
return applicationContext.getBean(QRCodeTextFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
default:
throw new IllegalArgumentException("Unsupported QR code type: " + qrCodeTypeEntity.getType());
}
return switch (qrCodeTypeEntity.getType().toUpperCase()) {
case "URL" -> applicationContext.getBean(URLFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
case "PHONE" -> applicationContext.getBean(PhoneFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
case "SMS" -> applicationContext.getBean(SMSFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
case "EMAIL" -> applicationContext.getBean(EmailFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
case "WIFI" -> applicationContext.getBean(WifiFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
case "TEXT" -> applicationContext.getBean(TextFactory.class).create(scannedQRCodeEntity, qrCodeTypeEntity);
default -> throw new IllegalArgumentException("Unsupported QR code type: " + qrCodeTypeEntity.getType());
};
}
}

View File

@@ -1,23 +0,0 @@
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.QRCodeText;
import com.safeqr.app.qrcode.repository.TextRepository;
import com.safeqr.app.qrcode.service.TextVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class QRCodeTextFactory implements QRCodeFactory<QRCodeText> {
@Autowired
private TextVerificationService textVerificationService;
@Autowired
private TextRepository textRepository;
@Override
public QRCodeText create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new QRCodeText(scannedQRCodeEntity, qrCodeTypeEntity, textVerificationService, textRepository);
}
}

View File

@@ -1,23 +0,0 @@
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.QRCodeURL;
import com.safeqr.app.qrcode.repository.URLRepository;
import com.safeqr.app.qrcode.service.URLVerificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class QRCodeURLFactory implements QRCodeFactory<QRCodeURL> {
@Autowired
private URLVerificationService urlVerificationService;
@Autowired
private URLRepository urlRepository;
@Override
public QRCodeURL create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new QRCodeURL(scannedQRCodeEntity, qrCodeTypeEntity, urlVerificationService, urlRepository);
}
}

View File

@@ -0,0 +1,24 @@
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;
import org.springframework.stereotype.Component;
@Component
public class SMSFactory implements QRCodeFactory<SMSModel> {
private final SMSVerificationService smsVerificationService;
@Autowired
public SMSFactory(SMSVerificationService smsVerificationService) {
this.smsVerificationService = smsVerificationService;
}
@Override
public SMSModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new SMSModel(scannedQRCodeEntity, qrCodeTypeEntity, smsVerificationService);
}
}

View File

@@ -0,0 +1,24 @@
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;
import org.springframework.stereotype.Component;
@Component
public class TextFactory implements QRCodeFactory<TextModel> {
private final TextVerificationService textVerificationService;
@Autowired
public TextFactory(TextVerificationService textVerificationService) {
this.textVerificationService = textVerificationService;
}
@Override
public TextModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new TextModel(scannedQRCodeEntity, qrCodeTypeEntity, textVerificationService);
}
}

View File

@@ -0,0 +1,23 @@
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;
import org.springframework.stereotype.Component;
@Component
public class URLFactory implements QRCodeFactory<URLModel> {
private final URLVerificationService urlVerificationService;
@Autowired
public URLFactory(URLVerificationService urlVerificationService) {
this.urlVerificationService = urlVerificationService;
}
@Override
public URLModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new URLModel(scannedQRCodeEntity, qrCodeTypeEntity, urlVerificationService);
}
}

View File

@@ -0,0 +1,24 @@
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;
import org.springframework.stereotype.Component;
@Component
public class WifiFactory implements QRCodeFactory<WifiModel> {
private final WifiVerificationService wifiVerificationService;
@Autowired
public WifiFactory(WifiVerificationService wifiVerificationService) {
this.wifiVerificationService = wifiVerificationService;
}
@Override
public WifiModel create(QRCodeEntity scannedQRCodeEntity, QRCodeTypeEntity qrCodeTypeEntity) {
return new WifiModel(scannedQRCodeEntity, qrCodeTypeEntity, wifiVerificationService);
}
}