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

Changes

parent 9a5d6a13
...@@ -8,6 +8,9 @@ import org.springframework.stereotype.Repository; ...@@ -8,6 +8,9 @@ import org.springframework.stereotype.Repository;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
@Repository @Repository
public class DepartmentClient implements IDepartmentClient { public class DepartmentClient implements IDepartmentClient {
...@@ -21,8 +24,16 @@ public class DepartmentClient implements IDepartmentClient { ...@@ -21,8 +24,16 @@ public class DepartmentClient implements IDepartmentClient {
@Override @Override
public Mono<DepartmentDetails> fetchDepartmentById(Long departmentId) { public Mono<DepartmentDetails> fetchDepartmentById(Long departmentId) {
try {
TimeUnit.SECONDS.sleep(30l);
}catch (Exception e){
}
return departmentWebClient.build().get() return departmentWebClient.build().get()
.uri(uriBuilder -> uriBuilder.path("/v1/find/{departmentId}").build(departmentId)) .uri(uriBuilder -> uriBuilder.path("/v1/find/{departmentId}").build(departmentId))
.retrieve().bodyToMono(DepartmentDetails.class); .retrieve().bodyToMono(DepartmentDetails.class);
} }
} }
...@@ -9,6 +9,9 @@ import org.springframework.stereotype.Repository; ...@@ -9,6 +9,9 @@ import org.springframework.stereotype.Repository;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
@Repository @Repository
public class ProjectClient implements IProjectClient { public class ProjectClient implements IProjectClient {
...@@ -21,6 +24,11 @@ public class ProjectClient implements IProjectClient { ...@@ -21,6 +24,11 @@ public class ProjectClient implements IProjectClient {
@Override @Override
public Mono<ProjectDetails> findProjectDetails(Long projectId) { public Mono<ProjectDetails> findProjectDetails(Long projectId) {
try {
TimeUnit.SECONDS.sleep(10l);
}catch (Exception e){
}
return projectWebClient.build().get() return projectWebClient.build().get()
.uri(uriBuilder -> uriBuilder.path("/v1/find/{projectId}").build(projectId)) .uri(uriBuilder -> uriBuilder.path("/v1/find/{projectId}").build(projectId))
.retrieve().bodyToMono(ProjectDetails.class); .retrieve().bodyToMono(ProjectDetails.class);
......
package com.nisum.poc.facade.response; 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 Long departmentId;
private String departmentName; private String departmentName;
......
...@@ -5,11 +5,13 @@ import lombok.Builder; ...@@ -5,11 +5,13 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data @Data
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class EmployeeDetails { public class EmployeeDetails implements Serializable {
private Long employeeId; private Long employeeId;
private String firstName; private String firstName;
......
...@@ -5,11 +5,13 @@ import lombok.Builder; ...@@ -5,11 +5,13 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data @Data
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class EmployeeFacadeResponse { public class EmployeeFacadeResponse implements Serializable {
private Long employeeId; private Long employeeId;
private String firstName; private String firstName;
......
package com.nisum.poc.facade.response; 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 Long projectId;
private String projectName; private String projectName;
......
...@@ -41,21 +41,27 @@ public class EmployeeService implements IEmployeeService { ...@@ -41,21 +41,27 @@ public class EmployeeService implements IEmployeeService {
Mono<EmployeeDetails> monoEmployeeDetails = employeeClient.findEmployeeDetails(empId); 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); EmployeeFacadeResponse response = constructEmployeeFacadeResponse(employeeDetails);
Long deptId = employeeDetails.getDeptId(); Long deptId = employeeDetails.getDeptId();
Long projectId = employeeDetails.getProjectId(); 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 -> {
response.setDepartmentDetails(objects.getT1());
response.setProjectDetails(objects.getT2());
return response; return response;
});
} }
private Object getFacadeResponse(ProjectDetails project, EmployeeFacadeResponse 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