Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] 특정 청첩장에 참석의사 등록 API 구현 #40

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class BankAccount extends BaseTimeEntity {
@Column(nullable = false)
private String accountHolder;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "invitation_id", nullable = false)
private Invitation invitation;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,14 @@
import org.springframework.data.jpa.repository.JpaRepository;
import com.wedit.weditapp.domain.bankAccounts.domain.BankAccount;
import com.wedit.weditapp.domain.invitation.domain.Invitation;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface BankAccountRepository extends JpaRepository<BankAccount, Long> {
List<BankAccount> findByInvitation(Invitation invitation);

@Modifying
@Query("DELETE FROM BankAccount b WHERE b.invitation.id = :invitationId")
void deleteAllByInvitationId(@Param("invitationId") Long invitationId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class Comment extends BaseTimeEntity {
@Column(nullable = false)
private String content;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "invitation_id", nullable = false)
private Invitation invitation;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,15 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;


public interface CommentRepository extends JpaRepository<Comment, Long> {
Page<Comment> findByInvitationId(Long invitationId, Pageable pageable);

@Modifying
@Query("DELETE FROM Comment c WHERE c.invitation.id = :invitationId")
void deleteAllByInvitationId(@Param("invitationId") Long invitationId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class Decision extends BaseTimeEntity {
@Column(name = "side", nullable = false)
private DecisionSide side;

@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "invitation_id", nullable = false)
private Invitation invitation;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.wedit.weditapp.domain.decision.domain.Decision;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

Expand All @@ -18,4 +19,8 @@ public interface DecisionRepository extends JpaRepository<Decision, Long> {
@Query("SELECT count(d) FROM Decision d WHERE d.invitation.id = :invitationId AND d.side = 'BRIDE'")
Integer getBrideDecisionCount(@Param("invitationId") Long invitationId);

@Modifying
@Query("DELETE FROM Decision d WHERE d.invitation.id = :invitationId")
void deleteAllByInvitationId(@Param("invitationId") Long invitationId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class DecisionService {
public CountResponseDto getDecisionCounts(Long invitationId){
// invitationId 유효성 검사
if (invitationId == null || invitationId <= 0){
throw new CommonException(ErrorCode.INVALID_INPUT_VALUE);
throw new CommonException(ErrorCode.INVALID_INVITATION_ID);
}

Integer totalCount = decisionRepository.getTotalDecisionCount(invitationId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,15 @@

import com.wedit.weditapp.domain.image.domain.Image;
import com.wedit.weditapp.domain.invitation.domain.Invitation;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface ImageRepository extends JpaRepository<Image, Long> {
// 특정 Invitation의 모든 이미지를 location 순서대로 조회
List<Image> findByInvitation(Invitation invitation);

@Modifying
@Query("DELETE FROM Image i WHERE i.invitation.id = :invitationId")
void deleteAllByInvitationId(@Param("invitationId") Long invitationId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

import java.util.List;

import com.wedit.weditapp.domain.bankAccounts.domain.repository.BankAccountRepository;
import com.wedit.weditapp.domain.comment.domain.repository.CommentRepository;
import com.wedit.weditapp.domain.decision.domain.repository.DecisionRepository;
import com.wedit.weditapp.domain.image.domain.repository.ImageRepository;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

Expand Down Expand Up @@ -29,6 +33,10 @@ public class InvitationService {
private final ImageService imageService;
private final MemberRepository memberRepository;
private final BankAccountService bankAccountService;
private final CommentRepository commentRepository;
private final DecisionRepository decisionRepository;
private final ImageRepository imageRepository;
private final BankAccountRepository bankAccountRepository;

public Void createInvitation(Long memberId, InvitationCreateRequestDto invitationRequest, List<MultipartFile> images) {
Member member = getMember(memberId);
Expand Down Expand Up @@ -81,4 +89,18 @@ private Member getMember(Long memberId) {
return memberRepository.findById(memberId)
.orElseThrow(() -> new CommonException(ErrorCode.USER_NOT_FOUND));
}

// Invitation 삭제시 연관된 Comment, Decision, Image, BankAccount 삭제
private void deleteInvitation(Long invitationId){
// Invitation 유효성 검사
Invitation invitation = invitationRepository.findById(invitationId)
.orElseThrow(() -> new CommonException(ErrorCode.INVITATION_NOT_FOUND));

commentRepository.deleteAllByInvitationId(invitationId);
decisionRepository.deleteAllByInvitationId(invitationId);
imageRepository.deleteAllByInvitationId(invitationId);
bankAccountRepository.deleteAllByInvitationId(invitationId);

invitationRepository.delete(invitation);
}
}
3 changes: 2 additions & 1 deletion src/main/java/com/wedit/weditapp/global/error/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public enum ErrorCode {
INVITATION_NOT_FOUND(404, "INVITATION_NOT_FOUND", "청첩장을 찾을 수 없습니다."),
INVALID_INVITATION_DATE(400, "INVALID_INVITATION_DATE", "유효하지 않은 날짜입니다."),
ACCOUNT_OPTION_REQUIRED(400, "ACCOUNT_OPTION_REQUIRED", "계좌 옵션이 활성화되어야 합니다."),
IMAGE_UPLOAD_FAILED(500, "IMAGE_UPLOAD_FAILED", "이미지 업로드에 실패하였습니다.");
IMAGE_UPLOAD_FAILED(500, "IMAGE_UPLOAD_FAILED", "이미지 업로드에 실패하였습니다."),
INVALID_INVITATION_ID(400, "INVALID_INVITATION_ID", "잘못된 청첩장 id 입니다.");

private final int status;
private final String code;
Expand Down