Skip to content

Commit

Permalink
Merge pull request #117 from Mojacknong/feat_101/신고-로직-개발
Browse files Browse the repository at this point in the history
Feat 101/신고 로직 개발
  • Loading branch information
Ryeolee authored Sep 7, 2024
2 parents 9385a18 + 7c82ddc commit b0e3b0a
Show file tree
Hide file tree
Showing 10 changed files with 190 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -180,4 +180,22 @@ public BaseResponseDto<?> successFarmClub(
) {
return BaseResponseDto.of(SuccessCode.SUCCESS, farmClubService.successFarmClub(farmClubId, user.getUserId()));
}

@PostMapping("/report/mission/{missionPostId}")
public BaseResponseDto<?> reportMissionPost(
@AuthenticationPrincipal CustomUser user,
@PathVariable Long missionPostId
) {
missionPostService.reportMissionPost(user.getUserId(), missionPostId);
return BaseResponseDto.of(SuccessCode.SUCCESS, null);
}

@PostMapping("/report/comment/{commentId}")
public BaseResponseDto<?> reportMissionPostComment(
@AuthenticationPrincipal CustomUser user,
@PathVariable Long commentId
) {
missionPostService.reportMissionPostComment(user.getUserId(), commentId);
return BaseResponseDto.of(SuccessCode.SUCCESS, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ public class MissionPost extends BaseEntity {
@Builder.Default
private List<MissionPostComment> missionPostComments = new ArrayList<>();

@OneToMany(mappedBy = "missionPost", cascade = CascadeType.ALL)
@Builder.Default
private List<MissionPostReport> missionPostReports = new ArrayList<>();

@OnDelete(action = OnDeleteAction.CASCADE)
@ManyToOne(fetch = FetchType.LAZY)
Expand All @@ -66,4 +69,8 @@ public void addLike(MissionPostLike missionPostLike) {
public void addComment(MissionPostComment missionPostComment) {
missionPostComments.add(missionPostComment);
}

public void addReport(MissionPostReport missionPostReport){
this.missionPostReports.add(missionPostReport);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
import com.modernfarmer.farmusspring.domain.user.entity.User;
import com.modernfarmer.farmusspring.global.common.BaseEntity;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

import java.util.ArrayList;
import java.util.List;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
Expand All @@ -35,6 +35,10 @@ public class MissionPostComment extends BaseEntity {
@JoinColumn(name = "user_id")
private User user;

@OneToMany(mappedBy = "missionPostComment", cascade = CascadeType.ALL)
@Builder.Default
private List<MissionPostCommentReport> missionPostCommentReports = new ArrayList<>();

public static MissionPostComment createMissionPostComment(String comment, MissionPost missionPost, User user){
MissionPostComment newMissionPostComment = MissionPostComment.builder()
.comment(comment)
Expand All @@ -47,4 +51,8 @@ public static MissionPostComment createMissionPostComment(String comment, Missio

return newMissionPostComment;
}

public void addReport(MissionPostCommentReport missionPostCommentReport){
this.missionPostCommentReports.add(missionPostCommentReport);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.modernfarmer.farmusspring.domain.farmclub.entity;

import com.modernfarmer.farmusspring.domain.user.entity.User;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@SuperBuilder
@Entity(name = "mission_post_comment_report")
public class MissionPostCommentReport {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mission_post_comment_report_id")
private Long id;

@OnDelete(action = OnDeleteAction.CASCADE)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "mission_post_comment_id")
private MissionPostComment missionPostComment;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;

public static MissionPostCommentReport createMissionPostCommentReport(MissionPostComment missionPostComment, User user){
MissionPostCommentReport report = MissionPostCommentReport.builder()
.missionPostComment(missionPostComment)
.user(user)
.build();

missionPostComment.addReport(report);
return report;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.modernfarmer.farmusspring.domain.farmclub.entity;

import com.modernfarmer.farmusspring.domain.user.entity.User;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@SuperBuilder
@Entity(name = "mission_post_report")
public class MissionPostReport {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mission_post_report_id")
private Long id;

@OnDelete(action = OnDeleteAction.CASCADE)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "mission_post_id")
private MissionPost missionPost;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;

public static MissionPostReport createMissionPostReport(MissionPost missionPost, User user){
MissionPostReport report = MissionPostReport.builder()
.missionPost(missionPost)
.user(user)
.build();

missionPost.addReport(report);
return report;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ public enum FarmClubErrorCode implements ResponseCode {

FARM_CLUB_NOT_FOUND(3001, "해당 팜클럽을 찾을 수 없습니다."),
USER_FARM_CLUB_NOT_FOUND(3002, "해당 등록 정보를 찾을 수 없습니다."),
MISSION_POST_NOT_FOUND(3003, "해당 미션 포스트를 찾을 수 없습니다.");
MISSION_POST_NOT_FOUND(3003, "해당 미션 포스트를 찾을 수 없습니다."),
MISSION_POST_COMMENT_NOT_FOUND(3004, "해당 미션 포스트 댓글을 찾을 수 없습니다.");

private final int code;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import com.modernfarmer.farmusspring.domain.farmclub.dto.res.GetMissionPostCommentResponseDto;
import com.modernfarmer.farmusspring.domain.farmclub.entity.MissionPost;
import com.modernfarmer.farmusspring.domain.farmclub.entity.MissionPostComment;
import com.modernfarmer.farmusspring.domain.farmclub.exception.FarmClubErrorCode;
import com.modernfarmer.farmusspring.domain.farmclub.exception.custom.FarmClubEntityNotFoundException;
import com.modernfarmer.farmusspring.domain.farmclub.repository.MissionPostCommentRepository;
import com.modernfarmer.farmusspring.domain.farmclub.repository.MissionPostRepository;
import com.modernfarmer.farmusspring.domain.farmclub.vo.MissionPostVo;
import com.modernfarmer.farmusspring.domain.history.vo.MissionPostHistoryVo;
Expand All @@ -18,12 +20,18 @@
public class MissionPostHelper {

private final MissionPostRepository missionPostRepository;
private final MissionPostCommentRepository missionPostCommentRepository;

public MissionPost getMissionPost(Long missionPostId) {
return missionPostRepository.findById(missionPostId)
.orElseThrow(() -> new FarmClubEntityNotFoundException("존재하지 않는 미션 게시글입니다.", FarmClubErrorCode.MISSION_POST_NOT_FOUND));
}

public MissionPostComment getMissionPostComment(Long missionPostCommentId) {
return missionPostCommentRepository.findById(missionPostCommentId)
.orElseThrow(() -> new FarmClubEntityNotFoundException("존재하지 않는 미션 게시글 댓글입니다.", FarmClubErrorCode.MISSION_POST_COMMENT_NOT_FOUND));
}

public List<MissionPostHistoryVo> getMissionPostHistory(Long userFarmClubId) {
return missionPostRepository.getMissionPostHistory(userFarmClubId);
}
Expand All @@ -32,7 +40,7 @@ public List<MissionPostVo> getMissionPostList(Long userId, Long missionPostId) {
return missionPostRepository.getMissionPostList(userId, missionPostId);
}

public GetMissionPostCommentResponseDto getMissionPostComment(Long missionPostId, Long userId) {
public GetMissionPostCommentResponseDto getMissionPostComments(Long missionPostId, Long userId) {
return missionPostRepository.getMissionPostComment(missionPostId, userId);
}

Expand All @@ -41,6 +49,12 @@ public void deleteMissionPostLike(Long userId, Long missionPostId) {
missionPostRepository.deleteMissionPostLike(userId, missionPostId);
}

public void deleteMissionPost(MissionPost missionPost){
missionPostRepository.delete(missionPost);
}
public void deleteMissionPostComment(MissionPostComment missionPostComment){
missionPostCommentRepository.delete(missionPostComment);
}
public void deleteMissionPostComments(Long userId){
missionPostRepository.deleteMissionPostComments(userId);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.modernfarmer.farmusspring.domain.farmclub.repository;

import com.modernfarmer.farmusspring.domain.farmclub.entity.MissionPostComment;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MissionPostCommentRepository extends JpaRepository<MissionPostComment, Long> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
import static com.modernfarmer.farmusspring.domain.farmclub.entity.QFarmClub.farmClub;
import static com.modernfarmer.farmusspring.domain.farmclub.entity.QMissionPost.missionPost;
import static com.modernfarmer.farmusspring.domain.farmclub.entity.QMissionPostComment.missionPostComment;
import static com.modernfarmer.farmusspring.domain.farmclub.entity.QMissionPostCommentReport.missionPostCommentReport;
import static com.modernfarmer.farmusspring.domain.farmclub.entity.QMissionPostLike.missionPostLike;
import static com.modernfarmer.farmusspring.domain.farmclub.entity.QMissionPostReport.missionPostReport;
import static com.modernfarmer.farmusspring.domain.farmclub.entity.QUserFarmClub.userFarmClub;
import static com.modernfarmer.farmusspring.domain.myveggiegarden.entity.QMyVeggie.myVeggie;
import static com.modernfarmer.farmusspring.domain.user.entity.QUser.user;
Expand All @@ -43,11 +45,17 @@ public List<GetMissionPostListVo> getMissionPostStepNumAndImage(Long farmClubId)

@Override
public GetMissionPostCommentResponseDto getMissionPostComment(Long missionPostId, Long userId) {
List<Long> reportCommentIds = queryFactory
.select(missionPostCommentReport.missionPostComment.id)
.from(missionPostCommentReport)
.where(missionPostCommentReport.user.id.eq(userId))
.fetch();

List<MissionPostCommentVo> comments = queryFactory
.select(new QMissionPostCommentVo(missionPostComment, user, Expressions.constant(userId)))
.from(missionPostComment)
.join(missionPostComment.missionPost, missionPost)
.where(missionPost.id.eq(missionPostId))
.where(missionPost.id.eq(missionPostId).and(missionPostComment.id.notIn(reportCommentIds)))
.fetch();

Boolean isMyPost = queryFactory
Expand All @@ -62,6 +70,12 @@ public GetMissionPostCommentResponseDto getMissionPostComment(Long missionPostId
@Override
public List<MissionPostVo> getMissionPostList(Long userId, Long farmClubId) {

List<Long> reportMissionPostIds = queryFactory
.select(missionPostReport.missionPost.id)
.from(missionPostReport)
.where(missionPostReport.user.id.eq(userId))
.fetch();

return queryFactory
.select(new QMissionPostVo(
missionPost,
Expand All @@ -82,7 +96,7 @@ public List<MissionPostVo> getMissionPostList(Long userId, Long farmClubId) {
.join(missionPost.userFarmClub, userFarmClub)
.join(userFarmClub.myVeggie, myVeggie)
.join(myVeggie.user, user)
.where(farmClub.id.eq(farmClubId))
.where(farmClub.id.eq(farmClubId).and(missionPost.id.notIn(reportMissionPostIds)))
.orderBy(missionPost.createdDate.desc())
.fetch();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import com.modernfarmer.farmusspring.domain.farmclub.helper.MissionPostHelper;
import com.modernfarmer.farmusspring.domain.farmclub.helper.UserFarmClubHelper;
import com.modernfarmer.farmusspring.domain.farmclub.repository.MissionPostRepository;
import com.modernfarmer.farmusspring.domain.farmclub.vo.MissionPostCommentVo;
import com.modernfarmer.farmusspring.domain.farmclub.vo.MissionPostVo;
import com.modernfarmer.farmusspring.domain.user.entity.User;
import com.modernfarmer.farmusspring.domain.user.helper.UserHelper;
Expand Down Expand Up @@ -74,7 +73,33 @@ public GetMissionPostListResponseDto getMissionPostList(Long userId, Long farmCl
}

public GetMissionPostCommentResponseDto getMissionPostComment(Long missionPostId, Long userId) {
return missionPostHelper.getMissionPostComment(missionPostId, userId);
return missionPostHelper.getMissionPostComments(missionPostId, userId);
}

@Transactional
public void reportMissionPost(Long userId, Long missionPostId) {
MissionPost missionPost = missionPostHelper.getMissionPost(missionPostId);
MissionPostReport.createMissionPostReport(missionPost, userHelper.getUserEntity(userId));
int userCount = missionPost.getUserFarmClub().getFarmClub().getUserFarmClubs().size();
int reportCount = missionPost.getMissionPostReports().size();
if (userCount < 4 && reportCount >= 2) {
missionPostHelper.deleteMissionPost(missionPost);
} else if (reportCount >= 3) {
missionPostHelper.deleteMissionPost(missionPost);
}
}

@Transactional
public void reportMissionPostComment(Long userId, Long missionPostCommentId) {
MissionPostComment missionPostComment = missionPostHelper.getMissionPostComment(missionPostCommentId);
MissionPostCommentReport.createMissionPostCommentReport(missionPostComment, userHelper.getUserEntity(userId));
int userCount = missionPostComment.getMissionPost().getUserFarmClub().getFarmClub().getUserFarmClubs().size();
int reportCount = missionPostComment.getMissionPostCommentReports().size();
if (userCount < 4 && reportCount >= 2) {
missionPostHelper.deleteMissionPostComment(missionPostComment);
} else if (reportCount >= 3) {
missionPostHelper.deleteMissionPostComment(missionPostComment);
}
}

private MissionPost saveMissionPost(MissionPost missionPost) {
Expand Down

0 comments on commit b0e3b0a

Please sign in to comment.