Skip to content

Commit 0222a31

Browse files
committed
Feat: team리스트 api 및 수락 api완성
1 parent d2a7823 commit 0222a31

17 files changed

Lines changed: 252 additions & 5 deletions

src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectCommandController.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import org.springframework.http.ResponseEntity;
1515
import org.springframework.web.bind.annotation.*;
1616

17+
import java.util.HashMap;
18+
import java.util.Map;
19+
1720
@RestController
1821
@RequestMapping("/api/project")
1922
public class ProjectCommandController {
@@ -73,6 +76,26 @@ public ResponseEntity<ProjectTeamResponseDTO> applyProjectByNewTeam(
7376
return new ResponseEntity<>(newProject, HttpStatus.CREATED);
7477
}
7578

79+
@Operation(summary = "프로젝트 지원 수락", description = "특정 팀의 프로젝트 지원을 수락합니다.")
80+
@ApiResponses({
81+
@ApiResponse(responseCode = "201", description = "지원을 성공적으로 수락함"),
82+
@ApiResponse(responseCode = "400", description = "잘못된 파라미터")
83+
})
84+
@PostMapping("/accept/epic/{projectId}/{teamId}")
85+
public ResponseEntity<Map<String, String>> acceptProject(
86+
@PathVariable(name = "projectId") Long projectId,
87+
@PathVariable(name = "teamId") Long teamId,
88+
@RequestHeader(name = "Authorization") String authorizationHeader) throws Exception {
89+
Long userId = jwtUtil.getUserIdByToken(authorizationHeader);
90+
Map<String, String> response = new HashMap<>();
91+
if(projectService.acceptTeam(userId, projectId, teamId)) {
92+
response.put("isSuccess", "true");
93+
} else {
94+
response.put("isSuccess", "false");
95+
}
96+
return ResponseEntity.ok(response);
97+
}
98+
7699
@Operation(summary = "프로젝트 의뢰 삭제", description = "ID로 특정 프로젝트 의뢰를 삭제합니다.")
77100
@ApiResponses({
78101
@ApiResponse(responseCode = "204", description = "프로젝트 의뢰가 성공적으로 삭제됨"),

src/main/java/com/mtvs/devlinkbackend/project/controller/ProjectSummaryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public ProjectSummaryController(ProjectSummaryViewService projectSummaryViewServ
2727
@GetMapping("/{page}")
2828
public ResponseEntity<ProjectSummaryPagingResponseDTO> getProjectSummaries(
2929
@PathVariable(name = "page") int page) {
30-
ProjectSummaryPagingResponseDTO responseDTO = projectSummaryViewService.findAllProjectSummaryWithPagination(page);
30+
ProjectSummaryPagingResponseDTO responseDTO = projectSummaryViewService.findAllProjectSummaryWithPagination(page-1);
3131
return ResponseEntity.ok(responseDTO);
3232
}
3333

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,23 @@
11
package com.mtvs.devlinkbackend.project.repository;
22

3+
import com.mtvs.devlinkbackend.common.model.AcceptStatus;
34
import com.mtvs.devlinkbackend.project.entity.Project;
45
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.data.jpa.repository.Modifying;
7+
import org.springframework.data.jpa.repository.Query;
8+
import org.springframework.data.repository.query.Param;
59
import org.springframework.stereotype.Repository;
10+
import org.springframework.transaction.annotation.Transactional;
611

712
@Repository
813
public interface ProjectRepository extends JpaRepository<Project, Long> {
14+
@Modifying
15+
@Transactional
16+
@Query("UPDATE Support s SET s.supportConfirmation = :confirmationStatus " +
17+
"WHERE s.projectId = :projectId AND s.teamId = :teamId " +
18+
"AND EXISTS (SELECT 1 FROM Team t WHERE t.teamId = s.teamId AND t.leaderUserId = :userId)")
19+
void updateSupportConfirmation(@Param("projectId") Long projectId,
20+
@Param("teamId") Long teamId,
21+
@Param("userId") Long userId,
22+
@Param("confirmationStatus") AcceptStatus confirmationStatus);
923
}

src/main/java/com/mtvs/devlinkbackend/project/repository/ProjectViewRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.springframework.data.domain.Page;
66
import org.springframework.data.domain.Pageable;
77
import org.springframework.data.jpa.repository.JpaRepository;
8+
import org.springframework.data.jpa.repository.Query;
9+
import org.springframework.data.repository.query.Param;
810

911
import java.time.LocalDate;
1012

@@ -29,4 +31,7 @@ Page<Project> findProjectsByStartDateLessThanEqualOrEndDateGreaterThanEqual(
2931
ProjectIdAndContent findProjectIdAndContentByProjectId(Long projectId);
3032

3133
Page<Project> findAllBy(Pageable pageable);
34+
35+
@Query("SELECT p.userId FROM Project p WHERE p.projectId = :projectId")
36+
Long findUserIdByProjectId(@Param("projectId") Long projectId);
3237
}

src/main/java/com/mtvs/devlinkbackend/project/service/ProjectService.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.mtvs.devlinkbackend.project.service;
22

3+
import com.mtvs.devlinkbackend.common.model.AcceptStatus;
34
import com.mtvs.devlinkbackend.project.dto.response.ProjectTeamResponseDTO;
45
import com.mtvs.devlinkbackend.project.dto.response.sub.ProjectAndTeamIdListDTO;
56
import com.mtvs.devlinkbackend.project.dto.request.ProjectRegistRequestDTO;
@@ -101,9 +102,21 @@ public ProjectTeamResponseDTO applyProjectByNewTeam(TeamRegistRequestDTO teamReg
101102
supportService.findTeamIdsByProjectId(projectId)));
102103
}
103104

105+
@Transactional
106+
public boolean acceptTeam(Long userId, Long projectId, Long teamId) {
107+
try{
108+
projectRepository.updateSupportConfirmation(projectId, teamId, userId, AcceptStatus.ACCEPTED);
109+
return true;
110+
} catch (Exception e){
111+
throw new IllegalArgumentException(e.getMessage());
112+
}
113+
}
114+
104115
@Transactional
105116
public void deleteProject(Long projectId) {
106117
projectRepository.deleteById(projectId);
107118
}
119+
120+
108121
}
109122

src/main/java/com/mtvs/devlinkbackend/project/service/ProjectSummaryViewService.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,20 @@ public ProjectSummaryPagingResponseDTO findAllProjectSummaryWithPagination(int p
4141
// workType 설정
4242
previewDTO.setWorkType(projectSummary.getWorkType());
4343
previewDTO.setProgressClassification(projectSummary.getProgressClassification());
44+
previewDTO.setProjectId(projectSummary.getProjectId());
4445

4546
// previewTitle 생성: workType + (StartDateTime과 EndDateTime의 월 차이) + title
4647
long monthsDifference = ChronoUnit.MONTHS.between(
4748
projectSummary.getStartDate(), projectSummary.getEndDate());
4849

49-
StringBuilder previewTitle = new StringBuilder("[" + projectSummary.getWorkType() + "] [" + monthsDifference + "개월");
50+
StringBuilder previewTitle = new StringBuilder("[");
51+
if(projectSummary.getWorkType().equals("both"))
52+
previewTitle.append("상주, 원격");
53+
else if (projectSummary.getWorkType().equals("local"))
54+
previewTitle.append("상주");
55+
else if (projectSummary.getWorkType().equals("remote"))
56+
previewTitle.append("원격");
57+
previewTitle.append("] [").append(monthsDifference).append("개월");
5058

5159
List<String> requiredOccupationNameList = new ArrayList<>();
5260
for (Occupation occupation : projectSummary.getRequiredOccupationList()) {

src/main/java/com/mtvs/devlinkbackend/support/repository/SupportRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ public interface SupportRepository extends JpaRepository<Support, Long> {
1414
List<Support> findSupportsByTeamId(Long teamId);
1515
@Query("SELECT s.teamId FROM Support s WHERE s.projectId = :projectId")
1616
List<Long> findTeamIdByProjectId(@Param("projectId") Long projectId);
17+
@Query("SELECT s.teamId FROM Support s WHERE s.projectId = :projectId AND s.supportConfirmation = 1")
18+
List<Long> findTeamIdByProjectIdUnConfirmed(@Param("projectId") Long projectId);
1719
}

src/main/java/com/mtvs/devlinkbackend/team/controller/TeamQueryController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.mtvs.devlinkbackend.team.dto.response.TeamListResponseDTO;
44
import com.mtvs.devlinkbackend.team.dto.response.TeamSingleReponseDTO;
5+
import com.mtvs.devlinkbackend.team.dto.response.support.TeamSupportListResponseDTO;
56
import com.mtvs.devlinkbackend.team.service.TeamViewService;
67
import com.mtvs.devlinkbackend.common.util.JwtUtil;
78
import io.swagger.v3.oas.annotations.Operation;
@@ -11,6 +12,8 @@
1112
import org.springframework.http.ResponseEntity;
1213
import org.springframework.web.bind.annotation.*;
1314

15+
import java.util.List;
16+
1417
@RestController
1518
@RequestMapping("/api/team")
1619
public class TeamQueryController {
@@ -63,4 +66,14 @@ public ResponseEntity<TeamListResponseDTO> getTeamsByMemberIdContaining(
6366
TeamListResponseDTO teams = teamViewService.findByAccountIdInTeam(accountId);
6467
return ResponseEntity.ok(teams);
6568
}
69+
70+
@GetMapping("/{projectId}/support/list")
71+
public ResponseEntity<TeamSupportListResponseDTO> getSupportTeamsByProjectId(
72+
@RequestHeader(name = "Authorization") String authorizationHeader,
73+
@PathVariable Long projectId
74+
) throws Exception {
75+
Long userId = jwtUtil.getUserIdByToken(authorizationHeader);
76+
TeamSupportListResponseDTO teamlists = teamViewService.getTeamList(userId, projectId);
77+
return ResponseEntity.ok(teamlists);
78+
}
6679
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.mtvs.devlinkbackend.team.dto.response.support;
2+
3+
import lombok.*;
4+
5+
@Getter
6+
@Setter
7+
@NoArgsConstructor
8+
@AllArgsConstructor
9+
@ToString
10+
public class RadarPointDTO {
11+
private String categoryName;
12+
private Double pointAvg;
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.mtvs.devlinkbackend.team.dto.response.support;
2+
3+
import lombok.*;
4+
5+
@Getter
6+
@Setter
7+
@NoArgsConstructor
8+
@AllArgsConstructor
9+
@ToString
10+
public class TeamMemberDTO {
11+
private String nickname;
12+
private Integer experienceValue;
13+
}

0 commit comments

Comments
 (0)