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

Feature/#91 teammember add delete #102

Merged
merged 9 commits into from
Aug 7, 2024
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;
}
}
Loading