Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
EmployeeServiceFacade
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ansal M A
EmployeeServiceFacade
Commits
9a5d6a13
Commit
9a5d6a13
authored
May 12, 2022
by
Ansal M A
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
parent
c28847ef
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
136 additions
and
20 deletions
+136
-20
pom.xml
pom.xml
+5
-0
EmployeeServiceFacadeApplication.java
...om/nisum/poc/facade/EmployeeServiceFacadeApplication.java
+2
-2
IDepartmentClient.java
...n/java/com/nisum/poc/facade/client/IDepartmentClient.java
+5
-1
IProjectClient.java
...main/java/com/nisum/poc/facade/client/IProjectClient.java
+5
-0
DepartmentClient.java
...va/com/nisum/poc/facade/client/impl/DepartmentClient.java
+8
-5
EmployeeClient.java
...java/com/nisum/poc/facade/client/impl/EmployeeClient.java
+5
-5
ProjectClient.java
.../java/com/nisum/poc/facade/client/impl/ProjectClient.java
+20
-0
EmployeeFacadeController.java
...nisum/poc/facade/controller/EmployeeFacadeController.java
+2
-1
EmployeeDetails.java
...n/java/com/nisum/poc/facade/response/EmployeeDetails.java
+3
-0
EmployeeFacadeResponse.java
...com/nisum/poc/facade/response/EmployeeFacadeResponse.java
+24
-0
IEmployeeService.java
...n/java/com/nisum/poc/facade/service/IEmployeeService.java
+2
-1
EmployeeService.java
...va/com/nisum/poc/facade/service/impl/EmployeeService.java
+55
-5
No files found.
pom.xml
View file @
9a5d6a13
...
...
@@ -42,6 +42,11 @@
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.modelmapper
</groupId>
<artifactId>
modelmapper
</artifactId>
<version>
3.1.0
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
...
...
src/main/java/com/nisum/poc/facade/EmployeeServiceFacadeApplication.java
View file @
9a5d6a13
...
...
@@ -22,13 +22,13 @@ public class EmployeeServiceFacadeApplication {
return
WebClient
.
builder
().
baseUrl
(
"lb://employee-ws/employee/"
);
}
@Bean
(
value
=
"depWebClient"
)
@Bean
(
value
=
"dep
artment
WebClient"
)
@LoadBalanced
public
WebClient
.
Builder
getDepWebClient
(){
return
WebClient
.
builder
().
baseUrl
(
"lb://department-ws/department/"
);
}
@Bean
(
value
=
"projWebClient"
)
@Bean
(
value
=
"proj
ect
WebClient"
)
@LoadBalanced
public
WebClient
.
Builder
getProjWebClient
(){
return
WebClient
.
builder
().
baseUrl
(
"lb://project-ws/project/"
);
...
...
src/main/java/com/nisum/poc/facade/client/IDepartmentClient.java
View file @
9a5d6a13
package
com
.
nisum
.
poc
.
facade
.
client
;
import
com.nisum.poc.facade.response.DepartmentDetails
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.web.reactive.function.client.WebClient
;
import
reactor.core.publisher.Mono
;
public
interface
IDepartmentClient
{
public
DepartmentDetails
fetchDepartmentById
(
Long
deptId
);
public
Mono
<
DepartmentDetails
>
fetchDepartmentById
(
Long
deptId
);
}
src/main/java/com/nisum/poc/facade/client/IProjectClient.java
View file @
9a5d6a13
package
com
.
nisum
.
poc
.
facade
.
client
;
import
com.nisum.poc.facade.response.ProjectDetails
;
import
reactor.core.publisher.Mono
;
public
interface
IProjectClient
{
public
Mono
<
ProjectDetails
>
findProjectDetails
(
Long
projectId
);
}
src/main/java/com/nisum/poc/facade/client/impl/DepartmentClient.java
View file @
9a5d6a13
...
...
@@ -6,20 +6,23 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.web.reactive.function.client.WebClient
;
import
reactor.core.publisher.Mono
;
@Repository
public
class
DepartmentClient
implements
IDepartmentClient
{
private
WebClient
.
Builder
employee
Client
;
private
final
WebClient
.
Builder
departmentWeb
Client
;
@Autowired
public
DepartmentClient
(
@Qualifier
(
"dep
WebClient"
)
WebClient
.
Builder
employee
Client
)
{
this
.
employeeClient
=
employee
Client
;
public
DepartmentClient
(
@Qualifier
(
"dep
artmentWebClient"
)
WebClient
.
Builder
departmentWeb
Client
)
{
this
.
departmentWebClient
=
departmentWeb
Client
;
}
@Override
public
DepartmentDetails
fetchDepartmentById
(
Long
deptId
)
{
return
null
;
public
Mono
<
DepartmentDetails
>
fetchDepartmentById
(
Long
departmentId
)
{
return
departmentWebClient
.
build
().
get
()
.
uri
(
uriBuilder
->
uriBuilder
.
path
(
"/v1/find/{departmentId}"
).
build
(
departmentId
))
.
retrieve
().
bodyToMono
(
DepartmentDetails
.
class
);
}
}
src/main/java/com/nisum/poc/facade/client/impl/EmployeeClient.java
View file @
9a5d6a13
...
...
@@ -13,22 +13,22 @@ import reactor.core.publisher.Mono;
@Repository
public
class
EmployeeClient
implements
IEmployeeClient
{
private
WebClient
.
Builder
employeeClient
;
private
WebClient
.
Builder
employee
Web
Client
;
@Autowired
public
EmployeeClient
(
@Qualifier
(
"empWebClient"
)
WebClient
.
Builder
employeeClient
)
{
this
.
employee
Client
=
employee
Client
;
public
EmployeeClient
(
@Qualifier
(
"empWebClient"
)
WebClient
.
Builder
employee
Web
Client
)
{
this
.
employee
WebClient
=
employeeWeb
Client
;
}
@Override
public
Flux
<
EmployeeDetails
>
fetchAllEmployee
()
{
return
employeeClient
.
build
().
get
().
uri
(
"all"
).
retrieve
().
bodyToFlux
(
EmployeeDetails
.
class
);
return
employee
Web
Client
.
build
().
get
().
uri
(
"all"
).
retrieve
().
bodyToFlux
(
EmployeeDetails
.
class
);
}
@Override
public
Mono
<
EmployeeDetails
>
findEmployeeDetails
(
Long
empId
)
{
return
employeeClient
.
build
().
get
()
return
employee
Web
Client
.
build
().
get
()
.
uri
(
uriBuilder
->
uriBuilder
.
path
(
"/v1/{empId}/details"
).
build
(
empId
))
.
retrieve
().
bodyToMono
(
EmployeeDetails
.
class
);
}
...
...
src/main/java/com/nisum/poc/facade/client/impl/ProjectClient.java
View file @
9a5d6a13
package
com
.
nisum
.
poc
.
facade
.
client
.
impl
;
import
com.nisum.poc.facade.client.IProjectClient
;
import
com.nisum.poc.facade.response.EmployeeDetails
;
import
com.nisum.poc.facade.response.ProjectDetails
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.web.reactive.function.client.WebClient
;
import
reactor.core.publisher.Mono
;
@Repository
public
class
ProjectClient
implements
IProjectClient
{
private
WebClient
.
Builder
projectWebClient
;
@Autowired
public
ProjectClient
(
@Qualifier
(
"projectWebClient"
)
WebClient
.
Builder
projectWebClient
)
{
this
.
projectWebClient
=
projectWebClient
;
}
@Override
public
Mono
<
ProjectDetails
>
findProjectDetails
(
Long
projectId
)
{
return
projectWebClient
.
build
().
get
()
.
uri
(
uriBuilder
->
uriBuilder
.
path
(
"/v1/find/{projectId}"
).
build
(
projectId
))
.
retrieve
().
bodyToMono
(
ProjectDetails
.
class
);
}
}
src/main/java/com/nisum/poc/facade/controller/EmployeeFacadeController.java
View file @
9a5d6a13
package
com
.
nisum
.
poc
.
facade
.
controller
;
import
com.nisum.poc.facade.response.EmployeeDetails
;
import
com.nisum.poc.facade.response.EmployeeFacadeResponse
;
import
com.nisum.poc.facade.service.IEmployeeService
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
...
...
@@ -30,7 +31,7 @@ public class EmployeeFacadeController {
* @return
*/
@GetMapping
(
value
=
"/v1/{empId}/employee"
)
public
Mono
<
Employee
Details
>
fetchEmployeeById
(
@PathVariable
Long
empId
){
public
Mono
<
Employee
FacadeResponse
>
fetchEmployeeById
(
@PathVariable
Long
empId
){
return
employeeService
.
fetchEmployeeById
(
empId
);
}
}
src/main/java/com/nisum/poc/facade/response/EmployeeDetails.java
View file @
9a5d6a13
...
...
@@ -16,4 +16,7 @@ public class EmployeeDetails {
private
String
lastName
;
private
String
email
;
private
String
phoneNumber
;
private
Long
deptId
;
private
Long
projectId
;
}
src/main/java/com/nisum/poc/facade/response/EmployeeFacadeResponse.java
0 → 100644
View file @
9a5d6a13
package
com
.
nisum
.
poc
.
facade
.
response
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
EmployeeFacadeResponse
{
private
Long
employeeId
;
private
String
firstName
;
private
String
lastName
;
private
String
email
;
private
String
phoneNumber
;
private
DepartmentDetails
departmentDetails
;
private
ProjectDetails
projectDetails
;
}
src/main/java/com/nisum/poc/facade/service/IEmployeeService.java
View file @
9a5d6a13
package
com
.
nisum
.
poc
.
facade
.
service
;
import
com.nisum.poc.facade.response.EmployeeDetails
;
import
com.nisum.poc.facade.response.EmployeeFacadeResponse
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
...
...
@@ -9,6 +10,6 @@ public interface IEmployeeService {
public
Flux
<
EmployeeDetails
>
fetchEmployeeDetails
();
public
Mono
<
Employee
Details
>
fetchEmployeeById
(
Long
empId
);
public
Mono
<
Employee
FacadeResponse
>
fetchEmployeeById
(
Long
empId
);
}
src/main/java/com/nisum/poc/facade/service/impl/EmployeeService.java
View file @
9a5d6a13
package
com
.
nisum
.
poc
.
facade
.
service
.
impl
;
import
com.nisum.poc.facade.client.IDepartmentClient
;
import
com.nisum.poc.facade.client.IEmployeeClient
;
import
com.nisum.poc.facade.client.IProjectClient
;
import
com.nisum.poc.facade.response.DepartmentDetails
;
import
com.nisum.poc.facade.response.EmployeeDetails
;
import
com.nisum.poc.facade.response.EmployeeFacadeResponse
;
import
com.nisum.poc.facade.response.ProjectDetails
;
import
com.nisum.poc.facade.service.IEmployeeService
;
import
org.modelmapper.ModelMapper
;
import
org.modelmapper.convention.MatchingStrategies
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
...
...
@@ -11,11 +18,17 @@ import reactor.core.publisher.Mono;
@Service
public
class
EmployeeService
implements
IEmployeeService
{
private
IEmployeeClient
employeeClient
;
private
final
IEmployeeClient
employeeClient
;
private
final
IDepartmentClient
departmentClient
;
private
final
IProjectClient
projectClient
;
@Autowired
public
EmployeeService
(
IEmployeeClient
employeeClient
){
public
EmployeeService
(
IEmployeeClient
employeeClient
,
IDepartmentClient
departmentClient
,
IProjectClient
projectClient
){
this
.
employeeClient
=
employeeClient
;
this
.
departmentClient
=
departmentClient
;
this
.
projectClient
=
projectClient
;
}
@Override
...
...
@@ -24,8 +37,45 @@ public class EmployeeService implements IEmployeeService {
}
@Override
public
Mono
<
EmployeeDetails
>
fetchEmployeeById
(
Long
empId
)
{
Mono
<
EmployeeDetails
>
employeeDetails
=
employeeClient
.
findEmployeeDetails
(
empId
);
return
null
;
public
Mono
<
EmployeeFacadeResponse
>
fetchEmployeeById
(
Long
empId
)
{
Mono
<
EmployeeDetails
>
monoEmployeeDetails
=
employeeClient
.
findEmployeeDetails
(
empId
);
return
monoEmployeeDetails
.
map
(
this
::
findProjectAndDeptDetails
);
}
private
EmployeeFacadeResponse
findProjectAndDeptDetails
(
EmployeeDetails
employeeDetails
){
EmployeeFacadeResponse
response
=
constructEmployeeFacadeResponse
(
employeeDetails
);
Long
deptId
=
employeeDetails
.
getDeptId
();
Long
projectId
=
employeeDetails
.
getProjectId
();
departmentClient
.
fetchDepartmentById
(
deptId
).
map
(
dept
->
getFacadeResponse
(
dept
,
response
));
projectClient
.
findProjectDetails
(
projectId
).
map
(
proj
->
getFacadeResponse
(
proj
,
response
));
return
response
;
}
private
Object
getFacadeResponse
(
ProjectDetails
project
,
EmployeeFacadeResponse
response
)
{
response
.
setProjectDetails
(
project
);
return
response
;
}
private
Object
getFacadeResponse
(
DepartmentDetails
dept
,
EmployeeFacadeResponse
response
)
{
response
.
setDepartmentDetails
(
dept
);
return
response
;
}
private
EmployeeFacadeResponse
constructEmployeeFacadeResponse
(
EmployeeDetails
employeeDetails
)
{
EmployeeFacadeResponse
employeeFacadeResponse
;
ModelMapper
modelMapper
=
new
ModelMapper
();
modelMapper
.
getConfiguration
().
setMatchingStrategy
(
MatchingStrategies
.
STRICT
);
employeeFacadeResponse
=
modelMapper
.
map
(
employeeDetails
,
EmployeeFacadeResponse
.
class
);
return
employeeFacadeResponse
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment