diff --git a/license-service/src/main/java/com/xuqm/license/controller/LicenseInternalController.java b/license-service/src/main/java/com/xuqm/license/controller/LicenseInternalController.java index 83f25c9..bbcf76e 100644 --- a/license-service/src/main/java/com/xuqm/license/controller/LicenseInternalController.java +++ b/license-service/src/main/java/com/xuqm/license/controller/LicenseInternalController.java @@ -81,15 +81,17 @@ public class LicenseInternalController { } @GetMapping("/devices/{deviceId}") - public ResponseEntity> getDevice( + public ResponseEntity>> getDevice( @RequestHeader(value = "X-Internal-Token", required = false) String token, @PathVariable String deviceId) { if (!isAllowed(token)) { return ResponseEntity.status(403).body(ApiResponse.error(403, "Forbidden")); } - return deviceService.findByDeviceId(deviceId) - .map(d -> ResponseEntity.ok(ApiResponse.success(d))) - .orElse(ResponseEntity.ok(ApiResponse.error(404, "Device not found"))); + List devices = deviceService.findByDeviceId(deviceId); + if (devices.isEmpty()) { + return ResponseEntity.ok(ApiResponse.error(404, "Device not found")); + } + return ResponseEntity.ok(ApiResponse.success(devices)); } private boolean isAllowed(String token) { diff --git a/license-service/src/main/java/com/xuqm/license/entity/DeviceEntity.java b/license-service/src/main/java/com/xuqm/license/entity/DeviceEntity.java index 82603a5..8326bb8 100644 --- a/license-service/src/main/java/com/xuqm/license/entity/DeviceEntity.java +++ b/license-service/src/main/java/com/xuqm/license/entity/DeviceEntity.java @@ -4,10 +4,12 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import java.time.LocalDateTime; @Entity -@Table(name = "devices") +@Table(name = "devices", + uniqueConstraints = @UniqueConstraint(name = "uk_app_key_device_id", columnNames = {"app_key", "device_id"})) public class DeviceEntity { @Id diff --git a/license-service/src/main/java/com/xuqm/license/repository/DeviceRepository.java b/license-service/src/main/java/com/xuqm/license/repository/DeviceRepository.java index 3bff6de..0185d0b 100644 --- a/license-service/src/main/java/com/xuqm/license/repository/DeviceRepository.java +++ b/license-service/src/main/java/com/xuqm/license/repository/DeviceRepository.java @@ -9,7 +9,8 @@ import java.util.Optional; @Repository public interface DeviceRepository extends JpaRepository { - Optional findByDeviceId(String deviceId); + Optional findByAppKeyAndDeviceId(String appKey, String deviceId); + List findByDeviceId(String deviceId); List findByAppKeyOrderByRegisteredAtDesc(String appKey); long countByAppKeyAndIsActiveTrue(String appKey); } diff --git a/license-service/src/main/java/com/xuqm/license/service/DeviceService.java b/license-service/src/main/java/com/xuqm/license/service/DeviceService.java index b7b8fdb..4454474 100644 --- a/license-service/src/main/java/com/xuqm/license/service/DeviceService.java +++ b/license-service/src/main/java/com/xuqm/license/service/DeviceService.java @@ -34,7 +34,7 @@ public class DeviceService { this.objectMapper = objectMapper; } - public Optional findByDeviceId(String deviceId) { + public List findByDeviceId(String deviceId) { return deviceRepository.findByDeviceId(deviceId); } @@ -48,8 +48,8 @@ public class DeviceService { JsonNode userInfo) { validatePackageName(appKey, packageName); - // Check if device already registered - Optional existingOpt = findByDeviceId(deviceId); + // Check if device already registered for this app + Optional existingOpt = deviceRepository.findByAppKeyAndDeviceId(appKey, deviceId); if (existingOpt.isPresent()) { DeviceEntity existing = existingOpt.get(); if (!Boolean.TRUE.equals(existing.getIsActive())) { @@ -126,7 +126,7 @@ public class DeviceService { return new VerifyResult(false, "Token mismatch"); } - DeviceEntity device = findByDeviceId(deviceId).orElse(null); + DeviceEntity device = deviceRepository.findByAppKeyAndDeviceId(appKey, deviceId).orElse(null); if (device == null || !Boolean.TRUE.equals(device.getIsActive())) { return new VerifyResult(false, "Device not found or deactivated"); }