본문 바로가기
Sparta 내일배움캠프 Java 5기/[13주차] Spring 심화 Team Project ✓ 2024. 7. 12.

(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("보드에 권한이 없습니다.");
            }

        }

    }
  •  반복되는 보드의 권한을 검증하는 메서드와 카드에 대한 검증 메서드를 따로 분리하여 공통 메서드를 생성