본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.04.04 TIL - 일정 관리 개선 앱 트러블 슈팅

by pandastic 2025. 4. 4.
반응형

 

 

1. 문제 상황

  • 유저 수정 시 Postman에서는 수정된 결과가 보여지나, DB 상에서는 제대로 update 되지 않는 상황 발생.

 

2. 해결 과정

  • UserUpdateResponseDto 생성.
  • 리턴 타입 UserResponseDto에서 UserUpdateResponseDto 로 변경.

 

3. 문제 발생 이유

  • User Entity에 update 메서드가 존재하지 않았음.

 

[문제 코드] 

더보기

UserController

@PatchMapping("/{id}")
public ResponseEntity<UserResponseDto> updateUser(@PathVariable Long id,
                                                  @RequestBody UserUpdateRequestDto requestDto){

    return new ResponseEntity<>(userService.updateUser(id, requestDto.getUsername(), requestDto.getPassword(), requestDto.getEmail()), HttpStatus.OK);
}

 

 UserService

@Transactional
public UserResponseDto updateUser(Long id, String username, String password, String email) {

    User user = userRepository.findByIdOrElseThrow(id);

    user.isPassword(password);

    return new UserResponseDto(username, email);

}

 

 

[문제 해결 및 개선된 코드]

더보기

UserUpdateResponseDto

package schedule.schedule.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class UserUpdateResponseDto {
    private String username;
    private String email;
}

 

User

public void update(String username, String email){
    this.username = username;
    this.email = email;
}

 

UserController

@PatchMapping("/{id}")
public ResponseEntity<UserUpdateResponseDto> updateUser(@PathVariable Long id,
                                                  @RequestBody UserUpdateRequestDto requestDto){

    UserUpdateResponseDto userUpdateResponseDto = userService.updateUser(id, requestDto);

    return new ResponseEntity<>(userUpdateResponseDto, HttpStatus.OK);
}

 

UserService

@Transactional
public UserUpdateResponseDto updateUser(Long id, UserUpdateRequestDto requestDto) {

    User user = userRepository.findByIdOrElseThrow(id);

    user.update(requestDto.getUsername(), requestDto.getEmail());

    return new UserUpdateResponseDto(user.getUsername(), user.getEmail());

}

 

반응형