Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.mtvs.devlinkbackend.comment.entity.Comment;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
Expand All @@ -10,4 +12,7 @@
public interface CommentRepository extends JpaRepository<Comment, Long> {
List<Comment> findCommentsByAccountId(String accountId);
List<Comment> findCommentsByProject_ProjectId(Long requestId);

@Query("SELECT c FROM Comment c WHERE c.project.projectId = :projectId")
List<Comment> findCommentIdsByProjectId(@Param("projectId") Long projectId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.mtvs.devlinkbackend.project.controller;

import com.mtvs.devlinkbackend.project.dto.response.ProjectDetailResponseDTO;
import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO;
import com.mtvs.devlinkbackend.project.service.ProjectDetailService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/project")
public class ProjectSummaryController {
private final ProjectDetailService projectDetailService;

public ProjectSummaryController(ProjectDetailService projectDetailService) {
this.projectDetailService = projectDetailService;
}

@Operation(summary = "전체 프로젝트 요약 조회", description = "전체 프로젝트 요약을 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공적으로 조회됨"),
@ApiResponse(responseCode = "404", description = "찾을 수 없음")
})
@GetMapping("/summary")
public ResponseEntity<ProjectSummaryResponseDTO> findAllSummary() {
ProjectSummaryResponseDTO summary = projectDetailService.findAllProjectSummary();
return summary != null ? ResponseEntity.ok(summary) : ResponseEntity.notFound().build();
}

@Operation(summary = "전체 프로젝트 세부 내용 조회", description = "전체 프로젝트 세부 내용을 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "성공적으로 조회됨"),
@ApiResponse(responseCode = "404", description = "찾을 수 없음")
})
@GetMapping("/{projectId}/detail")
public ResponseEntity<ProjectDetailResponseDTO> findProjectDetailByProjectId(
@PathVariable(name = "projectId") Long projectId) {
ProjectDetailResponseDTO detail = projectDetailService.findProjectDetailByProjectId(projectId);
return detail != null ? ResponseEntity.ok(detail) : ResponseEntity.notFound().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mtvs.devlinkbackend.project.dto.response;

import com.mtvs.devlinkbackend.comment.entity.Comment;
import com.mtvs.devlinkbackend.project.repository.projection.ProjectIdAndContent;
import lombok.*;

import java.util.List;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ProjectDetailResponseDTO {
private ProjectIdAndContent projectIdAndContent;
private List<Comment> commentIdList;
private List<Long> supportedTeamIdList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.mtvs.devlinkbackend.project.dto.response;

import com.mtvs.devlinkbackend.project.repository.projection.ProjectSummary;
import lombok.*;

import java.util.List;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ProjectSummaryResponseDTO {
private List<ProjectSummary> data;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.mtvs.devlinkbackend.project.repository;

import com.mtvs.devlinkbackend.project.entity.Project;
import com.mtvs.devlinkbackend.project.repository.projection.ProjectIdAndContent;
import com.mtvs.devlinkbackend.project.repository.projection.ProjectSummary;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -9,6 +11,7 @@
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

@Repository
public interface ProjectRepository extends JpaRepository<Project, Long> {
Expand Down Expand Up @@ -46,4 +49,8 @@ Page<Project> findProjectsWithLargerRequirements(
@Param("requiredAIEngineer") Integer requiredAIEngineer,
Pageable pageable
);

List<ProjectSummary> findAllBy();

ProjectIdAndContent findProjectIdAndContentByProjectId(Long projectId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.mtvs.devlinkbackend.project.repository.projection;

public interface ProjectIdAndContent {
Long getProjectId();
String getContent();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.mtvs.devlinkbackend.project.repository.projection;

import java.time.LocalDateTime;
import java.util.Map;

public interface ProjectSummary {
Long getProjectId();
String getWorkScope();
String getWorkType();
String getProgressClassification();
String getCompanyName();
String getTitle();
Integer getRequiredClient();
Integer getRequiredServer();
Integer getRequiredDesign();
Integer getRequiredPlanner();
Integer getRequiredAIEngineer();
LocalDateTime getStartDateTime();
LocalDateTime getEndDateTime();
Integer getEstimatedCost();
String getAccountId();
LocalDateTime getCreatedAt();
LocalDateTime getModifiedAt();
Map<String, Integer> getProjectVector();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.mtvs.devlinkbackend.project.service;

import com.mtvs.devlinkbackend.comment.entity.Comment;
import com.mtvs.devlinkbackend.comment.repository.CommentRepository;
import com.mtvs.devlinkbackend.project.dto.response.ProjectDetailResponseDTO;
import com.mtvs.devlinkbackend.project.dto.response.ProjectSummaryResponseDTO;
import com.mtvs.devlinkbackend.project.repository.projection.ProjectIdAndContent;
import com.mtvs.devlinkbackend.project.repository.projection.ProjectSummary;
import com.mtvs.devlinkbackend.project.repository.ProjectRepository;
import com.mtvs.devlinkbackend.support.repository.SupportRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProjectDetailService {
private final ProjectRepository projectRepository;
private final CommentRepository commentRepository;
private final SupportRepository supportRepository;

public ProjectDetailService(ProjectRepository projectRepository, CommentRepository commentRepository, SupportRepository supportRepository) {
this.projectRepository = projectRepository;
this.commentRepository = commentRepository;
this.supportRepository = supportRepository;
}

public ProjectSummaryResponseDTO findAllProjectSummary() {
List<ProjectSummary> projectSummaryList = projectRepository.findAllBy();
return new ProjectSummaryResponseDTO(projectSummaryList);
}

public ProjectDetailResponseDTO findProjectDetailByProjectId(Long projectId) {
ProjectIdAndContent projectIdAndContents = projectRepository.findProjectIdAndContentByProjectId(projectId);
List<Comment> commentList = commentRepository.findCommentIdsByProjectId(projectId);
List<Long> supportedTeamIdList = supportRepository.findTeamIdByProjectId(projectId);

return new ProjectDetailResponseDTO(projectIdAndContents, commentList, supportedTeamIdList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.mtvs.devlinkbackend.support.entity.Support;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
Expand All @@ -10,4 +12,6 @@
public interface SupportRepository extends JpaRepository<Support, Long> {
List<Support> findSupportsByProjectId(Long projectId);
List<Support> findSupportsByTeamId(Long teamId);
@Query("SELECT s.teamId FROM Support s WHERE s.projectId = :projectId")
List<Long> findTeamIdByProjectId(@Param("projectId") Long projectId);
}