package com.xuqm.license.controller; import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonProperty; import com.xuqm.common.model.ApiResponse; import com.xuqm.license.service.DeviceService; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Map; @RestController @RequestMapping("/api/license") public class LicensePublicController { private final DeviceService deviceService; public LicensePublicController(DeviceService deviceService) { this.deviceService = deviceService; } @PostMapping("/register") public ResponseEntity>> register(@Valid @RequestBody RegisterRequest req) { DeviceService.RegisterResult result = deviceService.register( req.companyId(), req.deviceId(), req.deviceName(), req.deviceModel(), req.deviceVendor(), req.osVersion()); Map data = new java.util.LinkedHashMap<>(); data.put("success", result.success()); data.put("token", result.token()); if (result.message() != null) { data.put("message", result.message()); } return ResponseEntity.ok(ApiResponse.success(data)); } @PostMapping("/verify") public ResponseEntity>> verify(@Valid @RequestBody VerifyRequest req) { DeviceService.VerifyResult result = deviceService.verify(req.companyId(), req.deviceId(), req.token()); Map data = new java.util.LinkedHashMap<>(); data.put("valid", result.valid()); if (result.error() != null) { data.put("error", result.error()); } return ResponseEntity.ok(ApiResponse.success(data)); } public record RegisterRequest( @NotBlank @JsonProperty("companyId") @JsonAlias("company_id") String companyId, @NotBlank @JsonProperty("deviceId") @JsonAlias("device_id") String deviceId, @JsonProperty("deviceName") @JsonAlias("device_name") String deviceName, @JsonProperty("deviceModel") @JsonAlias("device_model") String deviceModel, @JsonProperty("deviceVendor") @JsonAlias("device_vendor") String deviceVendor, @JsonProperty("osVersion") @JsonAlias("os_version") String osVersion ) {} public record VerifyRequest( @NotBlank @JsonProperty("companyId") @JsonAlias("company_id") String companyId, @NotBlank @JsonProperty("deviceId") @JsonAlias("device_id") String deviceId, @NotBlank String token ) {} }