forked from spring-petclinic/spring-petclinic-rest
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request spring-petclinic#4 from limmentee-organization/f/user
USER機能実装完了
- Loading branch information
Showing
8 changed files
with
237 additions
and
0 deletions.
There are no files selected for viewing
26 changes: 26 additions & 0 deletions
26
src/main/java/org/springframework/samples/petclinic/mapper/UserMapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package org.springframework.samples.petclinic.mapper; | ||
|
||
import java.util.Collection; | ||
|
||
import org.mapstruct.Mapper; | ||
import org.springframework.samples.petclinic.model.Role; | ||
import org.springframework.samples.petclinic.model.User; | ||
import org.springframework.samples.petclinic.rest.dto.RoleDto; | ||
import org.springframework.samples.petclinic.rest.dto.UserDto; | ||
|
||
@Mapper | ||
public interface UserMapper { | ||
|
||
Role toRole(RoleDto roleDto); | ||
|
||
RoleDto toRoleDto(Role role); | ||
|
||
Collection<RoleDto> toRoleDtos(Collection<Role> roles); | ||
|
||
User toUser(UserDto userDto); | ||
|
||
UserDto toUserDto(User user); | ||
|
||
Collection<Role> toRoles(Collection<RoleDto> roleDtos); | ||
|
||
} |
39 changes: 39 additions & 0 deletions
39
src/main/java/org/springframework/samples/petclinic/model/Role.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package org.springframework.samples.petclinic.model; | ||
|
||
import com.fasterxml.jackson.annotation.JsonIgnore; | ||
|
||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.ManyToOne; | ||
import jakarta.persistence.Table; | ||
import jakarta.persistence.UniqueConstraint; | ||
|
||
@Entity | ||
@Table(name = "roles", uniqueConstraints = @UniqueConstraint(columnNames = { "username", "role" })) | ||
public class Role extends BaseEntity { | ||
|
||
@ManyToOne | ||
@JoinColumn(name = "username") | ||
@JsonIgnore | ||
private User user; | ||
|
||
@Column(name = "role") | ||
private String name; | ||
|
||
public User getUser() { | ||
return user; | ||
} | ||
|
||
public void setUser(User user) { | ||
this.user = user; | ||
} | ||
|
||
public String getName() { | ||
return name; | ||
} | ||
|
||
public void setName(String name) { | ||
this.name = name; | ||
} | ||
} |
74 changes: 74 additions & 0 deletions
74
src/main/java/org/springframework/samples/petclinic/model/User.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package org.springframework.samples.petclinic.model; | ||
|
||
import java.util.HashSet; | ||
import java.util.Set; | ||
|
||
import com.fasterxml.jackson.annotation.JsonIgnore; | ||
|
||
import jakarta.persistence.CascadeType; | ||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.FetchType; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.OneToMany; | ||
import jakarta.persistence.Table; | ||
|
||
@Entity | ||
@Table(name = "users") | ||
public class User { | ||
|
||
@Id | ||
@Column(name = "username") | ||
private String username; | ||
|
||
@Column(name = "password") | ||
private String password; | ||
|
||
@Column(name = "enabled") | ||
private Boolean enabled; | ||
|
||
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER) | ||
private Set<Role> roles; | ||
|
||
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 Boolean getEnabled() { | ||
return enabled; | ||
} | ||
|
||
public void setEnabled(Boolean enabled) { | ||
this.enabled = enabled; | ||
} | ||
|
||
public Set<Role> getRoles() { | ||
return roles; | ||
} | ||
|
||
public void setRoles(Set<Role> roles) { | ||
this.roles = roles; | ||
} | ||
|
||
@JsonIgnore | ||
public void addRole(String roleName) { | ||
if (this.roles == null) { | ||
this.roles = new HashSet<>(); | ||
} | ||
Role role = new Role(); | ||
role.setName(roleName); | ||
this.roles.add(role); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/java/org/springframework/samples/petclinic/repository/UserRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package org.springframework.samples.petclinic.repository; | ||
|
||
import org.springframework.dao.DataAccessException; | ||
import org.springframework.samples.petclinic.model.User; | ||
|
||
public interface UserRepository { | ||
|
||
void save(User user) throws DataAccessException; | ||
|
||
} |
11 changes: 11 additions & 0 deletions
11
.../springframework/samples/petclinic/repository/springdatajpa/SpringDataUserRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package org.springframework.samples.petclinic.repository.springdatajpa; | ||
|
||
import org.springframework.context.annotation.Profile; | ||
import org.springframework.data.repository.Repository; | ||
import org.springframework.samples.petclinic.model.User; | ||
import org.springframework.samples.petclinic.repository.UserRepository; | ||
|
||
@Profile("spring-data-jpa") | ||
public interface SpringDataUserRepository extends UserRepository, Repository<User, Integer> { | ||
|
||
} |
38 changes: 38 additions & 0 deletions
38
src/main/java/org/springframework/samples/petclinic/rest/controller/UserRestController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package org.springframework.samples.petclinic.rest.controller; | ||
|
||
import org.springframework.http.HttpHeaders; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.samples.petclinic.mapper.UserMapper; | ||
import org.springframework.samples.petclinic.model.User; | ||
import org.springframework.samples.petclinic.rest.api.UsersApi; | ||
import org.springframework.samples.petclinic.rest.dto.UserDto; | ||
import org.springframework.samples.petclinic.service.UserService; | ||
import org.springframework.security.access.prepost.PreAuthorize; | ||
import org.springframework.web.bind.annotation.CrossOrigin; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RestController | ||
@CrossOrigin(exposedHeaders = "errors, content-type") | ||
@RequestMapping("api") | ||
public class UserRestController implements UsersApi { | ||
|
||
private final UserService userService; | ||
private final UserMapper userMapper; | ||
|
||
public UserRestController(UserService userService, UserMapper userMapper) { | ||
this.userService = userService; | ||
this.userMapper = userMapper; | ||
} | ||
|
||
@PreAuthorize("hasRole(@roles.ADMIN)") | ||
@Override | ||
public ResponseEntity<UserDto> addUser(UserDto userDto) { | ||
HttpHeaders headers = new HttpHeaders(); | ||
User user = userMapper.toUser(userDto); | ||
this.userService.saveUser(user); | ||
return new ResponseEntity<>(userMapper.toUserDto(user), headers, HttpStatus.CREATED); | ||
} | ||
|
||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/org/springframework/samples/petclinic/service/UserService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package org.springframework.samples.petclinic.service; | ||
|
||
import org.springframework.samples.petclinic.model.User; | ||
|
||
public interface UserService { | ||
|
||
void saveUser(User user); | ||
|
||
} |
30 changes: 30 additions & 0 deletions
30
src/main/java/org/springframework/samples/petclinic/service/UserServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package org.springframework.samples.petclinic.service; | ||
|
||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.samples.petclinic.model.Role; | ||
import org.springframework.samples.petclinic.model.User; | ||
import org.springframework.samples.petclinic.repository.UserRepository; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
public class UserServiceImpl implements UserService { | ||
|
||
@Autowired | ||
private UserRepository userRepository; | ||
|
||
@Override | ||
@Transactional | ||
public void saveUser(User user) { | ||
|
||
if (user.getRoles() == null || user.getRoles().isEmpty()) | ||
throw new IllegalArgumentException("User must have at least a role set!"); | ||
for (Role role : user.getRoles()) { | ||
if (!role.getName().startsWith("ROLE_")) | ||
role.setName("ROLE_" + role.getName()); | ||
if (role.getUser() == null) | ||
role.setUser(user); | ||
} | ||
|
||
userRepository.save(user); | ||
} | ||
|
||
} |