SpringBoot 축구 팀 CRUD 초초초미니 프로젝트 - 축구팀 수정 구현

2024. 4. 22. 20:54스프링/축구 팀 CRUD

그동안의 기능을 구현한 과정을 보면 자세한 부분에 있어서는 이제는 이해가 될 것이다.

  • 컨트롤러
    • id 값과 받은 정보를 받은 dto를 soccerteamService 로 보내주고 해당 서비스에서 요리(데이터 처리)를 해주면 된다.
@PatchMapping("/api/soccer-team/{id}")
    public ResponseEntity<Team> createSoccer(@PathVariable Long id, @RequestBody SoccerteamDto dto){
        Team updated = soccerteamService.updateSoccerTeam(id, dto);
        //수정이 잘 되었는가?
        return (updated != null) ?
                ResponseEntity.status(HttpStatus.OK).body(updated):
                ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    }
  • 서비스
    • 클라이언트에서 수정 요청한 id와 데이터를 이용해 id 일치 확인 후 변경해준다!
    public Team updateSoccerTeam(Long id, SoccerteamDto dto) {
            // 1. 엔티티 변환하고 파라미터로 받아온 id 값에 해당하는 엔티티 가져오기
            Team team = dto.toEntity(); // toEntity메서드는 이전 글 생성 기능 글에서 확인.
            Team target = soccerteamRepository.findById(id).orElse(null);
            // 2. 파라미터로 받아온 id값과 엔티티의 id값과 다르거나, 조회한 id의 정보가 없다면 null 반환
            if (team.getId() != id || target.getId() == null)
                return null;
            // 3. 같다면 업데이트
            target.patch(team);
            // 4. 업데이트 된 정보 저장
            Team update = soccerteamRepository.save(target);
            return update;
        }
    
    • 근데 여기서 저 patch 메서드가 궁금할 것이다. 바로 수정요청한 데이터로 수정하기 위해 생성한 Team 엔티티 클래스 내에서 생성한 메서드이다.
    @Entity
    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    public class Team {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        @Column
        private String teamname;
        @Column
        private String league;
    
    		/*클라이언트에서 바꾸고 싶어하는 데이터가 null 값이 아니라면 기존의 데이터로 바꿔달라는 뜻
    		만약 저 if문 없이 this.teamname = team.teamname; 으로 한다면,
     teamname 또는 league 하나의 데이터만 바꿀 경우 바꾸지 않은 데이터는 null값이 되어버린다. */
        public void patch(Team team) {
            if (team.teamname != null)
                this.teamname = team.teamname;
            if (team.league != null)
                this.league = team.league;
        }
    }
    

이렇게 기존 팀이 있었다면 수정을 하고

확인을 해보면

올바르게 바뀐 것을 확인할 수 있다.

h2 DB에서도 확인할 수 있다. h2 db 연결은 나중에 포스팅할 예정이다.