저희 팀에서 구상하고 있는 프로젝트의 핵심 기능은 콜라보 리퀘스트 요청입니다.

 

1. 기존의 게시물에 콜라보를 하고 싶으면 콜라보 리퀘스트를 보냅니다.

2. 콜라보 리퀘스트를 받은 게시물의 작성자가 승인을 하면

3. 게시글 조회시 승인된 콜라보 리퀘스트의 목록이 함께 조회가 됩니다.

 

제가 맡은 도메인이 바로 이 콜라보리퀘스트입니다. 깃헙의 pull request에서 영감을 받은 기능입니다.

현재 CRUD의 CR만 구현된 상태입니다. 승인을 위해 보여지는 상세 페이지와 승인이 완료된 콜라보리스트를 보여주는 기능을 각각 구현했습니다.

 

수정 기능과 삭제 기능은 오늘 만들어 놓으려고 합니다.

승인되기 전에만 수정 또는 삭제 할 수 있게 합니다.

 

 

위의 기능들은 CRUD이기 때문에 기존에 했던 프로젝트와 크게 다르지는 않습니다.

그래서 제가 욕심을 내고 있는 기능은 알람기능입니다.

 

원하는 기능은 아래와 같습니다.

 

1. 콜라보 리퀘스트를 작성하면, 해당 게시글의 작성자에게 승인 요청 알람 보내기

2. 승인이 완료되면, 해당 콜라보 리퀘스트 작성자에게 승인 완료 알람 보내기

 

CRUD가 끝나면 깊이 파볼 생각입니다.

 

List 수정 하는 법

삭제하는 법은 querydsl을 사용해서 처리했는데 수정은 모르겠어서 일단은 삭제 후 새로 저장하는 방법으로 구현했습니다.

 

수정 시, musicList의 music의 갯수가 늘어나거나 줄어드는 경우가 있어서 뭔가 복잡한 느낌이 듭니다. 

 

결국 알아낸 방법은 똑같이 query를 수정해주면 된다는 것이다.

삭제할 때는 다음과 같은 코드를 사용해서 musicList를 삭제해주었다. Music은 CollaboRequest를 외래키로 가지고 있다.

 

@Transactional
@Modifying
@Query("DELETE from Music c where c.collaboRequest = :collaboRequest")
void deleteAllByCollaboRequest(@Param("collaboRequest") CollaboRequest collaboRequestId);

 

QueryDSL

  1. 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다.
  2. 자동 완성 등 IDE의 도움을 받을 수 있다.
  3. 동적인 쿼리 작성이 편리하다.
  4. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.

 

QueryDSL이란 것으로 쿼리를 더 쉽게 커스텀해서 사용할 수 있다.

이제 알았으니 Update를 위한 query를 만들어보자.

https://stackoverflow.com/questions/31937540/update-list-of-entities-in-one-query-jpa

 

Update List of entities in one query jpa

I need to update a list of objects in one query. I have class Parent which has a list of Child in ManyToMany relation. I need to update a list of Parent by setting children list to empty(remove all

stackoverflow.com

개발자의 친구 stackOverFlow를 참조해서 키워드를 찾았다.

 

아래와 같이 하면 된다고 한다.

UPDATE [테이블] SET [] = '변경할값' WHERE [조건]

 

좀 더 고민해봐야겠다...

+ Recent posts