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 은 끝.