Sparta 내일배움캠프 Java 5기/[13주차] Spring 심화 Team Project ✓
(24.07.12) 칸반보드의 Column 관리 기능 Refactor 및 수정, Comment 기능 개발
Column Refactor 및 수정
Column 삭제 -> Column 상태를 DELETED 상태로 변경 으로 수정
// 컬럼 엔터티
public class ColumnInfo extends Timestamped {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String statusName;
...
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private Status status;
...
public enum Status {
ACTIVE,
DELETED;
}
...
public void delete() {
this.status = Status.DELETED;
}
...
- 실제로 필드에서 삭제를 요청해도 DB에서 데이터를 delete 를 바로 시키는 것이 아니라 상태를 DELETED 로 바꾸는 등으로 일정기간 DB에 저장하여 보관하기 때문에, 이번 프로젝트에서도 상태를 변경하는 방법으로 삭제를 할 수 있도록 기능을 Refactor
- 기존의 Status 상태이름 = 컬럼 이름을 명확하게 statusName으로 수정하고, status 는 status ENUM으로 설정하여, DELETE 요청시 Status를 ACTIVE에서 DELETED로 변경하는 방법으로 변경
// Service
@Transactional
public void deleteColumn(Long boardId, Long columnInfoId, User user) {
...
foundColumn.delete();
columnsRepository.save(foundColumn);
}
- 상태를 DELETED로 변경한 뒤 저장하도록 함
Comment 생성, 조회 기능
Service
public CommentResponseDto createCommnet(Long cardId, CommentRequestDto commentRequestDto, User user) {
User foundUser = userRepository.findByUsername(user.getUsername()).orElseThrow(
() -> new BadRequestException("해당 사용자는 존재하지 않습니다.")
);
Card foundCard = validateCard(cardId);
validateBoardOwnership(foundCard, foundUser);
...
}
public List<CommentResponseDto> getComments(Long cardId, User user) {
User foundUser = userRepository.findByUsername(user.getUsername()).orElseThrow(
() -> new BadRequestException("해당 사용자는 존재하지 않습니다.")
);
Card foundCard = validateCard(cardId);
validateBoardOwnership(foundCard, foundUser);
...
}
public Card validateCard(Long cardId) {
Card foundCard = cardRepository.findById(cardId).orElseThrow(
() -> new BadRequestException("해당 카드는 존재하지 않습니다.")
);
if (foundCard.getStatus() == Card.Status.DELETED) {
throw new BadRequestException("이미 삭제된 카드입니다.");
}
return foundCard;
}
public void validateBoardOwnership(Card card, User user) {
if (!card.getColumnInfo().getBoard().getUser().getId().equals(user.getId())) {
List<Long> userIdList = card.getColumnInfo().getBoard().getInvites().stream()
.map(Invite -> Invite.getInvitedUser().getId())
.toList();
if (!userIdList.contains(user.getId())) {
throw new BadRequestException("보드에 권한이 없습니다.");
}
}
}
- 반복되는 보드의 권한을 검증하는 메서드와 카드에 대한 검증 메서드를 따로 분리하여 공통 메서드를 생성
'Sparta 내일배움캠프 Java 5기 > [13주차] Spring 심화 Team Project ✓' 카테고리의 다른 글
(24.07.16) A08조 "Palette" Project - KPT 회고 (0) | 2024.07.16 |
---|---|
(24.07.15) Card 생성의 동시성 제어 (0) | 2024.07.15 |
(24.07.11) 칸반보드의 Column 관리 기능 개발 (0) | 2024.07.11 |
(24.07.10) Project S.A. 작성 (0) | 2024.07.10 |