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 @@ -3,6 +3,7 @@
import com.mtvs.devlinkbackend.util.StringListConverter;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;
Expand All @@ -12,6 +13,7 @@
@Entity(name = "UserPartner")
@DiscriminatorValue("UserPartner") // purpose 값으로 지정
@Getter @Setter
@NoArgsConstructor
public class UserPartner extends User {
@Column(name = "NICKNAME")
private String nickname;
Expand All @@ -33,7 +35,7 @@ public class UserPartner extends User {
private String experience;

@ElementCollection
@CollectionTable(name = "SKILL", joinColumns = @JoinColumn(name = "SKILL_ID"))
@CollectionTable(name = "SKILL", joinColumns = @JoinColumn(name = "USER_ID"))
@MapKeyColumn(name = "SKILL_NAME")
@Column(name = "SKILL_PROFICIENCY")
private Map<String, Integer> skillSet;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.mtvs.devlinkbackend.project.controller;

import com.mtvs.devlinkbackend.project.dto.ProjectVectorRegistRequestDTO;
import com.mtvs.devlinkbackend.util.JwtUtil;
import com.mtvs.devlinkbackend.project.dto.ProjectRegistRequestDTO;
import com.mtvs.devlinkbackend.project.dto.ProjectUpdateRequestDTO;
Expand All @@ -14,6 +15,7 @@

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

@RestController
@RequestMapping("/api/project")
Expand Down Expand Up @@ -142,6 +144,19 @@ public ResponseEntity<List<Project>> getProjectsByTitleContainingIgnoreCase(
return ResponseEntity.ok(projects);
}

@Operation(summary = "PK로 프로젝트 의뢰의 Vector 정보 조회", description = "PK에 맞는 프로젝트가 가진 Vector 정보를 조회합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "Vector 정보가 성공적으로 조회됨")
})
@GetMapping("/{projectId}/vector")
public ResponseEntity<Map<String, Integer>> getProjectVectorByProjectId(
@PathVariable(name = "projectId") Long projectId) {

Map<String, Integer> foundProjectVector = projectService.findProjectVectorByProjectId(projectId);
return ResponseEntity.ok(foundProjectVector);
}


@Operation(summary = "프로젝트 의뢰 업데이트", description = "기존 프로젝트 의뢰를 업데이트합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "프로젝트 의뢰가 성공적으로 업데이트됨"),
Expand All @@ -161,6 +176,23 @@ public ResponseEntity<Project> updateProject(
}
}

@Operation(summary = "프로젝트 의뢰 업데이트", description = "기존 프로젝트 의뢰를 업데이트합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "프로젝트 의뢰가 성공적으로 업데이트됨"),
@ApiResponse(responseCode = "400", description = "잘못된 파라미터 또는 권한 없음")
})
@PatchMapping("/vector")
public ResponseEntity<Project> updateProject(
@RequestBody ProjectVectorRegistRequestDTO projectVectorRegistRequestDTO) {

try {
Project updatedProject = projectService.updateProjectVector(projectVectorRegistRequestDTO);
return ResponseEntity.ok(updatedProject);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
}
}

@Operation(summary = "프로젝트 의뢰 삭제", description = "ID로 특정 프로젝트 의뢰를 삭제합니다.")
@ApiResponses({
@ApiResponse(responseCode = "204", description = "프로젝트 의뢰가 성공적으로 삭제됨"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.mtvs.devlinkbackend.project.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.util.Map;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ProjectVectorRegistRequestDTO {
private Long projectId;
@Schema(
description = "프로젝트 벡터 정보. Key는 축 이름(X, Y, Z)이고, Value는 해당 축의 값입니다.",
example = "{\"x\": 1, \"y\": 2, \"z\": 3}"
)
private Map<String, Integer> projectVector;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Table(name = "PROJECT")
@Entity(name = "Project")
Expand Down Expand Up @@ -77,6 +78,12 @@ public class Project {
@Column(name = "MODIFIED_AT")
private LocalDateTime modifiedAt;

@ElementCollection
@CollectionTable(name = "PROJECT_VECTOR", joinColumns = @JoinColumn(name = "PROJECT_ID"))
@MapKeyColumn(name = "AXIS")
@Column(name = "VALUE")
private Map<String, Integer> projectVector;

@OneToMany(mappedBy = "project", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonManagedReference
private List<Comment> comments = new ArrayList<>();
Expand Down Expand Up @@ -158,4 +165,8 @@ public void setStartDateTime(LocalDateTime startDateTime) {
public void setEndDateTime(LocalDateTime endDateTime) {
this.endDateTime = endDateTime;
}

public void setProjectVector(Map<String, Integer> projectVector) {
this.projectVector = projectVector;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@

import com.mtvs.devlinkbackend.project.dto.ProjectRegistRequestDTO;
import com.mtvs.devlinkbackend.project.dto.ProjectUpdateRequestDTO;
import com.mtvs.devlinkbackend.project.dto.ProjectVectorRegistRequestDTO;
import com.mtvs.devlinkbackend.project.entity.Project;
import com.mtvs.devlinkbackend.project.repository.ProjectRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@Service
Expand Down Expand Up @@ -77,6 +80,10 @@ public List<Project> findProjectsWithLargerRequirements(
requiredClient, requiredServer, requiredDesign, requiredPlanner, requiredAIEngineer);
}

public Map<String, Integer> findProjectVectorByProjectId(Long projectId) {
return projectRepository.findById(projectId).orElse(null).getProjectVector();
}

@Transactional
public Project updateProject(ProjectUpdateRequestDTO projectUpdateRequestDTO, String accountId) {
Optional<Project> request = projectRepository.findById(projectUpdateRequestDTO.getRequestId());
Expand Down Expand Up @@ -104,6 +111,21 @@ else throw new IllegalArgumentException("잘못된 accountId로 Request ID : "
else throw new IllegalArgumentException("잘못된 requestId로 수정 시도");
}

@Transactional
public Project updateProjectVector(ProjectVectorRegistRequestDTO projectVectorRegistRequestDTO) {
Optional<Project> project = projectRepository.findById(projectVectorRegistRequestDTO.getProjectId());
if(project.isPresent()) {
Project foundProject = project.get();
if(foundProject.getProjectVector().keySet().containsAll(List.of("x","y","z"))) {
foundProject.setProjectVector(projectVectorRegistRequestDTO.getProjectVector());
return foundProject;
} else
throw new IllegalArgumentException("잘못된 vector key를 넣고 있음 | vector = " +
projectVectorRegistRequestDTO.getProjectVector());
} else
throw new IllegalArgumentException("등록되지 않은 Project에게 vector 정보를 추가/수정 시도 중");
}

public void deleteProject(Long requestId) {
projectRepository.deleteById(requestId);
}
Expand Down