Skip to content

Commit

Permalink
feat: 행사의 전체 참여자 중 특정 참여자의 멤버 액션을 모두 삭제하는 기능 구현 (#185)
Browse files Browse the repository at this point in the history
* feat: 행사의 전체 참여자 중 특정 참여자의 멤버 액션을 모두 삭제하는 기능 구현

* test: eventId String으로 변경

* fix: 다른 행사에 있는 멤버 액션도 지워지는 버그 수정

* refactor: 전체 참여자 중에서 특정 참여자를 전부 삭제하는 메서드명 변경

* refactor: 전체 참여자 중에서 특정 참여자를 전부 삭제하는 메서드명 변경

* refactor: MemberActionController 메서드 파라미터 컨벤션 반영

* refactor: conflict resolve

* refactor: conflict resolve
  • Loading branch information
kunsanglee authored Aug 4, 2024
1 parent 24078cc commit b76cf53
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ private Event findEvent(String token) {
.orElseThrow(() -> new HaengdongException(HaengdongErrorCode.NOT_FOUND_EVENT));
}

public void deleteMember(String token, String memberName) {
Event event = eventRepository.findByToken(token)
.orElseThrow(() -> new HaengdongException(HaengdongErrorCode.NOT_FOUND_EVENT));

memberActionRepository.deleteAllByEventAndMemberName(event, memberName);
}

@Transactional
public void deleteMemberAction(String token, Long actionId) {
Event event = eventRepository.findByToken(token)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ public interface MemberActionRepository extends JpaRepository<MemberAction, Long
@Query("select m from MemberAction m join fetch m.action where m.action.event = :event")
List<MemberAction> findAllByEvent(@Param("event") Event event);

@Modifying
@Query("""
delete
from MemberAction m
where m.memberName = :memberName and m.action.event = :event
""")
void deleteAllByEventAndMemberName(Event event, String memberName);

Optional<MemberAction> findByAction(Action action);

@Modifying
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ public ResponseEntity<CurrentMembersResponse> getCurrentMembers(@PathVariable("e
.body(CurrentMembersResponse.of(currentMembers));
}

@DeleteMapping("/api/events/{eventId}/members/{memberName}")
public ResponseEntity<Void> deleteMember(
@PathVariable("eventId") String token,
@PathVariable("memberName") String memberName
) {
memberActionService.deleteMember(token, memberName);

return ResponseEntity.ok().build();
}

@DeleteMapping("/api/events/{eventId}/actions/{actionId}/members")
public ResponseEntity<Void> deleteMemberAction(
@PathVariable("eventId") String token,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.tuple;
import static org.assertj.core.groups.Tuple.tuple;
import static server.haengdong.domain.action.MemberActionStatus.IN;
import static server.haengdong.domain.action.MemberActionStatus.OUT;

Expand Down Expand Up @@ -51,7 +51,7 @@ void tearDown() {
void saveMemberActionTest() {
Event event = eventRepository.save(new Event("test", "TOKEN"));
Action action = new Action(event, 1L);
MemberAction memberAction = createMemberAction(action, "망쵸", IN, 1L);
MemberAction memberAction = new MemberAction(action, "망쵸", IN, 1L);
memberActionRepository.save(memberAction);

assertThatCode(() -> memberActionService.saveMemberAction("TOKEN", new MemberActionsSaveAppRequest(
Expand All @@ -64,11 +64,11 @@ void saveMemberActionTest() {
void saveMemberActionTest1() {
Event event = eventRepository.save(new Event("test", "TOKEN"));
Action actionOne = new Action(event, 1L);
MemberAction memberActionOne = createMemberAction(actionOne, "망쵸", IN, 1L);
MemberAction memberActionOne = new MemberAction(actionOne, "망쵸", IN, 1L);
memberActionRepository.save(memberActionOne);

Action actionTwo = new Action(event, 2L);
MemberAction memberActionTwo = createMemberAction(actionTwo, "망쵸", OUT, 1L);
MemberAction memberActionTwo = new MemberAction(actionTwo, "망쵸", OUT, 1L);
memberActionRepository.save(memberActionTwo);

assertThatCode(() -> memberActionService.saveMemberAction("TOKEN", new MemberActionsSaveAppRequest(
Expand All @@ -93,6 +93,43 @@ void getCurrentMembers() {
.isInstanceOf(HaengdongException.class);
}

@DisplayName("행사의 전체 참여자 중에서 특정 참여자의 맴버 액션을 전부 삭제한다.")
@Test
void deleteMember() {
String token = "TOKEN";
Event event = new Event("행동대장 회식", token);
eventRepository.save(event);
MemberAction memberAction1 = new MemberAction(new Action(event, 1L), "참여자", IN, 1L);
MemberAction memberAction2 = new MemberAction(new Action(event, 2L), "토다리", IN, 1L);
MemberAction memberAction3 = new MemberAction(new Action(event, 3L), "쿠키", IN, 1L);
MemberAction memberAction4 = new MemberAction(new Action(event, 4L), "소하", IN, 1L);
MemberAction memberAction5 = new MemberAction(new Action(event, 5L), "웨디", IN, 1L);
MemberAction memberAction6 = new MemberAction(new Action(event, 6L), "참여자", OUT, 1L);
memberActionRepository.saveAll(
List.of(memberAction1, memberAction2, memberAction3, memberAction4, memberAction5, memberAction6));

String token2 = "TOKEN2";
Event event2 = new Event("옆동네 회식", token2);
eventRepository.save(event2);
Action action2 = Action.createFirst(event2);
MemberAction anotherMemberAction = new MemberAction(action2, "참여자", IN, 1L);
memberActionRepository.save(anotherMemberAction);

memberActionService.deleteMember(token, "참여자");

List<MemberAction> memberActions = memberActionRepository.findAll();

assertThat(memberActions).hasSize(5)
.extracting("memberName", "status")
.containsExactly(
tuple("토다리", IN),
tuple("쿠키", IN),
tuple("소하", IN),
tuple("웨디", IN),
tuple("참여자", IN)
);
}

@DisplayName("이벤트에 속한 멤버 액션을 삭제하면 이후에 기록된 해당 참여자의 모든 멤버 액션을 삭제한다.")
@Test
void deleteMemberAction() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,15 @@ void deleteMemberAction() throws Exception {
.andDo(print())
.andExpect(status().isOk());
}

@DisplayName("행사의 전체 참여자 중에서 특정 참여자의 맴버 액션을 전부 삭제한다.")
@Test
void deleteMember() throws Exception {
String eventId = "TOKEN";
String memberName = "행동대장";

mockMvc.perform(delete("/api/events/{eventId}/members/{memberName}", eventId, memberName))
.andDo(print())
.andExpect(status().isOk());
}
}

0 comments on commit b76cf53

Please sign in to comment.