Spring/JPA + Security

[Spring Data JPA] 좋아요 구현하기 - 1 모델 만들기

pyogowoon 2023. 1. 12. 16:35

우선 들어가기전에

board.js 에 수정해야 할 사항이 있다.

 

board.js

function getStoryItem(image) {
  											.
                                            .
                                            .
                                       

                  <button>
                     <i class="fas fa-heart active" id="storyLikeIcon-${image.id}" onclick="toggleLike(${image.id})"></i>
                  </button>
             
}

 

function toggleLike(imageId) {
   let likeIcon = $(`#storyLikeIcon-${imageId}`);
   if (likeIcon.hasClass("far")) {
      likeIcon.addClass("fas");
      likeIcon.addClass("active");
      likeIcon.removeClass("far");
   } else {
      likeIcon.removeClass("fas");
      likeIcon.removeClass("active");
      likeIcon.addClass("far");
   }
}

 js가 들어오는 데이터에 따라 다른 화면을 뿌릴 수 있게 id 값에 ${image.id} 와 onclick 시 toggleLike 함수의 인자에 

${image.id} 를 넘겨줬다.

 

 

 

Likes


@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Table(
     uniqueConstraints ={
             @UniqueConstraint(name="likes_uk",
             columnNames = {"imageId","userId"}
             )
     }
    //좋아요는 중복될수 없으므로 유니크키로 묶은것
)
public class Likes { // N

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @JoinColumn(name="imageId")
    @ManyToOne
    private Image image; //1

    @JsonIgnoreProperties({"images"})
    @JoinColumn(name="userId")
    @ManyToOne
    private User user;

   private LocalDateTime createDate;

    @PrePersist  // DB에 INSERT 되기 직전에 실행
    public void createDate(){
        this.createDate = LocalDateTime.now();
    }
}

Mysql 과 MariaDB엔 이미 like 함수가 있기때문에 이름은 Likes 로 지정

 

좋아요는 중복될 수 없기 때문에 @Table 어노테이션을 통하여 유니크 키 설정,

그리고 이미지와 유저정보를 바탕으로 좋아요를 구현하기 위해 ManyToOne으로 조인해주었고 @JoinColumn을 통해 네임도 설정해주면 끝.

 

LikesRepository

import org.springframework.data.jpa.repository.JpaRepository;

public interface LikesRepository extends JpaRepository<Likes , Integer> {
}

Repository 까지 연결하면 Domain 은 끝.