From a08285ff432ee5954f1d2d7b75c313fe7f9692b7 Mon Sep 17 00:00:00 2001 From: heyethereum Date: Mon, 15 Jul 2024 08:43:57 +0800 Subject: [PATCH] edit scanned response --- .../app/qrcode/dto/response/ScanResponse.java | 5 +- .../com/safeqr/app/qrcode/entity/QRCode.java | 10 ++- .../safeqr/app/qrcode/entity/QRCodeType.java | 6 ++ .../app/qrcode/service/QRCodeTypeService.java | 63 ++++++++++++++++++- 4 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/safeqr/app/qrcode/dto/response/ScanResponse.java b/src/main/java/com/safeqr/app/qrcode/dto/response/ScanResponse.java index 86f6e32..d5c7252 100644 --- a/src/main/java/com/safeqr/app/qrcode/dto/response/ScanResponse.java +++ b/src/main/java/com/safeqr/app/qrcode/dto/response/ScanResponse.java @@ -1,5 +1,6 @@ package com.safeqr.app.qrcode.dto.response; +import com.safeqr.app.qrcode.entity.QRCode; import com.safeqr.app.qrcode.entity.QRCodeType; import lombok.Builder; import lombok.Data; @@ -7,6 +8,6 @@ import lombok.Data; @Data @Builder public class ScanResponse { - private String contents; - private String qrType; + private QRCode scannedQRCode; + private QRCodeType qrCodeType; } diff --git a/src/main/java/com/safeqr/app/qrcode/entity/QRCode.java b/src/main/java/com/safeqr/app/qrcode/entity/QRCode.java index 9984c49..8650d39 100644 --- a/src/main/java/com/safeqr/app/qrcode/entity/QRCode.java +++ b/src/main/java/com/safeqr/app/qrcode/entity/QRCode.java @@ -1,30 +1,38 @@ package com.safeqr.app.qrcode.entity; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; +import java.time.LocalDateTime; import java.util.UUID; @Entity @Table(name = "qr_code", schema = "safeqr") @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class QRCode { @Id + @JsonIgnore @GeneratedValue(generator = "UUID") @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator") @Column(updatable = false, nullable = false) private UUID id; + @JsonIgnore @Column(name = "qr_code_type_id", nullable = false) private Long qrCodeTypeId; private String userId; private String contents; @Column(name = "created_at", insertable = false, updatable = false) - private String createdAt; + private LocalDateTime createdAt; } diff --git a/src/main/java/com/safeqr/app/qrcode/entity/QRCodeType.java b/src/main/java/com/safeqr/app/qrcode/entity/QRCodeType.java index 777668c..b78418f 100644 --- a/src/main/java/com/safeqr/app/qrcode/entity/QRCodeType.java +++ b/src/main/java/com/safeqr/app/qrcode/entity/QRCodeType.java @@ -1,6 +1,7 @@ package com.safeqr.app.qrcode.entity; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.Data; @@ -10,10 +11,15 @@ import lombok.Data; public class QRCodeType { @Id + @JsonIgnore @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String type; private String description; + + @JsonIgnore private String prefix; + + @JsonIgnore private String tableName; } 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 3099b11..4441650 100644 --- a/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java +++ b/src/main/java/com/safeqr/app/qrcode/service/QRCodeTypeService.java @@ -17,8 +17,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import reactor.core.publisher.Mono; +import java.net.MalformedURLException; import java.security.NoSuchAlgorithmException; +import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.net.URL; @Service public class QRCodeTypeService { @@ -64,8 +69,11 @@ public class QRCodeTypeService { .userId(userId) .contents(data) .qrCodeTypeId(qrType.getId()) + .createdAt(LocalDateTime.now()) .build()); + // Insert qrcode into respective table based on type + insertIntoRespectiveTable(scannedQR); // Insert into Scan History table if userId is not null logger.info("scanQRCode: scannedQR new ID={}", scannedQR.getId()); @@ -78,8 +86,8 @@ public class QRCodeTypeService { } return ScanResponse.builder() - .contents(data) - .qrType(qrType.getType()) + .scannedQRCode(scannedQR) + .qrCodeType(qrType) .build(); } private QRCodeType getQRCodeType(String data) { @@ -88,6 +96,57 @@ public class QRCodeTypeService { .findFirst() .orElse(defaultQRCodeType); } + private void insertIntoRespectiveTable(QRCode qrCode) { + try { + String url = qrCode.getContents(); + Map breakdown = breakdownURL(url); + breakdown.forEach((key, value) -> logger.info("{}: {}", key, value)); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + + } + // Function to breakdown URL into subdomain, domain, topLevelDomain, query params, fragment + public Map breakdownURL(String urlString) throws MalformedURLException { + URL url = new URL(urlString); + Map breakdown = new HashMap<>(); + + String host = url.getHost(); + String[] hostParts = host.split("\\."); + + String subdomain = ""; + String domain = ""; + String topLevelDomain = ""; + + if (hostParts.length >= 2) { + topLevelDomain = hostParts[hostParts.length - 1]; + domain = hostParts[hostParts.length - 2]; + if (hostParts.length > 2) { + subdomain = String.join(".", java.util.Arrays.copyOfRange(hostParts, 0, hostParts.length - 2)); + } + } + + breakdown.put("Subdomain", subdomain.isEmpty() ? "None" : subdomain); + breakdown.put("Domain", domain); + breakdown.put("Top Level Domain", topLevelDomain); + + String query = url.getQuery(); + if (query != null) { + Map queryParams = new HashMap<>(); + for (String param : query.split("&")) { + String[] pair = param.split("="); + queryParams.put(pair[0], pair.length > 1 ? pair[1] : ""); + } + breakdown.put("Query Parameters", queryParams); + } else { + breakdown.put("Query Parameters", "None"); + } + + String fragment = url.getRef(); + breakdown.put("Fragment", fragment != null ? fragment : "None"); + + return breakdown; + } public Mono detectType(QRCodePayload payload) { String data = payload.getData();