🧑🏻⚕️ 팔로우 DB에 집어넣기 profile.js → FollowApiController → FollowService → FollowRepository
🧑🏻⚕️ 팔로우 모달창 띄우기 profile.jsp → profile.js → UserApiController → FollowService → UserApiController
Follow 모델 생성
➲ 1. profile.js

➲ 2. FollowApiController

➲ 3. FollowService

➲ 4. FollowRepository

➲ profile.jsp
1. 팔로우정보를 클릭한다.
➲ profile.js : followInfoModalOpen
2. 우선 첫 번째로 /api/user/${pageUserId}/follow인 컨트롤러를 찾아서 간다.

➲ UserApiController
3. 매핑된 주소로 왔고, 이제 FollowService에 followerList를 실행하러 간다. 
➲ FollowService
4. 여기엔 네이티브쿼리가 작성되어 있다.
QLRM(JpaResultMapper)
: DB에서 Result된 결과를 자바 클래스에 매핑해주는 라이브러리이다.
+FollowResDto 
➲ UserApiController → profile.js
5. 4번에서 followResDtos를 리턴받고, 이 리턴값이 결국에 UserApiController를 거쳐서 다시 profile.js로 돌아가게 되는데, 그 다음에 profile.js에 갈색 박스 부분이 실행된다.
그리고 다음 그림과 같은 함수를 실행한다.
ex.
1. 나는 A로 로그인을 했다.
2. A로 로그인 했고 → B의 팔로우 정보를 보려고 B의 프로필 페이지로가서 팔로우 정보를 클릭한다.
B가 팔로우 중인 USER를 알아내는 쿼리이다.
3. 나는 지금 A로 로그인한 상태이고, A가 누구를 팔로우 하는 지를 알아야 한다.
4. 팔로우 여부 완성 쿼리 [ A로 로그인을 해서, B의 팔로우 모달 창을 보는 경우 ]
➙ 이 4가지 조건을 만족하는 쿼리를 만들어야한다.
select u.id, u.username, u.profileImageUrl
if((select 1 from Follow where fromUserId = A and toUserId=u.id), 1,0) FollowState # 스칼라 서브 쿼리 : 단일행을 리턴해야 한다.
if((?=u.id), 1,0) EqualUserState
from USER u inner join FOLLOW f
on u.id=f.toUserId
where f.fromUserId=?
추가 설명 : followState의 역할 : A로 로그인을 한 상황이고, A로 B의 팔로우 정보를 보고 있다고 가정해보자.
다음과 같은 그림이 나와야 한다. qwe(A)이다. 팔로우 or 팔로우 취소 버튼을 활성화 시킬 필요조차 없다.
그래서 profile.js 부분을 보면
if문을 걸어서 저렇게 작성했다.
⟴ 지금까지 구현해본 기능중에 가장 복잡한 쿼리를 가지고, JS지식의 부재를 경험한 기능이었다. 아직 쿼리 부분도 많이 미숙하고, JS는 한참 멀었다... 그래도 JAVA쪽은 비교적으로 나은 것 같다.
앞으로도 공부해야할 부분이 많다. 다음 포스팅은 아마 블로그 프로젝트에 댓글을 다는 기능이 될 것 같다.