/
Integrating with User service
Integrating with User service
c. Integration with User service - Integration with user service requires the following steps -
i) Create a new class under utils by the name of UserUtil
and update the User
POJO to have the following content -
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {
@JsonProperty("id")
private Long id = null;
@JsonProperty("uuid")
private String uuid = null;
@JsonProperty("userName")
private String userName = null;
@JsonProperty("password")
private String password = null;
@JsonProperty("salutation")
private String salutation = null;
@JsonProperty("name")
private String name = null;
@JsonProperty("gender")
private String gender = null;
@JsonProperty("mobileNumber")
private String mobileNumber = null;
@JsonProperty("emailId")
private String emailId = null;
@JsonProperty("altContactNumber")
private String altContactNumber = null;
@JsonProperty("pan")
private String pan = null;
@JsonProperty("aadhaarNumber")
private String aadhaarNumber = null;
@JsonProperty("permanentAddress")
private String permanentAddress = null;
@JsonProperty("permanentCity")
private String permanentCity = null;
@JsonProperty("permanentPincode")
private String permanentPincode = null;
@JsonProperty("correspondenceCity")
private String correspondenceCity = null;
@JsonProperty("correspondencePincode")
private String correspondencePincode = null;
@JsonProperty("correspondenceAddress")
private String correspondenceAddress = null;
@JsonProperty("active")
private Boolean active = null;
@JsonProperty("locale")
private String locale = null;
@JsonProperty("type")
private String type = null;
@JsonProperty("signature")
private String signature = null;
@JsonProperty("accountLocked")
private Boolean accountLocked = null;
@JsonProperty("roles")
@Valid
private List<Role> roles = null;
@JsonProperty("fatherOrHusbandName")
private String fatherOrHusbandName = null;
@JsonProperty("bloodGroup")
private String bloodGroup = null;
@JsonProperty("identificationMark")
private String identificationMark = null;
@JsonProperty("photo")
private String photo = null;
@JsonProperty("createdBy")
private Long createdBy = null;
@JsonProperty("lastModifiedBy")
private Long lastModifiedBy = null;
@JsonProperty("otpReference")
private String otpReference = null;
@JsonProperty("tenantId")
private String tenantId = null;
public User addRolesItem(Role rolesItem) {
if (this.roles == null) {
this.roles = new ArrayList<>();
}
this.roles.add(rolesItem);
return this;
}
}
ii) Annotate the created UserUtil
class with @Component
and add the following code in the created class -
@Component
public class UserUtil {
private ObjectMapper mapper;
private ServiceRequestRepository serviceRequestRepository;
private VTRConfiguration config;
@Autowired
public UserUtil(ObjectMapper mapper, ServiceRequestRepository serviceRequestRepository, VTRConfiguration config) {
this.mapper = mapper;
this.serviceRequestRepository = serviceRequestRepository;
this.config = config;
}
/**
* Returns UserDetailResponse by calling user service with given uri and object
* @param userRequest Request object for user service
* @param uri The address of the endpoint
* @return Response from user service as parsed as userDetailResponse
*/
public UserDetailResponse userCall(Object userRequest, StringBuilder uri) {
String dobFormat = null;
if(uri.toString().contains(config.getUserSearchEndpoint()) || uri.toString().contains(config.getUserUpdateEndpoint()))
dobFormat="yyyy-MM-dd";
else if(uri.toString().contains(config.getUserCreateEndpoint()))
dobFormat = "dd/MM/yyyy";
try{
LinkedHashMap responseMap = (LinkedHashMap)serviceRequestRepository.fetchResult(uri, userRequest);
parseResponse(responseMap,dobFormat);
UserDetailResponse userDetailResponse = mapper.convertValue(responseMap,UserDetailResponse.class);
return userDetailResponse;
}
catch(IllegalArgumentException e)
{
throw new CustomException("IllegalArgumentException","ObjectMapper not able to convertValue in userCall");
}
}
/**
* Parses date formats to long for all users in responseMap
* @param responeMap LinkedHashMap got from user api response
*/
public void parseResponse(LinkedHashMap responeMap, String dobFormat){
List<LinkedHashMap> users = (List<LinkedHashMap>)responeMap.get("user");
String format1 = "dd-MM-yyyy HH:mm:ss";
if(users!=null){
users.forEach( map -> {
map.put("createdDate",dateTolong((String)map.get("createdDate"),format1));
if((String)map.get("lastModifiedDate")!=null)
map.put("lastModifiedDate",dateTolong((String)map.get("lastModifiedDate"),format1));
if((String)map.get("dob")!=null)
map.put("dob",dateTolong((String)map.get("dob"),dobFormat));
if((String)map.get("pwdExpiryDate")!=null)
map.put("pwdExpiryDate",dateTolong((String)map.get("pwdExpiryDate"),format1));
}
);
}
}
/**
* Converts date to long
* @param date date to be parsed
* @param format Format of the date
* @return Long value of date
*/
private Long dateTolong(String date,String format){
SimpleDateFormat f = new SimpleDateFormat(format);
Date d = null;
try {
d = f.parse(date);
} catch (ParseException e) {
throw new CustomException("INVALID_DATE_FORMAT","Failed to parse date format in user");
}
return d.getTime();
}
/**
* enriches the userInfo with statelevel tenantId and other fields
* @param mobileNumber
* @param tenantId
* @param userInfo
*/
public void addUserDefaultFields(String mobileNumber,String tenantId, User userInfo){
Role role = getCitizenRole(tenantId);
userInfo.setRoles(Collections.singletonList(role));
userInfo.setType("CITIZEN");
userInfo.setUserName(mobileNumber);
userInfo.setTenantId(getStateLevelTenant(tenantId));
userInfo.setActive(true);
}
/**
* Returns role object for citizen
* @param tenantId
* @return
*/
private Role getCitizenRole(String tenantId){
Role role = new Role();
role.setCode("CITIZEN");
role.setName("Citizen");
role.setTenantId(getStateLevelTenant(tenantId));
return role;
}
public String getStateLevelTenant(String tenantId){
return tenantId.split("\\.")[0];
}
}
iii) Create the following POJOs -
@AllArgsConstructor
@Getter
@NoArgsConstructor
public class CreateUserRequest {
@JsonProperty("requestInfo")
private RequestInfo requestInfo;
@JsonProperty("user")
private User user;
}
@Getter
@Setter
public class UserSearchRequest {
@JsonProperty("RequestInfo")
private RequestInfo requestInfo;
@JsonProperty("uuid")
private List<String> uuid;
@JsonProperty("id")
private List<String> id;
@JsonProperty("userName")
private String userName;
@JsonProperty("name")
private String name;
@JsonProperty("mobileNumber")
private String mobileNumber;
@JsonProperty("aadhaarNumber")
private String aadhaarNumber;
@JsonProperty("pan")
private String pan;
@JsonProperty("emailId")
private String emailId;
@JsonProperty("fuzzyLogic")
private boolean fuzzyLogic;
@JsonProperty("active")
@Setter
private Boolean active;
@JsonProperty("tenantId")
private String tenantId;
@JsonProperty("pageSize")
private int pageSize;
@JsonProperty("pageNumber")
private int pageNumber = 0;
@JsonProperty("sort")
private List<String> sort = Collections.singletonList("name");
@JsonProperty("userType")
private String userType;
@JsonProperty("roleCodes")
private List<String> roleCodes;
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class UserDetailResponse {
@JsonProperty("responseInfo")
ResponseInfo responseInfo;
@JsonProperty("user")
List<User> user;
}
v) Create a class by the name of UserService
under service
folder and add the following content to it -
vi) Add the following properties in application.properties file -
, multiple selections available,
Related content
Integration with IdGen Service
Integration with IdGen Service
Read with this
Adding Persister Configuration
Adding Persister Configuration
Read with this
Importing core models
Importing core models
Read with this
Adding workflow configuration
Adding workflow configuration
Read with this
Integration with URL Shortener
Integration with URL Shortener
Read with this
Writing flyway migration scripts to create database tables
Writing flyway migration scripts to create database tables
Read with this