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#32] 안건 삭제 개발 #33

Merged
merged 2 commits into from
Feb 15, 2024
Merged

[Feat#32] 안건 삭제 개발 #33

merged 2 commits into from
Feb 15, 2024

Conversation

FacerAin
Copy link
Collaborator

🔗 Linked Issue

resolved: #32

🛠 개발 기능

  • 안건 삭제 기능을 개발하였습니다.

🧩 해결 방법

  • Agenda Status에 CANCELED를 추가하였습니다.
  • soft delete를 사용하였습니다.

🔍 리뷰 포인트

  • 안건 domain의 삭제 로직에 빠진 부분이 없을지 확인부탁드려요 ☺️


📋 Code Review Priority Guideline

  • 🚨 P1: Request Change
    • 필수 반영: 꼭 반영해주시고, 적극적으로 고려해주세요 (수용 혹은 토론).
  • 💬 P2: Comment
    • 권장 반영: 웬만하면 반영해주세요.
  • 👍 P3: Approve
    • 선택 반영: 반영해도 좋고 넘어가도 좋습니다. 그냥 사소한 의견입니다.

public void cancelAgenda(Long meetingId, Long agendaId) {
Agenda agenda = agendaRepository.findByIdAndMeetingId(agendaId, meetingId)
.orElseThrow(() -> new NotFoundError(ErrorCode.RESOURCE_NOT_FOUND,
Collections.singletonMap("AgendaId", "Agenda not found")));
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Starlight258
다음과 같은 경우에 meetingId 값을 찾지 못하여도, Agenda not found가 출력 되게 됩니다.

해당 경우에 findByIdAndMeetingId 메서드를 활용하면서 에러 메시지를 좀 더 의미 있게 어떻게 출력할 수 있을지 궁금합니다 ☺️

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

findByIdAndMeetingId 메서드를 사용한다면 에러 메세지로는 Meeting or Agenda not found 가 더 명확할 것 같습니다!
그런데 그렇게 메세지를 전달하면 Meeting이 존재하지 않은건지 Agenda가 존재하지 않은 건지 응답자 입장에서 모호할 것 같아요! 🧐

코드가 좀 길더라도 각각을 repository에서 조회하고 각 경우에 대해 에러 메세지를 출력하는 코드는 어떻게 생각하세요?
이렇게 작성하면 덜 모호할 것 같아요!

public void cancelAgenda(Long meetingId, Long agendaId) {
    Meeting meeting = meetingRepository.findById(meetingId)
        .orElseThrow(() -> new NotFoundError(ErrorCode.RESOURCE_NOT_FOUND,
            Collections.singletonMap("MeetingId", "Meeting not found")));

    Agenda agenda = agendaRepository.findByIdAndMeetingId(agendaId, meetingId)
        .orElseThrow(() -> new NotFoundError(ErrorCode.RESOURCE_NOT_FOUND,
            Collections.singletonMap("AgendaId", "Agenda not found")));
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Starlight258
좋은 의견 감사합니다 👍
말씀해주신 방법대로 하면 MeetingId와 AgendaId 중에 어디서 에러가 발생했는지 사용자 입장에서 더욱 명확할 것 같습니다.
다만 걱정되는 점은, repository를 중복으로 두 번 조회함으로써 불필요한 리소스 사용이 없을지 궁금해요!

Copy link
Collaborator

@Starlight258 Starlight258 Feb 15, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생각해볼 좋은 질문인것 같아요! 아무래도 단일 조회 메서드는 JPA가 내부적으로 하나의 쿼리를 생성하는데 비해
제안한 코드는 2개의 쿼리를 각각 날리니까요!
메세지를 명확하게 제공하고 싶다면 두번 조회를, 성능을 중요하게 생각한다면 단일 조회 메서드를 선택하는게 좋아보여요!

개인적으로, 두번 조회단일 조회가 성능적으로 아주 큰 차이는 없을 것 같아서 전자가 좋을 것 같은데, 어떻게 생각하시나요?

public void cancelAgenda(Long meetingId, Long agendaId) {
Agenda agenda = agendaRepository.findByIdAndMeetingId(agendaId, meetingId)
.orElseThrow(() -> new NotFoundError(ErrorCode.RESOURCE_NOT_FOUND,
Collections.singletonMap("AgendaId", "Agenda not found")));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

findByIdAndMeetingId 메서드를 사용한다면 에러 메세지로는 Meeting or Agenda not found 가 더 명확할 것 같습니다!
그런데 그렇게 메세지를 전달하면 Meeting이 존재하지 않은건지 Agenda가 존재하지 않은 건지 응답자 입장에서 모호할 것 같아요! 🧐

코드가 좀 길더라도 각각을 repository에서 조회하고 각 경우에 대해 에러 메세지를 출력하는 코드는 어떻게 생각하세요?
이렇게 작성하면 덜 모호할 것 같아요!

public void cancelAgenda(Long meetingId, Long agendaId) {
    Meeting meeting = meetingRepository.findById(meetingId)
        .orElseThrow(() -> new NotFoundError(ErrorCode.RESOURCE_NOT_FOUND,
            Collections.singletonMap("MeetingId", "Meeting not found")));

    Agenda agenda = agendaRepository.findByIdAndMeetingId(agendaId, meetingId)
        .orElseThrow(() -> new NotFoundError(ErrorCode.RESOURCE_NOT_FOUND,
            Collections.singletonMap("AgendaId", "Agenda not found")));
}

@Starlight258
Copy link
Collaborator

Starlight258 commented Feb 14, 2024

고생많으셨습니다~!! 😄

한가지 제안드릴게 있는데요!
안건 삭제 API안건 제어 및 갱신 API와 연관된 것 같아서, 따로 API를 새로 만들지 않고 하나로 합치는 방안에 대해서 어떻게 생각하시나요?
그렇게 하면 요청하는 쪽에서 더 편할 것 같아요 !

안건 제어 및 갱신 API

RequestBody

{
  "action": "modify",
  "modifiedDuration": "HH:MM (optional)"
}

action : start | pause | resume | modify | end
=> cancel 추가 ?

modifiedDuration: 수정할 시간 (HH:MM 형식, modify 액션일 경우에만 필요)

@Starlight258 Starlight258 modified the milestones: Sprint 2, Sprint 3 Feb 14, 2024
@FacerAin
Copy link
Collaborator Author

고생많으셨습니다~!! 😄

한가지 제안드릴게 있는데요! 안건 삭제 API안건 제어 및 갱신 API와 연관된 것 같아서, 따로 API를 새로 만들지 않고 하나로 합치는 방안에 대해서 어떻게 생각하시나요? 그렇게 하면 요청하는 쪽에서 더 편할 것 같아요 !

안건 제어 및 갱신 API

RequestBody

{
  "action": "modify",
  "modifiedDuration": "HH:MM (optional)"
}

action : start | pause | resume | modify | end
=> cancel 추가 ?

modifiedDuration: 수정할 시간 (HH:MM 형식, modify 액션일 경우에만 필요)

@Starlight258
꼼꼼한 리뷰 감사합니다 ☺️
제어 및 갱신 API와도 합치는 것 좋은 아이디어에요!
이 부분은 미팅에서 조금 더 의논해보아도 좋을 것 같아요 ☺️

@FacerAin FacerAin merged commit c5bbfea into dev Feb 15, 2024
1 check passed
@FacerAin FacerAin deleted the feat/cancel-agenda branch February 15, 2024 05:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants