提交 d4c2a5a0 authored 作者: Whispa's avatar Whispa

commit commit

上级 d3e9fa05
package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.enums.ResultCodeEnum;
import com.example.afrishop_v3.models.TbCfItemComment;
import com.example.afrishop_v3.models.TbCfItemLike;
import com.example.afrishop_v3.models.TbCfUserInfo;
import com.example.afrishop_v3.repository.TbCfItemCommentRepository;
import com.example.afrishop_v3.repository.TbCfItemLikeRepository;
import com.example.afrishop_v3.security.services.AuthenticationUser;
import org.springframework.web.bind.annotation.*;
import java.util.Optional;
@RestController
@RequestMapping("item_like")
public class ItemLikeController {
private final TbCfItemLikeRepository repository;
private final TbCfItemCommentRepository commentRepository;
private final AuthenticationUser user;
public ItemLikeController(TbCfItemLikeRepository repository, TbCfItemCommentRepository commentRepository, AuthenticationUser user) {
this.repository = repository;
this.commentRepository = commentRepository;
this.user = user;
}
@PutMapping("like/{comment_id}")
public Result likeComment(@PathVariable("comment_id") String commentId ){
Optional<TbCfItemComment> commentOptional = commentRepository.findById(commentId);
if( !commentOptional.isPresent() )
return new Result(ResultCodeEnum.VALIDATE_ERROR.getCode(),"Item comment not found !");
TbCfUserInfo user = this.user.user();
String userId = user.getUserId();
boolean exists = repository.existsByCommentIdAndUserUserId(commentId, userId);
if( exists ){
repository.deleteAllByCommentIdAndUserUserId(commentId,userId);
return new Result<>(false,"Comment disliked");
}
TbCfItemLike itemLike = new TbCfItemLike();
itemLike.setUser(user);
itemLike.setComment(commentOptional.get());
repository.save(itemLike);
return new Result<>(true,"Comment liked");
}
}
package com.example.afrishop_v3.controllers; package com.example.afrishop_v3.controllers;
import com.example.afrishop_v3.base.Result; import com.example.afrishop_v3.base.Result;
import com.example.afrishop_v3.inter_face.CommentCount;
import com.example.afrishop_v3.models.TbCfItemComment; import com.example.afrishop_v3.models.TbCfItemComment;
import com.example.afrishop_v3.models.TbCfUserInfo;
import com.example.afrishop_v3.repository.TbCfItemCommentRepository; import com.example.afrishop_v3.repository.TbCfItemCommentRepository;
import com.example.afrishop_v3.repository.UserRepository;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
...@@ -11,15 +14,17 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -11,15 +14,17 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.Optional;
@RestController @RestController
@RequestMapping("shopify") @RequestMapping("shopify")
public class ShopifyController { public class ShopifyController {
private final TbCfItemCommentRepository repository; private final TbCfItemCommentRepository repository;
private final UserRepository userRepository;
public ShopifyController(TbCfItemCommentRepository repository) { public ShopifyController(TbCfItemCommentRepository repository, UserRepository userRepository) {
this.repository = repository; this.repository = repository;
this.userRepository = userRepository;
} }
@GetMapping("/querycomments") @GetMapping("/querycomments")
...@@ -27,11 +32,19 @@ public class ShopifyController { ...@@ -27,11 +32,19 @@ public class ShopifyController {
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum, @RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(value = "userId", required = false) String userId) { @RequestParam(value = "userId", required = false) String userId) {
Page<TbCfItemComment> list = repository.findAllByItemId(itemId, PageRequest.of(pageNum, pageSize)); PageRequest request = PageRequest.of(pageNum, pageSize);
// List<TbCfItemComment> content = list.getContent(); if(StringUtils.isNotBlank(userId) ){
// for (TbCfItemComment item : content){ Optional<TbCfUserInfo> userOptional = userRepository.findById(userId);
// if(StringUtils.isNotBlank(userId)) item.setLike(repository.existsByUserUserIdAndItemId(userId,itemId)); if( userOptional.isPresent() ){
// } TbCfUserInfo user = userOptional.get();
Page<CommentCount> page = repository.findAllByItemIdAndUser(itemId, user, request);
page.getContent().forEach(v-> v.getItemComment().setLike(v.getCommented() != null && v.getCommented() > 0));
Page<TbCfItemComment> map = page.map(CommentCount::getItemComment);
return new Result<>(map);
}
}
Page<TbCfItemComment> list = repository.findAllByItemId(itemId, request);
return new Result<>(list); return new Result<>(list);
} }
} }
package com.example.afrishop_v3.inter_face;
import com.example.afrishop_v3.models.TbCfItemComment;
public interface CommentCount {
public Integer getCommented();
public TbCfItemComment getItemComment();
}
...@@ -2,6 +2,7 @@ package com.example.afrishop_v3.models; ...@@ -2,6 +2,7 @@ package com.example.afrishop_v3.models;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Formula;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable; import java.io.Serializable;
...@@ -95,6 +96,9 @@ public class TbCfItemComment{ ...@@ -95,6 +96,9 @@ public class TbCfItemComment{
@Transient @Transient
private boolean isLike; private boolean isLike;
@Formula(value = "(SELECT IFNULL(COUNT(*),0) as num FROM tb_cf_item_like lk where lk.comment_id = id)")
private Integer likeCount;
public boolean isLike() { public boolean isLike() {
return isLike; return isLike;
} }
......
package com.example.afrishop_v3.models;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
@Entity
@Data
public class TbCfItemLike extends Model {
@Column(columnDefinition = "comment_id",name = "comment_id")
@ManyToOne
private TbCfItemComment comment;
@Column(columnDefinition = "user_id",name = "user_id")
@ManyToOne
private TbCfUserInfo user;
public void setUser(TbCfUserInfo user) {
this.user = user;
}
public void setComment(TbCfItemComment comment) {
this.comment = comment;
}
}
package com.example.afrishop_v3.repository; package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.inter_face.CommentCount;
import com.example.afrishop_v3.models.TbCfItemComment; import com.example.afrishop_v3.models.TbCfItemComment;
import com.example.afrishop_v3.models.TbCfUserInfo;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
public interface TbCfItemCommentRepository extends PagingAndSortingRepository<TbCfItemComment,String> { public interface TbCfItemCommentRepository extends PagingAndSortingRepository<TbCfItemComment,String> {
boolean existsByUserUserIdAndItemId(String userId, String itemId); boolean existsByUserUserIdAndItemId(String userId, String itemId);
Page<TbCfItemComment> findAllByItemId(String itemId, Pageable pageable); Page<TbCfItemComment> findAllByItemId(String itemId, Pageable pageable);
@Query("select a as itemComment, count(x) as commented from #{#entityName} a left join TbCfItemLike x on a.id=x.commentId and x.user=:user where a.itemId=:itemId group by a")
Page<CommentCount> findAllByItemIdAndUser(@Param("itemId") String itemId, @Param("user") TbCfUserInfo user, Pageable pageable);
} }
package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfItemLike;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.transaction.annotation.Transactional;
public interface TbCfItemLikeRepository extends PagingAndSortingRepository<TbCfItemLike,String> {
boolean existsByCommentIdAndUserUserId(String comment_id, String user_userId);
@Transactional
void deleteAllByCommentIdAndUserUserId(String comment_id, String user_userId);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论