Skip to content

Commit

Permalink
feature #40 - Like Table Create
Browse files Browse the repository at this point in the history
Like 테이블 생성.
ReviewDto.Response 에 Like Count 포함하게 변경
- 추가해야 하는 설정들
Member 와 연관관계 설정
동일한 유저가 누르면 좋아요 delete true로 변경
  • Loading branch information
kimaj2001 committed Jul 5, 2023
1 parent a0f80b1 commit 413ce01
Show file tree
Hide file tree
Showing 10 changed files with 112 additions and 5 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ dependencies {
asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
implementation 'org.springframework.restdocs:spring-restdocs-core'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'
// implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
// implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.codestates.server.like.controller;

import com.codestates.server.like.mapper.LikeMapper;
import com.codestates.server.like.service.LikeService;
import com.codestates.server.review.dto.ReviewDto;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class LikeController {
private final LikeService likeService;
private final LikeMapper likeMapper;
@PostMapping("/review/{review-id}/likes")
public ResponseEntity likes(@PathVariable("review-id") Long reviewId) {
likeService.addlike(likeMapper.reviewIdToLike(reviewId));
return new ResponseEntity(HttpStatus.OK);
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/codestates/server/like/entity/ReviewLike.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.codestates.server.like.entity;

import com.codestates.server.review.entity.Review;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ReviewLike {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne //(targetEntity = Tag.class, fetch = FetchType.LAZY)
@JoinColumn(name = "review_id", insertable = false, updatable = false)
private Review review;
@Column(name = "review_id")
private Long reviewId;

private Boolean delete = false;
// @ManyToOne
// @JoinColumn(name = "MEMBER_ID")
// private Member member;
}
12 changes: 12 additions & 0 deletions src/main/java/com/codestates/server/like/mapper/LikeMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.codestates.server.like.mapper;

import com.codestates.server.like.entity.ReviewLike;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface LikeMapper {
@Mapping(target = "reviewId", source = "review_id")
ReviewLike reviewIdToLike(Long review_id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.codestates.server.like.repository;

import com.codestates.server.like.entity.ReviewLike;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface LikeRepository extends JpaRepository<ReviewLike, Long> {
}
23 changes: 23 additions & 0 deletions src/main/java/com/codestates/server/like/service/LikeService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.codestates.server.like.service;

import com.codestates.server.like.entity.ReviewLike;
import com.codestates.server.like.repository.LikeRepository;
import com.codestates.server.review.entity.Review;
import com.codestates.server.review.repository.ReviewRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class LikeService {
@Autowired
private LikeRepository likeRepository;

@Autowired
private ReviewRepository reviewRepository;

@Transactional
public void addlike(ReviewLike like) {
likeRepository.save(like);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,6 @@ public static class Response {
private int score;
private String content;
private Set<String> tags;
private long likes;
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
package com.codestates.server.review.entity;

import com.codestates.server.like.entity.ReviewLike;
import com.codestates.server.tag.entity.ReviewTag;
import lombok.*;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Entity
Expand Down Expand Up @@ -47,6 +49,9 @@ public class Review {
@Column(nullable = false, columnDefinition = "DATETIME(0)")
private LocalDateTime update_at;

@OneToMany(mappedBy = "review")
private List<ReviewLike> likes = new ArrayList<>();

@OneToMany(mappedBy = "review")
private Set<ReviewTag> reviewTags = new HashSet<>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@ public interface ReviewMapper {
Review postToReview(ReviewDto.Post post);
@Mapping(target = "tags",
expression = "java(review.getReviewTags().stream().map(i -> i.getTagId()).collect(java.util.stream.Collectors.toSet()))")
@Mapping(target = "likes",
expression = "java(review.getLikes().stream().count())")
ReviewDto.Response reviewToResponse(Review review);
}
4 changes: 2 additions & 2 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ spring:
url: jdbc:h2:mem:test
jpa:
hibernate:
ddl-auto: create # (1) ??? ?? ??
show-sql: true # (2) SQL ?? ??
ddl-auto: create
show-sql: true
properties:
hibernate:
format_sql: true

0 comments on commit 413ce01

Please sign in to comment.