Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
WebfluxMongoDB
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
Bhanuchander Pathuri
WebfluxMongoDB
Commits
4e161a31
Commit
4e161a31
authored
Jan 19, 2023
by
Bhanuchander Pathuri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
project structured POC with WEbflux and mongoDB with mapper and exception handling
parent
8c5c9d79
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
541 additions
and
54 deletions
+541
-54
README.md
README.md
+0
-3
pom.xml
pom.xml
+39
-0
WebFluxApplication.java
src/main/java/com/nisum/poc/Webflux/WebFluxApplication.java
+1
-0
AddressController.java
...a/com/nisum/poc/Webflux/controller/AddressController.java
+7
-4
StudentController.java
...a/com/nisum/poc/Webflux/controller/StudentController.java
+4
-3
Address.java
src/main/java/com/nisum/poc/Webflux/entity/Address.java
+2
-3
Student.java
src/main/java/com/nisum/poc/Webflux/entity/Student.java
+4
-2
Subject.java
src/main/java/com/nisum/poc/Webflux/entity/Subject.java
+0
-2
GlobalException.java
...ava/com/nisum/poc/Webflux/exceptions/GlobalException.java
+9
-0
MainExceptionHandler.java
...om/nisum/poc/Webflux/exceptions/MainExceptionHandler.java
+19
-0
AllMapper.java
src/main/java/com/nisum/poc/Webflux/mapper/AllMapper.java
+24
-0
AddressPayload.java
...main/java/com/nisum/poc/Webflux/model/AddressPayload.java
+1
-0
StudentPayload.java
...main/java/com/nisum/poc/Webflux/model/StudentPayload.java
+2
-2
StudentResponsePayload.java
...a/com/nisum/poc/Webflux/model/StudentResponsePayload.java
+23
-0
AddressRepository.java
...a/com/nisum/poc/Webflux/repository/AddressRepository.java
+1
-1
IAddressService.java
...n/java/com/nisum/poc/Webflux/service/IAddressService.java
+1
-1
IStudentService.java
...n/java/com/nisum/poc/Webflux/service/IStudentService.java
+3
-2
AddressServiceImpl.java
...om/nisum/poc/Webflux/service/impl/AddressServiceImpl.java
+12
-2
StudentServiceImpl.java
...om/nisum/poc/Webflux/service/impl/StudentServiceImpl.java
+23
-29
ApiResponse.java
src/main/java/com/nisum/poc/Webflux/utils/ApiResponse.java
+15
-0
ConstantUtils.java
src/main/java/com/nisum/poc/Webflux/utils/ConstantUtils.java
+9
-0
IApiResponse.java
src/main/java/com/nisum/poc/Webflux/utils/IApiResponse.java
+4
-0
application-dev.properties
src/main/resources/application-dev.properties
+7
-0
application-local.properties
src/main/resources/application-local.properties
+7
-0
application.properties
src/main/resources/application.properties
+1
-0
AddressControllerTest.java
...m/nisum/poc/Webflux/controller/AddressControllerTest.java
+65
-0
StudentControllerTest.java
...m/nisum/poc/Webflux/controller/StudentControllerTest.java
+88
-0
AddressServiceImplTest.java
...isum/poc/Webflux/service/impl/AddressServiceImplTest.java
+43
-0
StudentServiceImplTest.java
...isum/poc/Webflux/service/impl/StudentServiceImplTest.java
+84
-0
SubjectsServiceImplTest.java
...sum/poc/Webflux/service/impl/SubjectsServiceImplTest.java
+43
-0
No files found.
README.md
deleted
100644 → 0
View file @
8c5c9d79
# WebfluxMongoDB
WebfluxMongoDB CRUD Operations
\ No newline at end of file
pom.xml
View file @
4e161a31
...
@@ -15,12 +15,18 @@
...
@@ -15,12 +15,18 @@
<description>
Demo project for Spring Boot webFlux
</description>
<description>
Demo project for Spring Boot webFlux
</description>
<properties>
<properties>
<java.version>
17
</java.version>
<java.version>
17
</java.version>
<org.mapstruct.version>
1.5.3.Final
</org.mapstruct.version>
</properties>
</properties>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-mongodb-reactive
</artifactId>
<artifactId>
spring-boot-starter-data-mongodb-reactive
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct
</artifactId>
<version>
${org.mapstruct.version}
</version>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-webflux
</artifactId>
<artifactId>
spring-boot-starter-webflux
</artifactId>
...
@@ -41,6 +47,11 @@
...
@@ -41,6 +47,11 @@
<artifactId>
reactor-test
</artifactId>
<artifactId>
reactor-test
</artifactId>
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<scope>
test
</scope>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
@@ -57,6 +68,34 @@
...
@@ -57,6 +68,34 @@
</excludes>
</excludes>
</configuration>
</configuration>
</plugin>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
3.8.1
</version>
<configuration>
<source>
17
</source>
<!-- depending on your project -->
<target>
17
</target>
<!-- depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct-processor
</artifactId>
<version>
${org.mapstruct.version}
</version>
</path>
<path>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
1.18.20
</version>
</path>
<path>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok-mapstruct-binding
</artifactId>
<version>
0.2.0
</version>
</path>
<!-- other annotation processors -->
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</plugins>
</build>
</build>
...
...
src/main/java/com/nisum/poc/Webflux/WebFluxApplication.java
View file @
4e161a31
...
@@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication;
...
@@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.domain.EntityScan
;
import
org.springframework.boot.autoconfigure.domain.EntityScan
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.PropertySource
;
import
org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories
;
import
org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
...
src/main/java/com/nisum/poc/Webflux/controller/AddressController.java
View file @
4e161a31
...
@@ -3,7 +3,7 @@ package com.nisum.poc.Webflux.controller;
...
@@ -3,7 +3,7 @@ package com.nisum.poc.Webflux.controller;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.model.AddressPayload
;
import
com.nisum.poc.Webflux.model.AddressPayload
;
import
com.nisum.poc.Webflux.service.IAddressService
;
import
com.nisum.poc.Webflux.service.IAddressService
;
import
lombok.extern.slf4j.Slf4j
;
import
com.nisum.poc.Webflux.utils.ConstantUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
@@ -17,16 +17,19 @@ public class AddressController {
...
@@ -17,16 +17,19 @@ public class AddressController {
@Autowired
@Autowired
IAddressService
addressService
;
IAddressService
addressService
;
@Autowired
ConstantUtils
constantUtils
;
@PostMapping
(
"/saveaddress"
)
@PostMapping
(
"/saveaddress"
)
public
Mono
<
Address
>
createAddress
(
@RequestBody
Address
address
){
public
Mono
<
Address
>
createAddress
(
@RequestBody
Address
Payload
addressPayload
){
return
addressService
.
createAddress
(
address
);
return
addressService
.
createAddress
(
address
Payload
);
}
}
@GetMapping
(
"/alladdress"
)
@GetMapping
(
"/alladdress"
)
public
Flux
<
Address
>
getAllAddress
(){
public
Flux
<
Address
>
getAllAddress
(){
return
addressService
.
getAllAddress
();
return
addressService
.
getAllAddress
();
}
}
}
}
src/main/java/com/nisum/poc/Webflux/controller/StudentController.java
View file @
4e161a31
...
@@ -3,6 +3,7 @@ package com.nisum.poc.Webflux.controller;
...
@@ -3,6 +3,7 @@ package com.nisum.poc.Webflux.controller;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentResponsePayload
;
import
com.nisum.poc.Webflux.service.IStudentService
;
import
com.nisum.poc.Webflux.service.IStudentService
;
import
com.nisum.poc.Webflux.service.ISubjectsService
;
import
com.nisum.poc.Webflux.service.ISubjectsService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -24,13 +25,13 @@ public class StudentController {
...
@@ -24,13 +25,13 @@ public class StudentController {
IStudentService
studentService
;
IStudentService
studentService
;
@PostMapping
(
"/saveStudent"
)
@PostMapping
(
"/saveStudent"
)
public
Mono
<
Student
>
creatStudent
(
@RequestBody
Student
student
){
public
Mono
<
Student
>
creatStudent
(
@RequestBody
Student
Payload
studentPayload
){
return
studentService
.
createStudent
(
student
);
return
studentService
.
createStudent
(
student
Payload
);
}
}
@GetMapping
(
"/allStudents"
)
@GetMapping
(
"/allStudents"
)
public
Flux
<
StudentPayload
>
getAllStudents
(){
public
Flux
<
Student
Response
Payload
>
getAllStudents
(){
return
studentService
.
getAllStudents
();
return
studentService
.
getAllStudents
();
}
}
...
...
src/main/java/com/nisum/poc/Webflux/entity/Address.java
View file @
4e161a31
...
@@ -16,10 +16,9 @@ import org.springframework.data.mongodb.core.mapping.Document;
...
@@ -16,10 +16,9 @@ import org.springframework.data.mongodb.core.mapping.Document;
//@Scope(scopeName="request",proxyMode = ScopedProxyMode.TARGET_CLASS)
//@Scope(scopeName="request",proxyMode = ScopedProxyMode.TARGET_CLASS)
public
class
Address
{
public
class
Address
{
@Transient
public
static
final
String
SEQUENCE_NAME
=
"users_sequence"
;
@Id
@Id
private
Lo
ng
id
;
private
Stri
ng
id
;
private
String
address
;
private
String
address
;
private
String
city
;
private
String
city
;
private
String
pinCode
;
private
String
pinCode
;
...
...
src/main/java/com/nisum/poc/Webflux/entity/Student.java
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
entity
;
package
com
.
nisum
.
poc
.
Webflux
.
entity
;
import
com.nisum.poc.Webflux.model.AddressPayload
;
import
com.nisum.poc.Webflux.model.SubjectPayload
;
import
lombok.*
;
import
lombok.*
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.context.annotation.Scope
;
import
org.springframework.context.annotation.ScopedProxyMode
;
import
org.springframework.context.annotation.ScopedProxyMode
;
...
@@ -26,7 +28,7 @@ public class Student {
...
@@ -26,7 +28,7 @@ public class Student {
private
String
lastName
;
private
String
lastName
;
private
Integer
age
;
private
Integer
age
;
private
List
<
String
>
phoneNumbers
;
private
List
<
String
>
phoneNumbers
;
private
List
<
Address
>
address
;
private
List
<
Address
Payload
>
address
;
private
List
<
Subject
>
subjects
;
private
List
<
Subject
Payload
>
subjects
;
}
}
src/main/java/com/nisum/poc/Webflux/entity/Subject.java
View file @
4e161a31
...
@@ -18,8 +18,6 @@ import org.springframework.data.mongodb.core.mapping.Document;
...
@@ -18,8 +18,6 @@ import org.springframework.data.mongodb.core.mapping.Document;
//@Scope(scopeName="request",proxyMode = ScopedProxyMode.TARGET_CLASS)
//@Scope(scopeName="request",proxyMode = ScopedProxyMode.TARGET_CLASS)
public
class
Subject
{
public
class
Subject
{
@Transient
public
static
final
String
SEQUENCE_NAME
=
"users_sequence"
;
@Id
@Id
private
Long
id
;
private
Long
id
;
private
String
subjectName
;
private
String
subjectName
;
...
...
src/main/java/com/nisum/poc/Webflux/exceptions/GlobalException.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
exceptions
;
public
class
GlobalException
extends
RuntimeException
{
public
GlobalException
(
String
message
)
{
super
(
message
);
}
}
src/main/java/com/nisum/poc/Webflux/exceptions/MainExceptionHandler.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
exceptions
;
import
com.nisum.poc.Webflux.utils.ApiResponse
;
import
com.nisum.poc.Webflux.utils.IApiResponse
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.ResponseStatus
;
import
org.springframework.web.bind.annotation.RestControllerAdvice
;
@RestControllerAdvice
public
class
MainExceptionHandler
{
@ExceptionHandler
(
GlobalException
.
class
)
public
ResponseEntity
<
String
>
globalException
(
GlobalException
globalException
){
return
ResponseEntity
.
status
(
HttpStatus
.
NOT_ACCEPTABLE
).
body
(
globalException
.
getMessage
());
}
}
src/main/java/com/nisum/poc/Webflux/mapper/AllMapper.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
mapper
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.model.AddressPayload
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.SubjectPayload
;
import
org.mapstruct.factory.Mappers
;
import
java.util.List
;
@org
.
mapstruct
.
Mapper
(
componentModel
=
"spring"
)
public
interface
AllMapper
{
AllMapper
Instance
=
Mappers
.
getMapper
(
AllMapper
.
class
);
Address
modelToEntity
(
AddressPayload
addressPayload
);
AddressPayload
entityToModel
(
Address
address
);
List
<
AddressPayload
>
entitysToModels
(
List
<
Address
>
address
);
Student
modelToEntity
(
StudentPayload
studentPayload
);
StudentPayload
entityToModel
(
Student
student
);
Subject
modelToEntity
(
SubjectPayload
subjectPayload
);
SubjectPayload
entityToModel
(
Subject
subject
);
}
src/main/java/com/nisum/poc/Webflux/model/AddressPayload.java
View file @
4e161a31
...
@@ -3,6 +3,7 @@ package com.nisum.poc.Webflux.model;
...
@@ -3,6 +3,7 @@ package com.nisum.poc.Webflux.model;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
lombok.Setter
;
@Data
@Data
@AllArgsConstructor
@AllArgsConstructor
...
...
src/main/java/com/nisum/poc/Webflux/model/StudentPayload.java
View file @
4e161a31
...
@@ -19,6 +19,6 @@ public class StudentPayload {
...
@@ -19,6 +19,6 @@ public class StudentPayload {
private
String
lastName
;
private
String
lastName
;
private
Integer
age
;
private
Integer
age
;
private
List
<
String
>
phoneNumbers
;
private
List
<
String
>
phoneNumbers
;
private
List
<
Address
>
addresses
;
private
List
<
Address
Payload
>
addresses
;
private
List
<
Subject
>
subjects
;
private
List
<
Subject
Payload
>
subjects
;
}
}
src/main/java/com/nisum/poc/Webflux/model/StudentResponsePayload.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
model
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
StudentResponsePayload
{
private
Long
id
;
private
String
firstName
;
private
String
lastName
;
private
Integer
age
;
private
List
<
String
>
phoneNumbers
;
private
List
<
Address
>
addresses
;
private
List
<
Subject
>
subjects
;
}
src/main/java/com/nisum/poc/Webflux/repository/AddressRepository.java
View file @
4e161a31
...
@@ -6,7 +6,7 @@ import org.springframework.stereotype.Repository;
...
@@ -6,7 +6,7 @@ import org.springframework.stereotype.Repository;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Flux
;
@Repository
@Repository
public
interface
AddressRepository
extends
ReactiveMongoRepository
<
Address
,
Lo
ng
>
{
public
interface
AddressRepository
extends
ReactiveMongoRepository
<
Address
,
Stri
ng
>
{
Flux
<
Address
>
findByStudentId
(
Long
studentId
);
Flux
<
Address
>
findByStudentId
(
Long
studentId
);
}
}
src/main/java/com/nisum/poc/Webflux/service/IAddressService.java
View file @
4e161a31
...
@@ -8,7 +8,7 @@ import reactor.core.publisher.Mono;
...
@@ -8,7 +8,7 @@ import reactor.core.publisher.Mono;
@Service
@Service
public
interface
IAddressService
{
public
interface
IAddressService
{
Mono
<
Address
>
createAddress
(
Address
address
);
Mono
<
Address
>
createAddress
(
Address
Payload
addressPayload
);
Flux
<
Address
>
getAllAddress
();
Flux
<
Address
>
getAllAddress
();
}
}
src/main/java/com/nisum/poc/Webflux/service/IStudentService.java
View file @
4e161a31
...
@@ -3,6 +3,7 @@ package com.nisum.poc.Webflux.service;
...
@@ -3,6 +3,7 @@ package com.nisum.poc.Webflux.service;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentResponsePayload
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Flux
;
...
@@ -11,9 +12,9 @@ import reactor.core.publisher.Mono;
...
@@ -11,9 +12,9 @@ import reactor.core.publisher.Mono;
@Service
@Service
public
interface
IStudentService
{
public
interface
IStudentService
{
Mono
<
Student
>
createStudent
(
Student
student
);
Mono
<
Student
>
createStudent
(
Student
Payload
studentPayload
);
Flux
<
StudentPayload
>
getAllStudents
();
Flux
<
Student
Response
Payload
>
getAllStudents
();
Flux
<
String
>
concat
();
Flux
<
String
>
concat
();
Flux
<
String
>
merge
();
Flux
<
String
>
merge
();
...
...
src/main/java/com/nisum/poc/Webflux/service/impl/AddressServiceImpl.java
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
service
.
impl
;
package
com
.
nisum
.
poc
.
Webflux
.
service
.
impl
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.exceptions.GlobalException
;
import
com.nisum.poc.Webflux.mapper.AllMapper
;
import
com.nisum.poc.Webflux.model.AddressPayload
;
import
com.nisum.poc.Webflux.repository.AddressRepository
;
import
com.nisum.poc.Webflux.repository.AddressRepository
;
import
com.nisum.poc.Webflux.service.IAddressService
;
import
com.nisum.poc.Webflux.service.IAddressService
;
import
com.nisum.poc.Webflux.utils.ConstantUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -15,9 +19,15 @@ public class AddressServiceImpl implements IAddressService {
...
@@ -15,9 +19,15 @@ public class AddressServiceImpl implements IAddressService {
@Autowired
@Autowired
AddressRepository
addressRepository
;
AddressRepository
addressRepository
;
@Autowired
private
AllMapper
allMapper
;
@Override
@Override
public
Mono
<
Address
>
createAddress
(
Address
address
)
{
public
Mono
<
Address
>
createAddress
(
AddressPayload
addressPayload
)
{
return
addressRepository
.
save
(
address
);
if
(
addressPayload
.
getStudentId
()
<=
0
)
{
throw
new
GlobalException
(
ConstantUtils
.
SAVE_FAILED
);
}
return
addressRepository
.
save
(
allMapper
.
modelToEntity
(
addressPayload
));
}
}
...
...
src/main/java/com/nisum/poc/Webflux/service/impl/StudentServiceImpl.java
View file @
4e161a31
...
@@ -3,7 +3,10 @@ package com.nisum.poc.Webflux.service.impl;
...
@@ -3,7 +3,10 @@ package com.nisum.poc.Webflux.service.impl;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.mapper.AllMapper
;
import
com.nisum.poc.Webflux.model.AddressPayload
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentResponsePayload
;
import
com.nisum.poc.Webflux.repository.AddressRepository
;
import
com.nisum.poc.Webflux.repository.AddressRepository
;
import
com.nisum.poc.Webflux.repository.StudentRepository
;
import
com.nisum.poc.Webflux.repository.StudentRepository
;
import
com.nisum.poc.Webflux.repository.SubjectRepository
;
import
com.nisum.poc.Webflux.repository.SubjectRepository
;
...
@@ -17,6 +20,7 @@ import reactor.util.function.Tuple2;
...
@@ -17,6 +20,7 @@ import reactor.util.function.Tuple2;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Service
@Service
...
@@ -30,36 +34,28 @@ public class StudentServiceImpl implements IStudentService {
...
@@ -30,36 +34,28 @@ public class StudentServiceImpl implements IStudentService {
AddressRepository
addressRepository
;
AddressRepository
addressRepository
;
@Autowired
@Autowired
SubjectRepository
subjectRepository
;
SubjectRepository
subjectRepository
;
@Autowired
AllMapper
allMapper
;
@Override
@Override
public
Mono
<
Student
>
createStudent
(
Student
student
)
{
public
Mono
<
Student
>
createStudent
(
Student
Payload
studentPayload
)
{
Student
student1
=
new
Student
();
Student
student1
=
new
Student
();
student1
.
setId
(
student
.
getId
());
student1
.
setId
(
student
Payload
.
getId
());
student1
.
setAge
(
student
.
getAge
());
student1
.
setAge
(
student
Payload
.
getAge
());
student1
.
setFirstName
(
student
.
getFirstName
());
student1
.
setFirstName
(
student
Payload
.
getFirstName
());
student1
.
setLastName
(
student
.
getLastName
());
student1
.
setLastName
(
student
Payload
.
getLastName
());
student1
.
setPhoneNumbers
(
student
.
getPhoneNumbers
());
student1
.
setPhoneNumbers
(
student
Payload
.
getPhoneNumbers
());
Mono
<
Student
>
studentMono
=
studentRepository
.
save
(
student1
);
Mono
<
Student
>
studentMono
=
studentRepository
.
save
(
allMapper
.
modelToEntity
(
studentPayload
)
);
List
<
Address
>
addressList
=
new
ArrayList
<>();
List
<
Address
>
addressList
=
new
ArrayList
<>();
List
<
Subject
>
subjectList
=
new
ArrayList
<>();
List
<
Subject
>
subjectList
=
new
ArrayList
<>();
studentMono
.
subscribe
(
studentmono
->
{
studentMono
.
subscribe
(
studentmono
->
{
student
.
getAddress
().
forEach
(
address
->
{
studentPayload
.
getAddresses
().
forEach
(
address
->
{
Address
address1
=
new
Address
();
addressList
.
add
(
allMapper
.
modelToEntity
(
address
));
address1
.
setId
(
address
.
getId
());
address1
.
setAddress
(
address
.
getAddress
());
address1
.
setStudentId
(
studentmono
.
getId
());
address1
.
setCity
(
address
.
getCity
());
address1
.
setAddressType
(
address
.
getAddressType
());
address1
.
setPinCode
(
address
.
getPinCode
());
addressList
.
add
(
address1
);
});
});
student
.
getSubjects
().
forEach
(
sub
->
{
studentPayload
.
getSubjects
().
forEach
(
sub
->
{
Subject
subject
=
new
Subject
();
subjectList
.
add
(
allMapper
.
modelToEntity
(
sub
));
subject
.
setId
(
sub
.
getId
());
subject
.
setSubjectName
(
sub
.
getSubjectName
());
subject
.
setStudentId
(
studentmono
.
getId
());
subjectList
.
add
(
subject
);
});
});
Flux
<
Address
>
addressFlux
=
addressRepository
.
saveAll
(
addressList
);
Flux
<
Address
>
addressFlux
=
addressRepository
.
saveAll
(
addressList
);
Flux
<
Subject
>
subjectFlux
=
subjectRepository
.
saveAll
(
subjectList
);
Flux
<
Subject
>
subjectFlux
=
subjectRepository
.
saveAll
(
subjectList
);
...
@@ -67,11 +63,11 @@ public class StudentServiceImpl implements IStudentService {
...
@@ -67,11 +63,11 @@ public class StudentServiceImpl implements IStudentService {
return
studentMono
;
return
studentMono
;
}
}
@Override
@Override
public
Flux
<
StudentPayload
>
getAllStudents
()
{
public
Flux
<
Student
Response
Payload
>
getAllStudents
()
{
return
studentRepository
.
findAll
().
flatMap
(
student
->
{
return
studentRepository
.
findAll
().
flatMap
(
student
->
{
Flux
<
Address
>
addressFlux
=
addressRepository
.
findByStudentId
(
student
.
getId
()).
switchIfEmpty
(
Flux
.
just
(
new
Address
()));
Flux
<
Address
>
addressFlux
=
addressRepository
.
findByStudentId
(
student
.
getId
()).
switchIfEmpty
(
Flux
.
just
(
new
Address
()));
Flux
<
Subject
>
subjectFlux
=
subjectRepository
.
findByStudentId
(
student
.
getId
()).
switchIfEmpty
(
Flux
.
just
(
new
Subject
()));
Flux
<
Subject
>
subjectFlux
=
subjectRepository
.
findByStudentId
(
student
.
getId
()).
switchIfEmpty
(
Flux
.
just
(
new
Subject
()));
StudentPayload
studentPayload
=
new
Student
Payload
();
StudentResponsePayload
studentPayload
=
new
StudentResponse
Payload
();
studentPayload
.
setId
(
student
.
getId
());
studentPayload
.
setId
(
student
.
getId
());
studentPayload
.
setAge
(
student
.
getAge
());
studentPayload
.
setAge
(
student
.
getAge
());
studentPayload
.
setPhoneNumbers
(
student
.
getPhoneNumbers
());
studentPayload
.
setPhoneNumbers
(
student
.
getPhoneNumbers
());
...
@@ -79,7 +75,7 @@ public class StudentServiceImpl implements IStudentService {
...
@@ -79,7 +75,7 @@ public class StudentServiceImpl implements IStudentService {
studentPayload
.
setLastName
(
student
.
getLastName
());
studentPayload
.
setLastName
(
student
.
getLastName
());
studentPayload
.
setAddresses
(
addressFlux
.
collectList
().
block
());
studentPayload
.
setAddresses
(
addressFlux
.
collectList
().
block
());
studentPayload
.
setSubjects
(
subjectFlux
.
collectList
().
block
());
studentPayload
.
setSubjects
(
subjectFlux
.
collectList
().
block
());
Flux
<
StudentPayload
>
studentPayloadFlux
=
Flux
.
just
(
studentPayload
);
Flux
<
Student
Response
Payload
>
studentPayloadFlux
=
Flux
.
just
(
studentPayload
);
return
studentPayloadFlux
;
return
studentPayloadFlux
;
});
});
// return studentFlux;
// return studentFlux;
...
@@ -108,13 +104,11 @@ public class StudentServiceImpl implements IStudentService {
...
@@ -108,13 +104,11 @@ public class StudentServiceImpl implements IStudentService {
});
});
return
name3
;
return
name3
;
}
}
public
Mono
<
String
>
combineWithZipChara
(){
public
Mono
<
String
>
combineWithZipChara
()
{
Mono
<
String
>
name1
=
Mono
.
just
(
"Hi"
);
Mono
<
String
>
name1
=
Mono
.
just
(
"Hi"
);
Mono
<
String
>
name2
=
Mono
.
just
(
"are"
);
Mono
<
String
>
name2
=
Mono
.
just
(
"are"
);
Flux
<
String
>
name3
=
Mono
.
zip
(
name1
,
name2
).
flatMap
(
a
->{
return
Mono
.
just
(
"sample"
);
a
.
getT1
().
toString
();
});
}
}
...
...
src/main/java/com/nisum/poc/Webflux/utils/ApiResponse.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
utils
;
public
class
ApiResponse
implements
IApiResponse
{
private
Object
object
;
private
boolean
status
;
private
String
message
;
public
ApiResponse
(
Object
object
,
boolean
status
,
String
message
)
{
this
.
object
=
object
;
this
.
status
=
status
;
this
.
message
=
message
;
}
}
src/main/java/com/nisum/poc/Webflux/utils/ConstantUtils.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
utils
;
import
org.springframework.context.annotation.Configuration
;
@Configuration
public
class
ConstantUtils
{
public
static
final
String
SAVE_SUCCESSFULL
=
"Saved Successfully"
;
public
static
final
String
SAVE_FAILED
=
"Save Failed"
;
}
src/main/java/com/nisum/poc/Webflux/utils/IApiResponse.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
utils
;
public
interface
IApiResponse
{
}
src/main/resources/application-dev.properties
0 → 100644
View file @
4e161a31
db.name
=
StudentDatabase
db.host
=
mongodb://localhost:27017
server.port
=
6666
info.app.name
=
Demo
#logging.config=classpath:log/logback.xml
src/main/resources/application-local.properties
0 → 100644
View file @
4e161a31
db.name
=
StudentDatabase
db.host
=
mongodb://localhost:27017
server.port
=
5555
info.app.name
=
Demo
#logging.config=classpath:log/logback.xml
src/main/resources/application.properties
View file @
4e161a31
db.name
=
StudentDatabase
db.name
=
StudentDatabase
db.host
=
mongodb://localhost:27017
db.host
=
mongodb://localhost:27017
server.port
=
4042
server.port
=
4042
spring.profiles.active
=
local
\ No newline at end of file
src/test/java/com/nisum/poc/Webflux/controller/AddressControllerTest.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
controller
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.service.IAddressService
;
import
com.nisum.poc.Webflux.utils.IApiResponse
;
import
org.junit.jupiter.api.Assertions
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest
;
import
org.springframework.boot.test.mock.mockito.MockBean
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
org.springframework.test.web.reactive.server.WebTestClient
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.test.StepVerifier
;
import
static
org
.
mockito
.
Mockito
.*;
@RunWith
(
SpringRunner
.
class
)
@WebFluxTest
()
class
AddressControllerTest
{
@Mock
IAddressService
addressService
;
@Autowired
private
WebTestClient
webTestClient
;
@MockBean
AddressController
addressController
;
@BeforeEach
void
setUp
()
{
MockitoAnnotations
.
openMocks
(
this
);
}
@Test
void
testCreateAddress
()
{
Address
address
=
new
Address
(
"123l"
,
"hyd"
,
"hyd"
,
"12342"
,
"home"
,
1232
l
);
//when(addressService.createAddress(address)).thenReturn(Mono.just(address));
Mono
<
Address
>
addressMono
=
webTestClient
.
post
().
uri
(
"/saveaddress"
)
.
body
(
Mono
.
just
(
address
),
Address
.
class
)
.
exchange
()
.
expectStatus
().
isOk
().
returnResult
(
Address
.
class
).
getResponseBody
().
next
();
StepVerifier
.
create
(
addressMono
)
.
expectSubscription
()
.
expectNext
(
new
Address
(
"123l"
,
"hyd"
,
"hyd"
,
"12342"
,
"home"
,
1232
l
))
.
verifyComplete
();
/* Mono<Address> result = addressController.createAddress(new Address(Long.valueOf(1), "address", "city", "pinCode", "addressType", Long.valueOf(1)));
Assertions.assertEquals(null, result);*/
}
@Test
void
testGetAllAddress
()
{
when
(
addressService
.
getAllAddress
()).
thenReturn
(
null
);
Flux
<
Address
>
result
=
addressController
.
getAllAddress
();
Assertions
.
assertEquals
(
null
,
result
);
}
}
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme
\ No newline at end of file
src/test/java/com/nisum/poc/Webflux/controller/StudentControllerTest.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
controller
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.model.AddressPayload
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentResponsePayload
;
import
com.nisum.poc.Webflux.model.SubjectPayload
;
import
com.nisum.poc.Webflux.service.IStudentService
;
import
org.junit.jupiter.api.Assertions
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
java.util.List
;
import
static
org
.
mockito
.
Mockito
.*;
class
StudentControllerTest
{
@Mock
IStudentService
studentService
;
@InjectMocks
StudentController
studentController
;
@BeforeEach
void
setUp
()
{
MockitoAnnotations
.
openMocks
(
this
);
}
/*@Test
void testCreatStudent() {
when(studentService.createStudent(any())).thenReturn(null);
Mono<Student> result = studentController.creatStudent(new Student(Long.valueOf(1), "firstName", "lastName", Integer.valueOf(0), List.of("String"), List.of(new AddressPayload(1, "address", "city", "pinCode", "addressType", Long.valueOf(1))), List.of(new SubjectPayload(1, "subjectName", Long.valueOf(1)))));
Assertions.assertEquals(null, result);
}*/
@Test
void
testGetAllStudents
()
{
when
(
studentService
.
getAllStudents
()).
thenReturn
(
null
);
Flux
<
StudentResponsePayload
>
result
=
studentController
.
getAllStudents
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testConcatFlux
()
{
when
(
studentService
.
concat
()).
thenReturn
(
null
);
Flux
<
String
>
result
=
studentController
.
concatFlux
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testMergeFlux
()
{
when
(
studentService
.
merge
()).
thenReturn
(
null
);
Flux
<
String
>
result
=
studentController
.
mergeFlux
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testZip
()
{
when
(
studentService
.
combineWithZip
()).
thenReturn
(
null
);
Flux
<
Integer
>
result
=
studentController
.
zip
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testZipWith
()
{
Flux
<
Integer
>
result
=
studentController
.
zipWith
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testTransformUsingFlatMap
()
{
Flux
<
String
>
result
=
studentController
.
transformUsingFlatMap
();
Assertions
.
assertEquals
(
null
,
result
);
}
}
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme
\ No newline at end of file
src/test/java/com/nisum/poc/Webflux/service/impl/AddressServiceImplTest.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
service
.
impl
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.repository.AddressRepository
;
import
org.junit.jupiter.api.Assertions
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
org.slf4j.Logger
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
static
org
.
mockito
.
Mockito
.*;
class
AddressServiceImplTest
{
@Mock
AddressRepository
addressRepository
;
@Mock
Logger
log
;
@InjectMocks
AddressServiceImpl
addressServiceImpl
;
@BeforeEach
void
setUp
()
{
MockitoAnnotations
.
openMocks
(
this
);
}
/* @Test
void testCreateAddress() {
Mono<Address> result = addressServiceImpl.createAddress(new Address(Long.valueOf(1), "address", "city", "pinCode", "addressType", Long.valueOf(1)));
Assertions.assertEquals(null, result);
}*/
@Test
void
testGetAllAddress
()
{
Flux
<
Address
>
result
=
addressServiceImpl
.
getAllAddress
();
Assertions
.
assertEquals
(
null
,
result
);
}
}
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme
\ No newline at end of file
src/test/java/com/nisum/poc/Webflux/service/impl/StudentServiceImplTest.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
service
.
impl
;
import
com.nisum.poc.Webflux.entity.Address
;
import
com.nisum.poc.Webflux.entity.Student
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.model.StudentPayload
;
import
com.nisum.poc.Webflux.model.StudentResponsePayload
;
import
com.nisum.poc.Webflux.repository.AddressRepository
;
import
com.nisum.poc.Webflux.repository.StudentRepository
;
import
com.nisum.poc.Webflux.repository.SubjectRepository
;
import
org.junit.jupiter.api.Assertions
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
org.slf4j.Logger
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
java.util.List
;
import
static
org
.
mockito
.
Mockito
.*;
class
StudentServiceImplTest
{
@Mock
StudentRepository
studentRepository
;
@Mock
AddressRepository
addressRepository
;
@Mock
SubjectRepository
subjectRepository
;
@Mock
Logger
log
;
@InjectMocks
StudentServiceImpl
studentServiceImpl
;
@BeforeEach
void
setUp
()
{
MockitoAnnotations
.
openMocks
(
this
);
}
/*
@Test
void testCreateStudent() {
Mono<Student> result = studentServiceImpl.createStudent(new Student(Long.valueOf(1), "firstName", "lastName", Integer.valueOf(0), List.of("String"), List.of(new Address(Long.valueOf(1), "address", "city", "pinCode", "addressType", Long.valueOf(1))), List.of(new Subject(Long.valueOf(1), "subjectName", Long.valueOf(1)))));
Assertions.assertEquals(null, result);
}
*/
@Test
void
testGetAllStudents
()
{
when
(
addressRepository
.
findByStudentId
(
anyLong
())).
thenReturn
(
null
);
when
(
subjectRepository
.
findByStudentId
(
anyLong
())).
thenReturn
(
null
);
Flux
<
StudentResponsePayload
>
result
=
studentServiceImpl
.
getAllStudents
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testConcat
()
{
Flux
<
String
>
result
=
studentServiceImpl
.
concat
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testMerge
()
{
Flux
<
String
>
result
=
studentServiceImpl
.
merge
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testCombineWithZip
()
{
Flux
<
Integer
>
result
=
studentServiceImpl
.
combineWithZip
();
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testCombineWithZipChara
()
{
Mono
<
String
>
result
=
studentServiceImpl
.
combineWithZipChara
();
Assertions
.
assertEquals
(
null
,
result
);
}
}
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme
\ No newline at end of file
src/test/java/com/nisum/poc/Webflux/service/impl/SubjectsServiceImplTest.java
0 → 100644
View file @
4e161a31
package
com
.
nisum
.
poc
.
Webflux
.
service
.
impl
;
import
com.nisum.poc.Webflux.entity.Subject
;
import
com.nisum.poc.Webflux.repository.SubjectRepository
;
import
org.junit.jupiter.api.Assertions
;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
org.slf4j.Logger
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
static
org
.
mockito
.
Mockito
.*;
class
SubjectsServiceImplTest
{
@Mock
SubjectRepository
subjectRepository
;
@Mock
Logger
log
;
@InjectMocks
SubjectsServiceImpl
subjectsServiceImpl
;
@BeforeEach
void
setUp
()
{
MockitoAnnotations
.
openMocks
(
this
);
}
@Test
void
testCreateSuject
()
{
Mono
<
Subject
>
result
=
subjectsServiceImpl
.
createSuject
(
new
Subject
(
Long
.
valueOf
(
1
),
"subjectName"
,
Long
.
valueOf
(
1
)));
Assertions
.
assertEquals
(
null
,
result
);
}
@Test
void
testGetAllSubjects
()
{
Flux
<
Subject
>
result
=
subjectsServiceImpl
.
getAllSubjects
();
Assertions
.
assertEquals
(
null
,
result
);
}
}
//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme
\ No newline at end of file
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