User Service 리팩토링

This commit is contained in:
roy-zz
2022-04-20 23:39:15 +09:00
parent 85db725a71
commit 888f7e8925
8 changed files with 93 additions and 19 deletions

View File

@@ -3,13 +3,16 @@ package com.roy.springcloud.userservice.controller;
import com.roy.springcloud.userservice.dto.UserDto;
import com.roy.springcloud.userservice.service.UserService;
import com.roy.springcloud.userservice.vo.request.UserSaveRequest;
import com.roy.springcloud.userservice.vo.response.UserSaveResponse;
import com.roy.springcloud.userservice.vo.response.UserResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import static com.roy.springcloud.util.mapper.MapperUtil.toObject;
@RestController
@@ -21,7 +24,7 @@ public class UserController {
@GetMapping("/health-check")
public String healthCheck() {
return "User service is working";
return String.format("It's Working in User Service on PORT: %s", environment.getProperty("local.server.port"));
}
@GetMapping("/welcome")
@@ -30,11 +33,28 @@ public class UserController {
}
@PostMapping("/users")
public ResponseEntity<UserSaveResponse> createUser(@RequestBody UserSaveRequest request) {
public ResponseEntity<UserResponse> createUser(@RequestBody UserSaveRequest request) {
UserDto userDto = toObject(request, UserDto.class);
userService.createUser(userDto);
UserSaveResponse response = toObject(userDto, UserSaveResponse.class);
UserResponse response = toObject(userDto, UserResponse.class);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
@GetMapping("/users")
public ResponseEntity<List<UserResponse>> getUsers() {
List<UserDto> savedUsers = userService.getAllUser();
List<UserResponse> response = new ArrayList<>();
savedUsers.forEach(user -> {
response.add(toObject(user, UserResponse.class));
});
return ResponseEntity.status(HttpStatus.OK).body(response);
}
@GetMapping("/users/{userId}")
public ResponseEntity<UserResponse> getUser(@PathVariable("userId") String userId) {
UserDto userDto = userService.getUserByUserId(userId);
UserResponse response = toObject(userDto, UserResponse.class);
return ResponseEntity.status(HttpStatus.OK).body(response);
}
}

View File

@@ -1,8 +1,11 @@
package com.roy.springcloud.userservice.dto;
import com.roy.springcloud.userservice.vo.response.OrderResponse;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Data
public class UserDto {
@@ -12,4 +15,5 @@ public class UserDto {
private String userId;
private LocalDateTime createdAt;
private String encryptedPassword;
private List<OrderResponse> orders = new ArrayList<>();
}

View File

@@ -3,5 +3,9 @@ package com.roy.springcloud.userservice.repository;
import com.roy.springcloud.userservice.domain.User;
import org.springframework.data.repository.CrudRepository;
import java.util.Optional;
public interface UserRepository extends CrudRepository<User, Long> {
Optional<User> findByUserId(String userId);
Iterable<User> findAll();
}

View File

@@ -2,6 +2,10 @@ package com.roy.springcloud.userservice.service;
import com.roy.springcloud.userservice.dto.UserDto;
import java.util.List;
public interface UserService {
UserDto createUser(UserDto userDTO);
void createUser(UserDto userDTO);
UserDto getUserByUserId(String userId);
List<UserDto> getAllUser();
}

View File

@@ -4,13 +4,17 @@ import com.roy.springcloud.userservice.domain.User;
import com.roy.springcloud.userservice.dto.UserDto;
import com.roy.springcloud.userservice.repository.UserRepository;
import com.roy.springcloud.userservice.service.UserService;
import com.roy.springcloud.util.mapper.MapperUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static com.roy.springcloud.util.mapper.MapperUtil.toObject;
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
@@ -18,11 +22,27 @@ public class UserServiceImpl implements UserService {
private final BCryptPasswordEncoder passwordEncoder;
@Override
public UserDto createUser(UserDto userDto) {
public void createUser(UserDto userDto) {
userDto.setUserId(UUID.randomUUID().toString());
User user = MapperUtil.toObject(userDto, User.class);
User user = toObject(userDto, User.class);
user.setEncryptedPassword(passwordEncoder.encode(userDto.getPassword()));
userRepository.save(user);
return userDto;
}
@Override
public UserDto getUserByUserId(String userId) {
User savedUser = userRepository.findByUserId(userId)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
return toObject(savedUser, UserDto.class);
}
@Override
public List<UserDto> getAllUser() {
Iterable<User> savedUsers = userRepository.findAll();
List<UserDto> response = new ArrayList<>();
savedUsers.forEach(user -> {
response.add(toObject(user, UserDto.class));
});
return response;
}
}

View File

@@ -0,0 +1,16 @@
package com.roy.springcloud.userservice.vo.response;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class OrderResponse {
private String productId;
private Integer quantity;
private Integer unitPrice;
private Integer totalPrice;
private LocalDateTime createdAt;
private String orderId;
}

View File

@@ -0,0 +1,16 @@
package com.roy.springcloud.userservice.vo.response;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.List;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserResponse {
private String email;
private String name;
private String userId;
private List<OrderResponse> orders;
}

View File

@@ -1,10 +0,0 @@
package com.roy.springcloud.userservice.vo.response;
import lombok.Data;
@Data
public class UserSaveResponse {
private String email;
private String name;
private String userId;
}