기능 목표
프로젝트 진행이 끝났을 때 모집완료로 변경하고 프로젝트 자랑에 등록하는 과정을 구현한다.
구현 과정
<ProjectMapper>
'프로젝트 모집 완료'를 하면 STATUS의 값이 1에서 0으로 업데이트 되는 쿼리를 작성한다. (default 1)
모집완료를 취소하게 되면 다시 0에서 1로 값이 업데이트 된다.
프로젝트 자랑 생성은 모집완료가 된 프로젝트 중에서 생성 할 수 있으므로 STATUS 값이 0으로 변경 된 프로젝트 리스트만 가져오는 쿼리를 작성한다.
resultMap은 SQL 쿼리 결과를 ShowListDto 객체의 필드에 적절히 매핑한 뒤 프로젝트 자랑에 필요한 쿼리를 작성해준다.
<ProjectRepository>
스프링에서 레포지토리는 데이터 저장소와의 상호작용을 관리하는 역할을 한다.
여기서는 업데이트 쿼리를 받아 프로젝트 id를 매개변수로 받는 모집완료 / 취소 처리하는 메서드를 작성한다.
단순한 상태변경을 처리하는 메서드이므로 타입을 void로 지정했다.
findAllShowProject 메서드를 받아 ShowListDto 객체의 리스트로 반환하는 메서드를 작성한다.
<ProjectService>
서비스 파일은 레포지토리와 컨트롤러 간의 중개 역할을 수행한다. 이 레이어는 애플리케이션의 복잡한 비즈니스 로직을 처리하고, 데이터베이스와 상호작용하며, 컨트롤러로부터 전달된 요청을 처리하여 결과를 반환한다.
- @Transactional : 메서드가 트랜잭션 내에서 실행되도록 지정하는 역할을 한다.
- 서비스 파일에 프로젝트id를 매개변수로 받는 recruitIsDone 메서드를 작성한다. projectRepository에서 recruitDoneCheck메서드를 호출하여 projectId값으로 비교해 모집완료 여부를 체크한다.
- 프로젝트 상태가 1이면 모집완료, -1이면 모집완료 취소를 처리한다.
findAllShowProject 메서드는 ShowListDto의 객체를 리스트로 받아 처리한다.
projectRepository의 findAllShowProject 메서드를 가져와서 allShows 변수에 저장한다.
모든 프로젝트 자랑을 반복문으로 호출 한 다음 다른 테이블에서 가져온 좋아요 수와 프로젝트 스킬을 set에 다시 담아서 allShows를 리턴한다.
<ProjectController>
컨트롤러에서는 클라이언트의 Patch 요청을 받아, 서비스 계층의 recruitDone 메서드를 호출하여 업데이트 결과를 반환한다.
@PatchMapping으로 HTTP PATCH 요청을 처리하며, /recruit/done 경로로 들어오는 요청을 이 메서드가 처리함을 지정한다.
HTTP 상태 코드 200(ok)를 나타내고 projectService의 recruitIsDone 메서드를 호출하게 된다.
또한 GET 요청을 받아, findAllShowProject 메서드를 호출하여 프로젝트 자랑 리스트의 결과를 반환한다.
@GetMapping으로 HTTP GET 요청을 처리하며, /project/show 경로로 들어오는 요청을 이 메서드가 처리함을 지정한다.
HTTP 상태 코드 200(ok)를 나타내고 projectService의 findAllShowProject와 findHotShow 메서드를 호출하게 된다.
어려웠던 점 및 느낀 점
SELECT만 사용을 해보다가 이번 기능 구현으로 처음으로 UPDATE 쿼리문과 PatchMapping을 사용해보았다.
모집완료 로직을 어떻게 처리할 지 감이 안왔었는데 int로 받아 1과 0으로 간단하게 구현할 수 있다는 것을 배웠다.
'🎒내가방 > 📒Spring' 카테고리의 다른 글
[mozip] Spring, mybatis를 활용한 프로젝트 검색하기 (0) | 2024.07.26 |
---|