Skip to content

Commit

Permalink
Merge pull request #102 from Codiary-UMC-6th/feature/#91-teammember-a…
Browse files Browse the repository at this point in the history
…dd-delete

Feature/#91 teammember add delete
  • Loading branch information
insa658723 authored Aug 7, 2024
2 parents 9d2ea06 + 68aad97 commit 6461bfd
Show file tree
Hide file tree
Showing 13 changed files with 192 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

import com.codiary.backend.global.domain.entity.Team;
import com.codiary.backend.global.web.dto.Team.TeamResponseDTO;
import com.codiary.backend.global.web.dto.TeamMember.TeamMemberResponseDTO;

import java.util.List;
import java.util.stream.Collectors;

public class TeamConverter {
//팀생성
Expand All @@ -15,14 +19,20 @@ public static TeamResponseDTO.CreateTeamResponseDTO toCreateMemberDTO(Team team)
}

//팀 조회
public static TeamResponseDTO.TeamCheckResponseDTO toTeamCheckDTO(Team team) {
public static TeamResponseDTO.TeamCheckResponseDTO toTeamCheckResponseDTO(Team team) {
List<TeamMemberResponseDTO.TeamMemberDTO> members = team.getTeamMemberList().stream()
.map(TeamMemberConverter::toTeamMemberDTO)
.collect(Collectors.toList());

return TeamResponseDTO.TeamCheckResponseDTO.builder()
.teamId(team.getTeamId())
.name(team.getName())
.intro(team.getIntro())
.profilePhoto(team.getProfilePhoto())
.github(team.getGithub())
.email(team.getEmail())
.linkedIn(team.getLinkedin())
.members(members)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
package com.codiary.backend.global.converter;

import com.codiary.backend.global.domain.entity.mapping.TeamMember;
import com.codiary.backend.global.web.dto.TeamMember.TeamMemberResponseDTO;

public class TeamMemberConverter {
}

public static TeamMemberResponseDTO.TeamMemberDTO toTeamMemberDTO(TeamMember teamMember) {
return TeamMemberResponseDTO.TeamMemberDTO.builder()
.teamMemberId(teamMember.getTeamMemberId())
.teamId(teamMember.getTeam().getTeamId())
.memberId(teamMember.getMember().getMemberId())
.memberRole(teamMember.getTeamMemberRole())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class TeamMember {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
package com.codiary.backend.global.repository;

public interface TeamMemberRepository {
}
import com.codiary.backend.global.domain.entity.Team;
import com.codiary.backend.global.domain.entity.Member;
import com.codiary.backend.global.domain.entity.mapping.TeamMember;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface TeamMemberRepository extends JpaRepository<TeamMember, Long> {
Optional<TeamMember> findByTeamAndMember(Team team, Member member);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
package com.codiary.backend.global.service.TeamMemberService;

import com.codiary.backend.global.domain.entity.mapping.TeamMember;
import com.codiary.backend.global.web.dto.TeamMember.TeamMemberRequestDTO;

public interface TeamMemberCommandService {

// 팀원 추가
TeamMember addMember(TeamMemberRequestDTO.AddMemberDTO request);

// 팀원 삭제
void removeMember(TeamMemberRequestDTO.RemoveMemberDTO request);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,54 @@
package com.codiary.backend.global.service.TeamMemberService;

public class TeamMemberCommandServiceImpl {
}
import com.codiary.backend.global.domain.entity.Member;
import com.codiary.backend.global.domain.entity.Team;
import com.codiary.backend.global.domain.entity.mapping.TeamMember;
import com.codiary.backend.global.repository.MemberRepository;
import com.codiary.backend.global.repository.TeamMemberRepository;
import com.codiary.backend.global.repository.TeamRepository;
import com.codiary.backend.global.web.dto.TeamMember.TeamMemberRequestDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@RequiredArgsConstructor
@Service
public class TeamMemberCommandServiceImpl implements TeamMemberCommandService {

private final TeamRepository teamRepository;
private final MemberRepository memberRepository;
private final TeamMemberRepository teamMemberRepository;

@Override
@Transactional
public TeamMember addMember(TeamMemberRequestDTO.AddMemberDTO request) {
Team team = teamRepository.findById(request.getTeamId())
.orElseThrow(() -> new IllegalArgumentException("Invalid team ID"));

Member member = memberRepository.findById(request.getMemberId())
.orElseThrow(() -> new IllegalArgumentException("Invalid member ID"));

TeamMember teamMember = TeamMember.builder()
.team(team)
.member(member)
.teamMemberRole(request.getMemberRole())
.build();

return teamMemberRepository.save(teamMember);
}

@Override
@Transactional
public void removeMember(TeamMemberRequestDTO.RemoveMemberDTO request) {
Team team = teamRepository.findById(request.getTeamId())
.orElseThrow(() -> new IllegalArgumentException("Invalid team ID"));

Member member = memberRepository.findById(request.getMemberId())
.orElseThrow(() -> new IllegalArgumentException("Invalid member ID"));

TeamMember teamMember = teamMemberRepository.findByTeamAndMember(team, member)
.orElseThrow(() -> new IllegalArgumentException("Team member not found"));

teamMemberRepository.delete(teamMember);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
package com.codiary.backend.global.service.TeamService;

import com.codiary.backend.global.web.dto.Team.TeamResponseDTO;

public interface TeamQueryService {
TeamResponseDTO.TeamCheckResponseDTO getTeamById(Long teamId);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,23 @@
package com.codiary.backend.global.service.TeamService;

public class TeamQueryServiceImpl {
import com.codiary.backend.global.converter.TeamConverter;
import com.codiary.backend.global.domain.entity.Team;
import com.codiary.backend.global.repository.TeamRepository;
import com.codiary.backend.global.web.dto.Team.TeamResponseDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class TeamQueryServiceImpl implements TeamQueryService {

private final TeamRepository teamRepository;

@Override
public TeamResponseDTO.TeamCheckResponseDTO getTeamById(Long teamId) {
Team team = teamRepository.findById(teamId)
.orElseThrow(() -> new IllegalArgumentException("Invalid team ID"));

return TeamConverter.toTeamCheckResponseDTO(team);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.codiary.backend.global.domain.entity.Team;
import com.codiary.backend.global.service.PostService.PostCommandService;
import com.codiary.backend.global.service.TeamService.TeamCommandService;
import com.codiary.backend.global.service.TeamService.TeamQueryService;
import com.codiary.backend.global.web.dto.Post.PostRequestDTO;
import com.codiary.backend.global.web.dto.Post.PostResponseDTO;
import com.codiary.backend.global.web.dto.Team.TeamRequestDTO;
Expand All @@ -22,6 +23,7 @@
public class TeamController {

private final TeamCommandService teamCommandService;
private final TeamQueryService teamQueryService;

//팀 생성
@PostMapping()
Expand All @@ -35,6 +37,14 @@ public ApiResponse<TeamResponseDTO.CreateTeamResponseDTO> createTeam(
TeamConverter.toCreateMemberDTO(newTeam));
}

//팀 조회
@GetMapping("/{teamId}")
@Operation(summary = "팀 정보 조회")
public ApiResponse<TeamResponseDTO.TeamCheckResponseDTO> getTeamById(@PathVariable Long teamId) {
TeamResponseDTO.TeamCheckResponseDTO teamInfo = teamQueryService.getTeamById(teamId);
return ApiResponse.onSuccess(SuccessStatus.TEAM_OK, teamInfo);
}

// 팀 프로필 수정
@PatchMapping("/profile/{teamId}")
@Operation(summary = "팀 프로필 수정")
Expand All @@ -46,6 +56,6 @@ public ApiResponse<TeamResponseDTO.UpdateTeamDTO> updateTeam(
SuccessStatus.TEAM_OK,
TeamConverter.toUpdateTeamDTO(updatedTeam));
}

//팀 팔로우
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,34 @@
package com.codiary.backend.global.web.controller;

import com.codiary.backend.global.apiPayload.ApiResponse;
import com.codiary.backend.global.apiPayload.code.status.SuccessStatus;
import com.codiary.backend.global.converter.TeamMemberConverter;
import com.codiary.backend.global.domain.entity.mapping.TeamMember;
import com.codiary.backend.global.service.TeamMemberService.TeamMemberCommandService;
import com.codiary.backend.global.web.dto.TeamMember.TeamMemberRequestDTO;
import com.codiary.backend.global.web.dto.TeamMember.TeamMemberResponseDTO;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RequiredArgsConstructor
@RestController
@RequestMapping("/teams")
public class TeamMemberController {
}

private final TeamMemberCommandService teamMemberCommandService;

@PostMapping("/add")
@Operation(summary = "팀원 추가")
public ApiResponse<TeamMemberResponseDTO.TeamMemberDTO> addMember(@RequestBody TeamMemberRequestDTO.AddMemberDTO request) {
TeamMember newMember = teamMemberCommandService.addMember(request);
return ApiResponse.onSuccess(SuccessStatus.TEAM_OK, TeamMemberConverter.toTeamMemberDTO(newMember));
}

@DeleteMapping("/delete")
@Operation(summary = "팀원 삭제")
public ApiResponse<Void> removeMember(@RequestBody TeamMemberRequestDTO.RemoveMemberDTO request) {
teamMemberCommandService.removeMember(request);
return ApiResponse.onSuccess(SuccessStatus.TEAM_OK, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import com.codiary.backend.global.domain.enums.PostAccess;
import com.codiary.backend.global.jwt.TokenInfo;
import com.codiary.backend.global.web.dto.TeamMember.TeamMemberResponseDTO;
import lombok.*;

import java.util.List;
import java.util.Set;

public class TeamResponseDTO {
Expand Down Expand Up @@ -47,6 +49,7 @@ public static class TeamCheckResponseDTO { // 팀 조회
String github;
String email;
String linkedIn;
private List<TeamMemberResponseDTO.TeamMemberDTO> members; // 팀원 목록 추가
}

@Builder
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.codiary.backend.global.web.dto.TeamMember;

import com.codiary.backend.global.domain.enums.MemberRole;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -10,27 +11,18 @@ public class TeamMemberRequestDTO {
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class AddTeamMemberRequestDTO { //팀원 추가
private String name;
private String profilePhoto;
private String intro;
private String github;
private String linkedIn;
private String discord;
private String instagram;
public static class AddMemberDTO {
private Long teamId;
private Long memberId;
private MemberRole memberRole;
}

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class DeleteMemberRequestDTO { //팀원 삭제
private String name;
private String profilePhoto;
private String intro;
private String github;
private String linkedIn;
private String discord;
private String instagram;
public static class RemoveMemberDTO {
private Long teamId;
private Long memberId;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.codiary.backend.global.web.dto.TeamMember;

import com.codiary.backend.global.domain.enums.MemberRole;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -11,8 +12,24 @@ public class TeamMemberResponseDTO {
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class TeamMemberViewResponseDTO {
Long teamMemberId;
public static class TeamCheckResponseDTO { //팀 조회
private Long teamId;
private String name;
private String intro;
private String profilePhoto;
private String github;
private String email;
private String linkedIn;
}

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class TeamMemberDTO {
private Long teamMemberId;
private Long teamId;
private Long memberId;
private MemberRole memberRole;
}
}

0 comments on commit 6461bfd

Please sign in to comment.