Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
java-jwt
Project
Project
Details
Activity
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
Phùng Quốc Toàn
java-jwt
Commits
b6050b18
Unverified
Commit
b6050b18
authored
Mar 09, 2024
by
devteria.com
Committed by
GitHub
Mar 09, 2024
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3 from devteria/course/lombok-and-maptruct
add lombok and mapstruct
parents
64452901
e8b97f37
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
158 additions
and
141 deletions
+158
-141
pom.xml
pom.xml
+54
-1
UserController.java
...m/devteria/identityservice/controller/UserController.java
+12
-9
ApiResponse.java
...com/devteria/identityservice/dto/request/ApiResponse.java
+8
-25
UserCreationRequest.java
...eria/identityservice/dto/request/UserCreationRequest.java
+12
-46
UserUpdateRequest.java
...vteria/identityservice/dto/request/UserUpdateRequest.java
+12
-36
UserResponse.java
...m/devteria/identityservice/dto/response/UserResponse.java
+20
-0
UserMapper.java
.../java/com/devteria/identityservice/mapper/UserMapper.java
+17
-0
UserService.java
...ava/com/devteria/identityservice/service/UserService.java
+23
-24
No files found.
pom.xml
View file @
b6050b18
...
...
@@ -10,11 +10,14 @@
</parent>
<groupId>
com.devteria
</groupId>
<artifactId>
identity-service
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
identity-service
</name>
<version>
0.0.1-SNAPSHOT
</version>
<description>
Identity service
</description>
<properties>
<java.version>
21
</java.version>
<projectlombok-lombok.version>
1.18.30
</projectlombok-lombok.version>
<mapstruct.version>
1.5.5.Final
</mapstruct.version>
<lombok-mapstruct-binding.version>
0.2.0
</lombok-mapstruct-binding.version>
</properties>
<dependencies>
<dependency>
...
...
@@ -34,6 +37,17 @@
<artifactId>
mysql-connector-j
</artifactId>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
${projectlombok-lombok.version}
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct
</artifactId>
<version>
${mapstruct.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
...
...
@@ -46,6 +60,45 @@
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<version>
${maven-compiler-plugin.version}
</version>
<configuration>
<source>
${java.version}
</source>
<target>
${java.version}
</target>
<annotationProcessorPaths>
<path>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
${projectlombok-lombok.version}
</version>
</path>
<path>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok-mapstruct-binding
</artifactId>
<version>
${lombok-mapstruct-binding.version}
</version>
</path>
<path>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct-processor
</artifactId>
<version>
${mapstruct.version}
</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>
-Amapstruct.suppressGeneratorTimestamp=true
</arg>
<arg>
-Amapstruct.defaultComponentModel=spring
</arg>
<arg>
-Amapstruct.verbose=true
</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
...
...
src/main/java/com/devteria/identityservice/controller/UserController.java
View file @
b6050b18
...
...
@@ -3,23 +3,26 @@ package com.devteria.identityservice.controller;
import
com.devteria.identityservice.dto.request.ApiResponse
;
import
com.devteria.identityservice.dto.request.UserCreationRequest
;
import
com.devteria.identityservice.dto.request.UserUpdateRequest
;
import
com.devteria.identityservice.
entity.User
;
import
com.devteria.identityservice.
dto.response.UserResponse
;
import
com.devteria.identityservice.service.UserService
;
import
jakarta.validation.Valid
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
lombok.AccessLevel
;
import
lombok.RequiredArgsConstructor
;
import
lombok.experimental.FieldDefaults
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
@RestController
@RequestMapping
(
"/users"
)
@RequiredArgsConstructor
@FieldDefaults
(
level
=
AccessLevel
.
PRIVATE
,
makeFinal
=
true
)
public
class
UserController
{
@Autowired
private
UserService
userService
;
UserService
userService
;
@PostMapping
ApiResponse
<
User
>
createUser
(
@RequestBody
@Valid
UserCreationRequest
request
){
ApiResponse
<
User
>
apiResponse
=
new
ApiResponse
<>();
ApiResponse
<
User
Response
>
createUser
(
@RequestBody
@Valid
UserCreationRequest
request
){
ApiResponse
<
User
Response
>
apiResponse
=
new
ApiResponse
<>();
apiResponse
.
setResult
(
userService
.
createUser
(
request
));
...
...
@@ -27,17 +30,17 @@ public class UserController {
}
@GetMapping
List
<
User
>
getUsers
(){
List
<
User
Response
>
getUsers
(){
return
userService
.
getUsers
();
}
@GetMapping
(
"/{userId}"
)
User
getUser
(
@PathVariable
(
"userId"
)
String
userId
){
User
Response
getUser
(
@PathVariable
(
"userId"
)
String
userId
){
return
userService
.
getUser
(
userId
);
}
@PutMapping
(
"/{userId}"
)
User
updateUser
(
@PathVariable
String
userId
,
@RequestBody
UserUpdateRequest
request
){
User
Response
updateUser
(
@PathVariable
String
userId
,
@RequestBody
UserUpdateRequest
request
){
return
userService
.
updateUser
(
userId
,
request
);
}
...
...
src/main/java/com/devteria/identityservice/dto/request/ApiResponse.java
View file @
b6050b18
package
com
.
devteria
.
identityservice
.
dto
.
request
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
lombok.*
;
import
lombok.experimental.FieldDefaults
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults
(
level
=
AccessLevel
.
PRIVATE
)
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
class
ApiResponse
<
T
>
{
private
int
code
=
1000
;
private
String
message
;
private
T
result
;
public
int
getCode
()
{
return
code
;
}
public
void
setCode
(
int
code
)
{
this
.
code
=
code
;
}
public
String
getMessage
()
{
return
message
;
}
public
void
setMessage
(
String
message
)
{
this
.
message
=
message
;
}
public
T
getResult
()
{
return
result
;
}
public
void
setResult
(
T
result
)
{
this
.
result
=
result
;
}
}
src/main/java/com/devteria/identityservice/dto/request/UserCreationRequest.java
View file @
b6050b18
package
com
.
devteria
.
identityservice
.
dto
.
request
;
import
jakarta.validation.constraints.Size
;
import
lombok.*
;
import
lombok.experimental.FieldDefaults
;
import
java.time.LocalDate
;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults
(
level
=
AccessLevel
.
PRIVATE
)
public
class
UserCreationRequest
{
@Size
(
min
=
3
,
message
=
"USERNAME_INVALID"
)
private
String
username
;
String
username
;
@Size
(
min
=
8
,
message
=
"INVALID_PASSWORD"
)
private
String
password
;
private
String
firstName
;
private
String
lastName
;
private
LocalDate
dob
;
public
String
getUsername
()
{
return
username
;
}
public
void
setUsername
(
String
username
)
{
this
.
username
=
username
;
}
public
String
getPassword
()
{
return
password
;
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
public
void
setFirstName
(
String
firstName
)
{
this
.
firstName
=
firstName
;
}
public
String
getFirstName
()
{
return
firstName
;
}
public
String
getLastName
()
{
return
lastName
;
}
public
void
setLastName
(
String
lastName
)
{
this
.
lastName
=
lastName
;
}
public
LocalDate
getDob
()
{
return
dob
;
}
public
void
setDob
(
LocalDate
dob
)
{
this
.
dob
=
dob
;
}
String
password
;
String
firstName
;
String
lastName
;
LocalDate
dob
;
}
src/main/java/com/devteria/identityservice/dto/request/UserUpdateRequest.java
View file @
b6050b18
package
com
.
devteria
.
identityservice
.
dto
.
request
;
import
lombok.*
;
import
lombok.experimental.FieldDefaults
;
import
java.time.LocalDate
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults
(
level
=
AccessLevel
.
PRIVATE
)
public
class
UserUpdateRequest
{
private
String
password
;
private
String
firstName
;
private
String
lastName
;
private
LocalDate
dob
;
public
String
getPassword
()
{
return
password
;
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
public
String
getFirstName
()
{
return
firstName
;
}
public
void
setFirstName
(
String
firstName
)
{
this
.
firstName
=
firstName
;
}
public
String
getLastName
()
{
return
lastName
;
}
public
void
setLastName
(
String
lastName
)
{
this
.
lastName
=
lastName
;
}
public
LocalDate
getDob
()
{
return
dob
;
}
public
void
setDob
(
LocalDate
dob
)
{
this
.
dob
=
dob
;
}
String
password
;
String
firstName
;
String
lastName
;
LocalDate
dob
;
}
src/main/java/com/devteria/identityservice/dto/response/UserResponse.java
0 → 100644
View file @
b6050b18
package
com
.
devteria
.
identityservice
.
dto
.
response
;
import
lombok.*
;
import
lombok.experimental.FieldDefaults
;
import
java.time.LocalDate
;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@FieldDefaults
(
level
=
AccessLevel
.
PRIVATE
)
public
class
UserResponse
{
String
id
;
String
username
;
String
password
;
String
firstName
;
String
lastName
;
LocalDate
dob
;
}
src/main/java/com/devteria/identityservice/mapper/UserMapper.java
0 → 100644
View file @
b6050b18
package
com
.
devteria
.
identityservice
.
mapper
;
import
com.devteria.identityservice.dto.request.UserCreationRequest
;
import
com.devteria.identityservice.dto.request.UserUpdateRequest
;
import
com.devteria.identityservice.dto.response.UserResponse
;
import
com.devteria.identityservice.entity.User
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.MappingTarget
;
@Mapper
(
componentModel
=
"spring"
)
public
interface
UserMapper
{
User
toUser
(
UserCreationRequest
request
);
UserResponse
toUserResponse
(
User
user
);
void
updateUser
(
@MappingTarget
User
user
,
UserUpdateRequest
request
);
}
src/main/java/com/devteria/identityservice/service/UserService.java
View file @
b6050b18
...
...
@@ -2,56 +2,55 @@ package com.devteria.identityservice.service;
import
com.devteria.identityservice.dto.request.UserCreationRequest
;
import
com.devteria.identityservice.dto.request.UserUpdateRequest
;
import
com.devteria.identityservice.dto.response.UserResponse
;
import
com.devteria.identityservice.entity.User
;
import
com.devteria.identityservice.exception.AppException
;
import
com.devteria.identityservice.exception.ErrorCode
;
import
com.devteria.identityservice.mapper.UserMapper
;
import
com.devteria.identityservice.repository.UserRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
lombok.AccessLevel
;
import
lombok.RequiredArgsConstructor
;
import
lombok.experimental.FieldDefaults
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
@Service
@RequiredArgsConstructor
@FieldDefaults
(
level
=
AccessLevel
.
PRIVATE
,
makeFinal
=
true
)
public
class
UserService
{
@Autowired
private
UserRepository
userRepository
;
public
User
createUser
(
UserCreationRequest
request
){
User
user
=
new
User
();
UserRepository
userRepository
;
UserMapper
userMapper
;
public
UserResponse
createUser
(
UserCreationRequest
request
){
if
(
userRepository
.
existsByUsername
(
request
.
getUsername
()))
throw
new
AppException
(
ErrorCode
.
USER_EXISTED
);
user
.
setUsername
(
request
.
getUsername
());
user
.
setPassword
(
request
.
getPassword
());
user
.
setFirstName
(
request
.
getFirstName
());
user
.
setLastName
(
request
.
getLastName
());
user
.
setDob
(
request
.
getDob
());
User
user
=
userMapper
.
toUser
(
request
);
return
user
Repository
.
save
(
user
);
return
user
Mapper
.
toUserResponse
(
userRepository
.
save
(
user
)
);
}
public
User
updateUser
(
String
userId
,
UserUpdateRequest
request
)
{
User
user
=
getUser
(
userId
);
public
UserResponse
updateUser
(
String
userId
,
UserUpdateRequest
request
)
{
User
user
=
userRepository
.
findById
(
userId
)
.
orElseThrow
(()
->
new
RuntimeException
(
"User not found"
));
user
.
setPassword
(
request
.
getPassword
());
user
.
setFirstName
(
request
.
getFirstName
());
user
.
setLastName
(
request
.
getLastName
());
user
.
setDob
(
request
.
getDob
());
userMapper
.
updateUser
(
user
,
request
);
return
user
Repository
.
save
(
user
);
return
user
Mapper
.
toUserResponse
(
userRepository
.
save
(
user
)
);
}
public
void
deleteUser
(
String
userId
){
userRepository
.
deleteById
(
userId
);
}
public
List
<
User
>
getUsers
(){
return
userRepository
.
findAll
();
public
List
<
UserResponse
>
getUsers
(){
return
userRepository
.
findAll
().
stream
()
.
map
(
userMapper:
:
toUserResponse
).
toList
();
}
public
User
getUser
(
String
id
){
return
userRepository
.
findById
(
id
)
.
orElseThrow
(()
->
new
RuntimeException
(
"User not found"
));
public
User
Response
getUser
(
String
id
){
return
user
Mapper
.
toUserResponse
(
user
Repository
.
findById
(
id
)
.
orElseThrow
(()
->
new
RuntimeException
(
"User not found"
))
)
;
}
}
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