diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/dto/ThirdPartyUserDTO.java b/aconnect/src/main/java/com/mfsys/aconnect/client/dto/ThirdPartyUserDTO.java index 0988f2f..5b32297 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/dto/ThirdPartyUserDTO.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/dto/ThirdPartyUserDTO.java @@ -12,9 +12,14 @@ public class ThirdPartyUserDTO { private String operation; private String porOrgacode; private String usercode; - private Map filesMap; - private List autoIncrementFields; private List> uniqueConstraints; private List formCounters; - private String payload; + private String susUsercode; + private String susName; + private String susEmpcode; + private String susPassword; + private Boolean susActive; + private String susUsercellno; + private Boolean susThirdparty; + private String susEmail; } diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java index a57c9f3..d5c68a6 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java @@ -4,11 +4,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.mfsys.aconnect.client.dto.ThirdPartyUserDTO; import com.mfsys.aconnect.configuration.config.WebClientConfig; import com.mfsys.aconnect.usermanagement.dto.UserDTOs; +import com.mfsys.aconnect.usermanagement.exceptions.EmailAlreadyExistException; +import com.mfsys.aconnect.usermanagement.exceptions.UsernameAlreadyExistException; +import com.mfsys.aconnect.usermanagement.repository.UserRepository; import com.mfsys.aconnect.usermanagement.model.Role; import com.mfsys.aconnect.usermanagement.service.UserService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.http.*; + +import java.util.Arrays; +import java.util.HashMap; import java.util.Map; @Service @@ -20,16 +26,28 @@ public class ThirdPartyUserService { private final WebClientConfig webClientConfig; private final UserService userService; private final ObjectMapper objectMapper; + private final UserRepository userRepository; - public ThirdPartyUserService(WebClientConfig webClientConfig, UserService userService, ObjectMapper objectMapper){ + public ThirdPartyUserService(WebClientConfig webClientConfig, UserService userService, ObjectMapper objectMapper, UserRepository userRepository){ this.webClientConfig = webClientConfig; this.userService = userService; this.objectMapper = objectMapper; + this.userRepository = userRepository; } public Object createThirdPartyUser(ThirdPartyUserDTO request, String token){ String porOrgacode = request.getPorOrgacode(); - String url = securityURI + "/security/user"; + String url = securityURI + "/security/thirdParty/user"; + + if (userRepository.existsByUserId(request.getSusUsercode())) { + throw new UsernameAlreadyExistException(porOrgacode); + } + if (userRepository.existsByEmail(request.getSusEmail())) { + throw new EmailAlreadyExistException(porOrgacode); + } + + Map payloadMap = buildPayload(request); + Map ciihiveRequest = buildCiihiveRequest(request, payloadMap); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", token); @@ -37,35 +55,78 @@ public class ThirdPartyUserService { headers.set("SUS_USERCODE", request.getUsercode()); headers.setContentType(MediaType.APPLICATION_JSON); - ResponseEntity response = webClientConfig.post(url, request, headers); + ResponseEntity response = webClientConfig.post(url, ciihiveRequest, headers); if (response.getStatusCode().is2xxSuccessful()) { saveToAconnect(request); } return response.getBody(); } - private void saveToAconnect(ThirdPartyUserDTO request) { + private Map buildPayload(ThirdPartyUserDTO request) { + Map payload = new HashMap<>(); + payload.put("SUS_USERCODE", request.getSusUsercode()); + payload.put("SUS_NAME", request.getSusName()); + payload.put("SUS_EMPCODE", request.getSusEmpcode()); + payload.put("SUS_PASSWORD", request.getSusPassword()); + payload.put("SUS_ACTIVE", request.getSusActive() != null ? request.getSusActive() : true); + payload.put("SUS_USERCELLNO", request.getSusUsercellno()); + payload.put("SUS_THIRDPARTY", request.getSusThirdparty() != null ? request.getSusThirdparty() : true); + payload.put("SUS_EMAIL", request.getSusEmail()); + payload.put("POR_ORGACODE", request.getPorOrgacode()); + + payload.put("SUS_TRACKING", true); + payload.put("IS_2ND_LEVEL_ALLOWED", false); + payload.put("TELLER_PROFILE", false); + payload.put("SHOW_LICENSE_INFO", false); + payload.put("SUS_SIGNLOG", "A"); + payload.put("@_CREATEUSER", request.getUsercode()); + payload.put("SUL_LEVELCODE", Arrays.asList( + "01","02","03","04","05","06","07","08","09","10", "11","12","13","14","15","16","17","18","19","20", "21","22","23","24","25","26","27","28","29","30", "31","32","33" + )); + payload.put("SUS_MULTILOGIN", Arrays.asList( + "0011","000403","0006","0005","0007","000602","001102", "000902","0001","0002","0004","000703","000402","0009", "000404","000202","0098","000903","000702","0010" + )); + payload.put("SUS_HOMELOCATION", "0001"); + + return payload; + } + + private Map buildCiihiveRequest(ThirdPartyUserDTO request, Map payloadMap) { try { - Map payloadMap = objectMapper.readValue(request.getPayload(), Map.class); + Map ciihiveRequest = new HashMap<>(); + ciihiveRequest.put("formId", request.getFormId()); + ciihiveRequest.put("postProcessFormId", request.getPostProcessFormId()); + ciihiveRequest.put("workFlowId", request.getWorkFlowId()); + ciihiveRequest.put("operation", request.getOperation()); + ciihiveRequest.put("POR_ORGACODE", request.getPorOrgacode()); + ciihiveRequest.put("uniqueConstraints", request.getUniqueConstraints()); + ciihiveRequest.put("formCounters", request.getFormCounters()); + ciihiveRequest.put("payload", objectMapper.writeValueAsString(payloadMap)); + return ciihiveRequest; + } catch (Exception e) { + throw new RuntimeException("Failed to build Ciihive request: " + e.getMessage()); + } + } + private void saveToAconnect(ThirdPartyUserDTO request) { + try { UserDTOs.UserRequest userRequest = new UserDTOs.UserRequest(); - userRequest.setUserId(getStr(payloadMap, "SUS_USERCODE")); - userRequest.setPorOrgacode(getStr(payloadMap, "POR_ORGACODE")); - userRequest.setUserFullname(getStr(payloadMap, "SUS_NAME")); - userRequest.setPassword(getStr(payloadMap, "SUS_PASSWORD")); - userRequest.setEmail(getStr(payloadMap, "SUS_EMAIL")); + userRequest.setUserId(request.getSusUsercode()); + userRequest.setPorOrgacode(request.getPorOrgacode()); + userRequest.setUserFullname(request.getSusName()); + userRequest.setPassword(request.getSusPassword()); + userRequest.setEmail(request.getSusEmail()); userRequest.setRole(Role.USER); userService.createUser(userRequest); - } catch (Exception e) { System.err.println("Failed to save third party user to Aconnect: " + e.getMessage()); } } - private String getStr(Map map, String key) { - Object val = map.get(key); - return val != null ? val.toString() : null; - } +// private String getStr(Map map, String key) { +// Object val = map.get(key); +// return val != null ? val.toString() : null; +// } }