Skip to content

Commit

Permalink
feat: add addGroupMember, leaveGroup
Browse files Browse the repository at this point in the history
  • Loading branch information
Sion99 committed Nov 17, 2023
1 parent 42079d3 commit e0650ac
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 28 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class GroupKickRequestDto {
public class GroupMemberRequestDto {

@NotNull
private String username;
Expand Down
29 changes: 24 additions & 5 deletions src/main/java/com/uspray/uspray/controller/GroupController.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.uspray.uspray.controller;

import com.uspray.uspray.DTO.ApiResponseDto;
import com.uspray.uspray.DTO.group.request.GroupKickRequestDto;
import com.uspray.uspray.DTO.group.request.GroupLeaderRequestDto;
import com.uspray.uspray.DTO.group.request.GroupMemberRequestDto;
import com.uspray.uspray.DTO.group.request.GroupRequestDto;
import com.uspray.uspray.DTO.group.response.GroupListResponseDto;
import com.uspray.uspray.exception.SuccessStatus;
Expand All @@ -11,6 +10,7 @@
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.data.repository.query.Param;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -56,7 +56,7 @@ public ApiResponseDto<?> changeGroupName(
public ApiResponseDto<?> changeGroupLeader(
@Parameter(hidden = true) @AuthenticationPrincipal User user,
@PathVariable Long groupId,
@Valid @RequestBody GroupLeaderRequestDto groupLeaderRequestDto) {
@Valid @RequestBody GroupMemberRequestDto groupLeaderRequestDto) {
groupService.changeGroupLeader(user.getUsername(), groupId, groupLeaderRequestDto);
return ApiResponseDto.success(SuccessStatus.CHANGE_GROUP_LEADER_SUCCESS,
SuccessStatus.CHANGE_GROUP_LEADER_SUCCESS.getMessage());
Expand All @@ -66,12 +66,31 @@ public ApiResponseDto<?> changeGroupLeader(
public ApiResponseDto<?> kickGroupMember(
@Parameter(hidden = true) @AuthenticationPrincipal User user,
@PathVariable Long groupId,
@Valid @RequestBody GroupKickRequestDto groupKickRequestDto) {
groupService.kickGroupMember(user.getUsername(), groupId, groupKickRequestDto);
@Valid @RequestBody GroupMemberRequestDto groupMemberRequestDto) {
groupService.kickGroupMember(user.getUsername(), groupId, groupMemberRequestDto);
return ApiResponseDto.success(SuccessStatus.KICK_GROUP_MEMBER_SUCCESS,
SuccessStatus.KICK_GROUP_MEMBER_SUCCESS.getMessage());
}

@PostMapping("/{groupId}/member")
public ApiResponseDto<?> addGroupMember(
@Parameter(hidden = true) @AuthenticationPrincipal User user,
@PathVariable Long groupId,
@Valid @RequestBody GroupMemberRequestDto groupMemberRequestDto) {
groupService.addGroupMember(user.getUsername(), groupId, groupMemberRequestDto);
return ApiResponseDto.success(SuccessStatus.ADD_GROUP_MEMBER_SUCCESS,
SuccessStatus.ADD_GROUP_MEMBER_SUCCESS.getMessage());
}

@DeleteMapping("/{groupId}/leave")
public ApiResponseDto<?> leaveGroup(
@Parameter(hidden = true) @AuthenticationPrincipal User user,
@PathVariable Long groupId) {
groupService.leaveGroup(user.getUsername(), groupId);
return ApiResponseDto.success(SuccessStatus.LEAVE_GROUP_SUCCESS,
SuccessStatus.LEAVE_GROUP_SUCCESS.getMessage());
}

@DeleteMapping("/{groupId}")
public ApiResponseDto<?> deleteGroup(
@Parameter(hidden = true) @AuthenticationPrincipal User user,
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/uspray/uspray/domain/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ public void changeLeader(Member leader) {
this.leader = leader;
}

public void addMember(Member member) {
this.members.add(member);
}

public void kickMember(Member member) {
this.members.remove(member);
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/uspray/uspray/domain/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ public void changePw(String pw) {
this.password = pw;
}

public void joinGroup(Group group) {
this.groups.add(group);
}

public void leaveGroup(Group group) {
this.groups.remove(group);
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/uspray/uspray/exception/ErrorStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ public enum ErrorStatus {
ALREADY_PRAYED_TODAY(HttpStatus.BAD_REQUEST, "오늘 이미 기도한 기도제목입니다."),
CATEGORY_DUPLICATE_EXCEPTION(HttpStatus.BAD_REQUEST, "이미 존재하는 카테고리입니다."),
ALREADY_EXIST_GROUP_NAME_EXCEPTION(HttpStatus.BAD_REQUEST, "이미 존재하는 모임 이름입니다."),
ALREADY_EXIST_GROUP_MEMBER_EXCEPTION(HttpStatus.BAD_REQUEST, "이미 존재하는 모임 회원입니다."),
LEADER_CANNOT_LEAVE_GROUP_EXCEPTION(HttpStatus.BAD_REQUEST, "모임장은 모임을 떠날 수 없습니다."),

/*
* 401 UNAUTHORIZED
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/com/uspray/uspray/exception/SuccessStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public enum SuccessStatus {
CHANGE_GROUP_NAME_SUCCESS(HttpStatus.OK, "모임 이름 변경에 성공했습니다."),
CHANGE_GROUP_LEADER_SUCCESS(HttpStatus.OK, "모임 리더 위임에 성공했습니다."),
KICK_GROUP_MEMBER_SUCCESS(HttpStatus.OK, "모임 멤버 내보내기에 성공했습니다."),
ADD_GROUP_MEMBER_SUCCESS(HttpStatus.OK, "모임 멤버 추가하기에 성공했습니다."),

/*
* 201 created
Expand All @@ -57,7 +58,8 @@ public enum SuccessStatus {
DELETE_GROUP_PRAY_SUCCESS(HttpStatus.NO_CONTENT, "모임 기도제목 삭제에 성공했습니다."),
WITHDRAWAL_SUCCESS(HttpStatus.NO_CONTENT, "회원 탈퇴에 성공했습니다."),
DELETE_CATEGORY_SUCCESS(HttpStatus.NO_CONTENT, "카테고리 삭제에 성공했습니다."),
DELETE_GROUP_SUCCESS(HttpStatus.NO_CONTENT, "모임 삭제에 성공했습니다.");
DELETE_GROUP_SUCCESS(HttpStatus.NO_CONTENT, "모임 삭제에 성공했습니다."),
LEAVE_GROUP_SUCCESS(HttpStatus.NO_CONTENT, "모임 탈퇴에 성공했습니다.");


private final HttpStatus httpStatus;
Expand Down
39 changes: 34 additions & 5 deletions src/main/java/com/uspray/uspray/service/GroupService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.uspray.uspray.service;

import com.uspray.uspray.DTO.group.request.GroupKickRequestDto;
import com.uspray.uspray.DTO.group.request.GroupLeaderRequestDto;
import com.uspray.uspray.DTO.group.request.GroupMemberRequestDto;
import com.uspray.uspray.DTO.group.request.GroupRequestDto;
import com.uspray.uspray.DTO.group.response.GroupListResponseDto;
import com.uspray.uspray.DTO.group.response.GroupResponseDto;
Expand Down Expand Up @@ -61,7 +60,7 @@ public void changeGroupName(String username, Long groupId, GroupRequestDto group
}

@Transactional
public void changeGroupLeader(String username, Long groupId, GroupLeaderRequestDto groupLeaderRequestDto) {
public void changeGroupLeader(String username, Long groupId, GroupMemberRequestDto groupLeaderRequestDto) {
Member member = memberRepository.getMemberByUserId(username);
Group group = groupRepository.getGroupById(groupId);

Expand All @@ -75,7 +74,7 @@ public void changeGroupLeader(String username, Long groupId, GroupLeaderRequestD
}

@Transactional
public void kickGroupMember(String username, Long groupId, GroupKickRequestDto groupKickRequestDto) {
public void kickGroupMember(String username, Long groupId, GroupMemberRequestDto groupKickRequestDto) {
Member leader = memberRepository.getMemberByUserId(username);
Group group = groupRepository.getGroupById(groupId);
Member kickedMember = memberRepository.getMemberByUserId(groupKickRequestDto.getUsername());
Expand All @@ -86,8 +85,38 @@ public void kickGroupMember(String username, Long groupId, GroupKickRequestDto g
if (!group.getMembers().contains(kickedMember)) {
throw new NotFoundException(ErrorStatus.GROUP_MEMBER_NOT_FOUND_EXCEPTION, ErrorStatus.GROUP_MEMBER_NOT_FOUND_EXCEPTION.getMessage());
}
group.kickMember(memberRepository.getMemberByUserId(groupKickRequestDto.getUsername()));
kickedMember.leaveGroup(group);
group.kickMember(kickedMember);
}

// 일단은 관리자만 회원을 추가할 수 있게끔 설정해두었습니다
// 추후 수정될 수 있음 -> 초대 링크 생성하고 링크 방문시 수락으로 변경 예정
@Transactional
public void addGroupMember(String username, Long groupId, GroupMemberRequestDto groupAddRequestDto) {
Member member = memberRepository.getMemberByUserId(username);
Group group = groupRepository.getGroupById(groupId);
Member addedMember = memberRepository.getMemberByUserId(groupAddRequestDto.getUsername());

if (!group.getMembers().contains(member)) {
throw new CustomException(ErrorStatus.GROUP_MEMBER_NOT_FOUND_EXCEPTION, ErrorStatus.GROUP_MEMBER_NOT_FOUND_EXCEPTION.getMessage());
}
if (group.getMembers().contains(addedMember)) {
throw new CustomException(ErrorStatus.ALREADY_EXIST_GROUP_MEMBER_EXCEPTION, ErrorStatus.ALREADY_EXIST_GROUP_MEMBER_EXCEPTION.getMessage());
}
addedMember.joinGroup(group);
group.addMember(addedMember);
}

@Transactional
public void leaveGroup(String username, Long groupId) {
Member member = memberRepository.getMemberByUserId(username);
Group group = groupRepository.getGroupById(groupId);

if (group.getLeader().equals(member)) {
throw new CustomException(ErrorStatus.LEADER_CANNOT_LEAVE_GROUP_EXCEPTION, ErrorStatus.LEADER_CANNOT_LEAVE_GROUP_EXCEPTION.getMessage());
}
member.leaveGroup(group);
group.kickMember(member);
}

@Transactional
Expand Down

0 comments on commit e0650ac

Please sign in to comment.