Commit f63dcecb authored by Ansal M A's avatar Ansal M A

Changes

parent 9a5d6a13
......@@ -8,6 +8,9 @@ import org.springframework.stereotype.Repository;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
@Repository
public class DepartmentClient implements IDepartmentClient {
......@@ -21,8 +24,16 @@ public class DepartmentClient implements IDepartmentClient {
@Override
public Mono<DepartmentDetails> fetchDepartmentById(Long departmentId) {
try {
TimeUnit.SECONDS.sleep(30l);
}catch (Exception e){
}
return departmentWebClient.build().get()
.uri(uriBuilder -> uriBuilder.path("/v1/find/{departmentId}").build(departmentId))
.retrieve().bodyToMono(DepartmentDetails.class);
}
}
......@@ -9,6 +9,9 @@ import org.springframework.stereotype.Repository;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
@Repository
public class ProjectClient implements IProjectClient {
......@@ -21,6 +24,11 @@ public class ProjectClient implements IProjectClient {
@Override
public Mono<ProjectDetails> findProjectDetails(Long projectId) {
try {
TimeUnit.SECONDS.sleep(10l);
}catch (Exception e){
}
return projectWebClient.build().get()
.uri(uriBuilder -> uriBuilder.path("/v1/find/{projectId}").build(projectId))
.retrieve().bodyToMono(ProjectDetails.class);
......
package com.nisum.poc.facade.response;
public class DepartmentDetails {
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DepartmentDetails implements Serializable {
private Long departmentId;
private String departmentName;
......
......@@ -5,11 +5,13 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeDetails {
public class EmployeeDetails implements Serializable {
private Long employeeId;
private String firstName;
......
......@@ -5,11 +5,13 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeFacadeResponse {
public class EmployeeFacadeResponse implements Serializable {
private Long employeeId;
private String firstName;
......
package com.nisum.poc.facade.response;
public class ProjectDetails {
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ProjectDetails implements Serializable {
private Long projectId;
private String projectName;
......
......@@ -41,21 +41,27 @@ public class EmployeeService implements IEmployeeService {
Mono<EmployeeDetails> monoEmployeeDetails = employeeClient.findEmployeeDetails(empId);
return monoEmployeeDetails.map(this ::findProjectAndDeptDetails);
return monoEmployeeDetails.zipWhen(employeeDetails -> findProjectAndDeptDetails(employeeDetails),
(employeeDetails, facadeResponse) -> facadeResponse);
}
private EmployeeFacadeResponse findProjectAndDeptDetails(EmployeeDetails employeeDetails){
private Mono<EmployeeFacadeResponse> findProjectAndDeptDetails(EmployeeDetails employeeDetails){
EmployeeFacadeResponse response = constructEmployeeFacadeResponse(employeeDetails);
Long deptId = employeeDetails.getDeptId();
Long projectId = employeeDetails.getProjectId();
departmentClient.fetchDepartmentById(deptId).map(dept -> getFacadeResponse(dept, response));
Mono<DepartmentDetails> departmentDetailsMono = departmentClient.fetchDepartmentById(deptId);
Mono<ProjectDetails> projectDetailsMono = projectClient.findProjectDetails(projectId);
projectClient.findProjectDetails(projectId).map(proj -> getFacadeResponse(proj, response));
return Mono.zip(departmentDetailsMono, projectDetailsMono).map( objects -> {
return response;
response.setDepartmentDetails(objects.getT1());
response.setProjectDetails(objects.getT2());
return response;
});
}
private Object getFacadeResponse(ProjectDetails project, EmployeeFacadeResponse response) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment