위와 같이 송금서비스면 insert, update 이런게 여러 개 모이는 로직이 서비스가 될 수 있다.
repository는 crud에서 하나씩 가능하지만
송금서비스와 같이 동시에 송금을 받는이와 보내는 이 둘 다 update가 commit이 필요한데 받은이쪽에서 문제가 생겨 금액이 update 되지않는다고 하면 각각의 트랜잭션에 rollback이 필요하다.
하지만 이것을 서비스화 시키면 송금을 받는이와 보내는 이 update를 하나의 트랜잭션으로 보고 하나라도 실패하면 각각의 rollback이 아닌 송금을 받는이와 보내는 이 update를 하나의 트랜잭션을 rollbak하면 된다.
UserApiController
매개변수로 User 가 오는데 form에 넘어오는건 username, password, email 뿐다.
createTime과 id는 자동으로 넣어진다.
따라서 role은 추가로 넣어줘야한다.
@Autowired
private UserService userService;
@PostMapping("/api/user")
public ResponseDto<Integer> save(@RequestBody User user){
System.out.println("UserApiController save() 호출");
user.setRole(RoleType.User);
int result = userService.회원가입(user);
return new ResponseDto<Integer>(HttpStatus.OK.value(),result); // 자바 오브젝트를 JSON으로 변환해서 리턴(Jackson)
}