提交 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;
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.TbCfUserInfo;
import com.example.afrishop_v3.repository.TbCfItemCommentRepository;
import com.example.afrishop_v3.repository.UserRepository;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
......@@ -11,15 +14,17 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("shopify")
public class ShopifyController {
private final TbCfItemCommentRepository repository;
private final UserRepository userRepository;
public ShopifyController(TbCfItemCommentRepository repository) {
public ShopifyController(TbCfItemCommentRepository repository, UserRepository userRepository) {
this.repository = repository;
this.userRepository = userRepository;
}
@GetMapping("/querycomments")
......@@ -27,11 +32,19 @@ public class ShopifyController {
@RequestParam(value = "pageNum", defaultValue = "0") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(value = "userId", required = false) String userId) {
Page<TbCfItemComment> list = repository.findAllByItemId(itemId, PageRequest.of(pageNum, pageSize));
// List<TbCfItemComment> content = list.getContent();
// for (TbCfItemComment item : content){
// if(StringUtils.isNotBlank(userId)) item.setLike(repository.existsByUserUserIdAndItemId(userId,itemId));
// }
PageRequest request = PageRequest.of(pageNum, pageSize);
if(StringUtils.isNotBlank(userId) ){
Optional<TbCfUserInfo> userOptional = userRepository.findById(userId);
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);
}
}
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;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.annotations.Formula;
import javax.persistence.*;
import java.io.Serializable;
......@@ -95,6 +96,9 @@ public class TbCfItemComment{
@Transient
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() {
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;
import com.example.afrishop_v3.inter_face.CommentCount;
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.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
public interface TbCfItemCommentRepository extends PagingAndSortingRepository<TbCfItemComment,String> {
boolean existsByUserUserIdAndItemId(String userId, String itemId);
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论