[Practice] 사용자 API 만들기 (3)
2021. 4. 12. 23:44ㆍSpring/Practice
1. 문제
- 사용자 수정 API
- 사용자 정보가 없는 경우 UserNotFoundException 발생
- 에러 메시지는 "사용자 정보가 없습니다."
- 수정정보는 연락처만 수정 가능, 수정일자는 현재 날짜
2. 풀이
- UserUpdate.java
package com.example.jpa.sample.user.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class UserUpdate {
@Size(max = 20, message = "연락처는 최대 20자까지 입력해야 합니다.")
@NotBlank(message = "연락처는 필수 항목입니다.")
private String phone;
}
- UserNotFoundException.java
package com.example.jpa.sample.user.exception;
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
- ApiUserController.java
package com.example.jpa.sample.user.controller;
import com.example.jpa.sample.notice.model.ResponseError;
import com.example.jpa.sample.user.entity.User;
import com.example.jpa.sample.user.exception.UserNotFoundException;
import com.example.jpa.sample.user.model.UserInput;
import com.example.jpa.sample.user.model.UserUpdate;
import com.example.jpa.sample.user.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@RequiredArgsConstructor
@RestController
public class ApiUserController {
private final UserRepository userRepository;
/*
// 문제 1
@PostMapping("/api/user")
public ResponseEntity<?> addUser(@RequestBody @Valid UserInput userInput, Errors errors) {
List<ResponseError> responseErrorList = new ArrayList<>();
if(errors.hasErrors()) {
errors.getAllErrors().forEach(e -> {
responseErrorList.add(ResponseError.of((FieldError)e));
});
return new ResponseEntity<>(responseErrorList, HttpStatus.BAD_REQUEST);
}
// return ResponseEntity.ok().build();
return new ResponseEntity<>(HttpStatus.OK);
}
*/
// 문제 2
@PostMapping("/api/user")
public ResponseEntity<?> addUser(@RequestBody @Valid UserInput userInput, Errors errors) {
List<ResponseError> responseErrorList = new ArrayList<>();
if(errors.hasErrors()) {
errors.getAllErrors().forEach(e -> {
responseErrorList.add(ResponseError.of((FieldError)e));
});
return new ResponseEntity<>(responseErrorList, HttpStatus.BAD_REQUEST);
}
userRepository.save(User.builder()
.email(userInput.getEmail())
.name(userInput.getName())
.password(userInput.getPassword())
.phone(userInput.getPhone())
.regDate(LocalDateTime.now())
.build()
);
return new ResponseEntity<>(HttpStatus.OK);
}
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<?> handlerUserNotFoundException(UserNotFoundException exception) {
return new ResponseEntity<>(exception.getMessage(), HttpStatus.BAD_REQUEST);
}
// 문제 3
@PutMapping("/api/user/{id}")
public ResponseEntity<?> updateUser(@PathVariable Long id, @RequestBody @Valid UserUpdate userUpdate, Errors errors) {
List<ResponseError> responseErrorList = new ArrayList<>();
if(errors.hasErrors()) {
errors.getAllErrors().forEach(e -> {
responseErrorList.add(ResponseError.of((FieldError)e));
});
return new ResponseEntity<>(responseErrorList, HttpStatus.BAD_REQUEST);
}
User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("사용자 정보가 없습니다."));
user.setPhone(userUpdate.getPhone());
user.setUpdateDate(LocalDateTime.now());
userRepository.save(user);
return ResponseEntity.ok().build();
}
}
728x90
'Spring > Practice' 카테고리의 다른 글
[Practice] 사용자 API 만들기 (5) (0) | 2021.04.13 |
---|---|
[Practice] 사용자 API 만들기 (4) (0) | 2021.04.13 |
[Practice] 사용자 API 만들기 (2) (0) | 2021.04.12 |
[Practice] 사용자 API 만들기 (1) (0) | 2021.04.12 |