SNS 포토그램 만들기 (구독하기)

송용준·2023년 4월 21일
post-thumbnail

연관관계 개념잡기

User는 여러개 게시글 쓰지만 게시글은 한명이서 쓴다. 이 둘의 관계는 1 : N

그럼 foreign키는 누가 가져야 되나
foreign키의 주인은 Many(Board)가 가져야함
One이 가지면 원자성이 깨짐
① 결론 : FK는 Many가 가진다.

영화 예매 같은 경우는 다르다. User가 여러 Movie를 예매할 수 있고 한 Movie를 여러 User가 볼 수 있다. 이 둘의 관계는 N : N
N : N 관계는 무조건 원자성이 깨지므로 중간 테이블이 필요

원래 테이블은 N 중간테이블은 1인 N : 1 이 두 개 생김
② 결론 : N : N 의 관계는 중간 테이블이 생긴다.


구독하기는 ②로 N : N 테이블로 Subscribe에 두가지 필드가 필요하다.

모델 만들기

칼럼명이 맘에 안들어서 커스텀 해줄꺼임

@JoinColumn() : 칼럼 이름 설정
@Table() : 매핑할 테이블 지정

@Table(
		uniqueConstraints = {
				@UniqueConstraint(
						name="subscribe_uk",
						columnNames = {"fromUserId", "toUserId"}
				)
		}
)

구독, 구독취소 API 만들기

@Modifying : INSERT, DELETE, UPDATE를 네이티브 쿼리로 작성하려면 해당 어노테이션 필요 !!
@Query : 네이티브 쿼리

mSubscribe에서 m은 내가 만들었다라는 뜻

: -> 변수를 바인딩 해서 아래 ( ) 안에 넣겠다.

@Query(value = "DELETE FROM subscribe WHERE fromUserId =:fromUserId AND toUserId = :toUserId", nativeQuery = true)
	void mUnSubscribe(int fromUserId, int toUserId);

예외처리하기

SubscribeService 에 try..catch문으로 예외처리 보내주고
에러 메세지 받을 CustomApiException 만들어주고
ControllerExceptionHandler 에 등록해 주고

profile
용용

0개의 댓글