
--- src/main/java/kr/co/takensoft/ai/system/common/config/SecurityConfig.java
+++ src/main/java/kr/co/takensoft/ai/system/common/config/SecurityConfig.java
... | ... | @@ -26,8 +26,8 @@ |
26 | 26 |
http |
27 | 27 |
.csrf(csrf -> csrf.disable()) // CSRF 비활성화 |
28 | 28 |
.authorizeHttpRequests(auth -> auth |
29 |
- .requestMatchers("/api/auth/**").permitAll() // 로그인, 회원가입 관련 로직 허용 |
|
30 |
- //.requestMatchers("/**").permitAll() // 테스트 중이라 경로 전부 허용 |
|
29 |
+// .requestMatchers("/api/auth/**").permitAll() // 로그인, 회원가입 관련 로직 허용 |
|
30 |
+ .requestMatchers("/**").permitAll() // 테스트 중이라 경로 전부 허용 |
|
31 | 31 |
.anyRequest().authenticated() // 나머지 요청은 인증 필요 |
32 | 32 |
) |
33 | 33 |
.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); |
--- src/main/java/kr/co/takensoft/ai/system/common/idgen/context/ContextIdgen.java
+++ src/main/java/kr/co/takensoft/ai/system/common/idgen/context/ContextIdgen.java
... | ... | @@ -40,14 +40,25 @@ |
40 | 40 |
return idgenServiceImpl; |
41 | 41 |
} |
42 | 42 |
|
43 |
- // 피드백 채팅 정보 |
|
44 |
- @Bean(name = "feedbackChatIdgn") |
|
45 |
- public IdgenService feedbackChat() { |
|
43 |
+ // 피드백 채팅방 정보 |
|
44 |
+ @Bean(name = "chatRoomIdgn") |
|
45 |
+ public IdgenService chatRoom() { |
|
46 | 46 |
IdgenService idgenServiceImpl = new IdgenService(); |
47 | 47 |
idgenServiceImpl.setCipers(15); |
48 | 48 |
idgenServiceImpl.setFillChar('0'); |
49 |
- idgenServiceImpl.setPrefix("FBCH_"); |
|
50 |
- idgenServiceImpl.setTblNm("FBCH"); |
|
49 |
+ idgenServiceImpl.setPrefix("CHRM_"); |
|
50 |
+ idgenServiceImpl.setTblNm("CHRM"); |
|
51 |
+ return idgenServiceImpl; |
|
52 |
+ } |
|
53 |
+ |
|
54 |
+ // 채팅 메시지 정보 |
|
55 |
+ @Bean(name = "chatMsgIdgn") |
|
56 |
+ public IdgenService chatMsg() { |
|
57 |
+ IdgenService idgenServiceImpl = new IdgenService(); |
|
58 |
+ idgenServiceImpl.setCipers(15); |
|
59 |
+ idgenServiceImpl.setFillChar('0'); |
|
60 |
+ idgenServiceImpl.setPrefix("CHMG_"); |
|
61 |
+ idgenServiceImpl.setTblNm("CHMG"); |
|
51 | 62 |
return idgenServiceImpl; |
52 | 63 |
} |
53 | 64 |
|
--- src/main/java/kr/co/takensoft/ai/system/project/dao/ProjectDAO.java
+++ src/main/java/kr/co/takensoft/ai/system/project/dao/ProjectDAO.java
... | ... | @@ -28,12 +28,12 @@ |
28 | 28 |
int saveProject(ProjectVO projectVO); |
29 | 29 |
|
30 | 30 |
/** |
31 |
- * @param memberId - 사용자 아이디 |
|
32 |
- * @return List<ProjectVO> - 사용자가 참여하는 프로젝트 목록 |
|
31 |
+ * @param searchReqDTO - 프로젝트 목록 검색 조건 |
|
32 |
+ * @return List<ProjectVO> - 프로젝트 목록 정보 |
|
33 | 33 |
* |
34 | 34 |
* 프로젝트 목록 조회 |
35 | 35 |
*/ |
36 |
- List<ProjectDTO> findProjectsByMemberId(String memberId); |
|
36 |
+ List<ProjectVO> findAllProjects(ProjectSearchReqDTO searchReqDTO); |
|
37 | 37 |
|
38 | 38 |
/** |
39 | 39 |
* @param projectId - 프로젝트 아이디 |
... | ... | @@ -108,12 +108,4 @@ |
108 | 108 |
* 그룹 내에서 기준 프로젝트 이후에 생성된 프로젝트 모두 삭제 (use_at = 'N') |
109 | 109 |
*/ |
110 | 110 |
int deactivateProjectsCreatedAfter(String projectGroupId, String projectId); |
111 |
- |
|
112 |
- /** |
|
113 |
- * @param searchReqDTO - 프로젝트 목록 검색 조건 |
|
114 |
- * @return List<ProjectVO> - 프로젝트 목록 정보 |
|
115 |
- * |
|
116 |
- * 프로젝트 목록 조회 |
|
117 |
- */ |
|
118 |
- List<ProjectVO> findAllProjects(ProjectSearchReqDTO searchReqDTO); |
|
119 | 111 |
} |
--- src/main/java/kr/co/takensoft/ai/system/project/dto/InsertProjectDTO.java
+++ src/main/java/kr/co/takensoft/ai/system/project/dto/InsertProjectDTO.java
... | ... | @@ -1,8 +1,11 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.project.dto; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.common.dto.BaseParam; |
|
4 |
+import lombok.AllArgsConstructor; |
|
3 | 5 |
import lombok.Getter; |
4 | 6 |
import lombok.NoArgsConstructor; |
5 | 7 |
import lombok.Setter; |
8 |
+import org.springframework.web.multipart.MultipartFile; |
|
6 | 9 |
|
7 | 10 |
/** |
8 | 11 |
* @author 박현정 |
... | ... | @@ -16,11 +19,16 @@ |
16 | 19 |
@Setter |
17 | 20 |
@Getter |
18 | 21 |
@NoArgsConstructor |
19 |
-public class InsertProjectDTO { |
|
22 |
+public class InsertProjectDTO extends BaseParam { |
|
20 | 23 |
|
21 |
- private String imageFileName; // 프로젝트 이미지 파일 이름 |
|
22 |
- private String imageFileUrl; // 프로젝트 이미지 파일 경로 |
|
24 |
+ private MultipartFile imageFile; // 프로젝트 이미지 파일 |
|
23 | 25 |
private String summary; // 프로젝트 주석 요약 |
24 | 26 |
private String comment; // 프로젝트 주석 내용 |
25 | 27 |
|
28 |
+ public InsertProjectDTO(String memberId, MultipartFile imageFile, String summary, String comment) { |
|
29 |
+ this.setMemberId(memberId); |
|
30 |
+ this.imageFile = imageFile; |
|
31 |
+ this.summary = summary; |
|
32 |
+ this.comment = comment; |
|
33 |
+ } |
|
26 | 34 |
} |
--- src/main/java/kr/co/takensoft/ai/system/project/dto/ProjectSearchReqDTO.java
+++ src/main/java/kr/co/takensoft/ai/system/project/dto/ProjectSearchReqDTO.java
... | ... | @@ -1,5 +1,6 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.project.dto; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.common.dto.BaseParam; |
|
3 | 4 |
import lombok.Getter; |
4 | 5 |
import lombok.NoArgsConstructor; |
5 | 6 |
import lombok.Setter; |
... | ... | @@ -16,9 +17,8 @@ |
16 | 17 |
@Setter |
17 | 18 |
@Getter |
18 | 19 |
@NoArgsConstructor |
19 |
-public class ProjectSearchReqDTO { |
|
20 |
+public class ProjectSearchReqDTO extends BaseParam { |
|
20 | 21 |
|
21 |
- private String memberId; // 사용자 아이디 |
|
22 | 22 |
private String projectGroupId; // 프로젝트 그룹 아이디 |
23 | 23 |
private String projectName; // 프로젝트 이름 |
24 | 24 |
private String isMain; // 대표 프로젝트 여부('N' : 대표 아님, 'Y' : 대표) |
--- src/main/java/kr/co/takensoft/ai/system/project/dto/UpdateProjectDTO.java
+++ src/main/java/kr/co/takensoft/ai/system/project/dto/UpdateProjectDTO.java
... | ... | @@ -1,8 +1,10 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.project.dto; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.common.dto.BaseParam; |
|
3 | 4 |
import lombok.Getter; |
4 | 5 |
import lombok.NoArgsConstructor; |
5 | 6 |
import lombok.Setter; |
7 |
+import org.springframework.web.multipart.MultipartFile; |
|
6 | 8 |
|
7 | 9 |
/** |
8 | 10 |
* @author 박현정 |
... | ... | @@ -16,10 +18,11 @@ |
16 | 18 |
@Setter |
17 | 19 |
@Getter |
18 | 20 |
@NoArgsConstructor |
19 |
-public class UpdateProjectDTO { |
|
21 |
+public class UpdateProjectDTO extends BaseParam { |
|
20 | 22 |
|
21 |
- private String imageFileName; // 프로젝트 이미지 파일 이름 |
|
22 |
- private String imageFileUrl; // 프로젝트 이미지 파일 경로 |
|
23 |
+// private String imageFileName; // 프로젝트 이미지 파일 이름 |
|
24 |
+// private String imageFileUrl; // 프로젝트 이미지 파일 경로 |
|
25 |
+ private MultipartFile imageFile; // 프로젝트 이미지 파일 |
|
23 | 26 |
private String summary; // 프로젝트 주석 요약 |
24 | 27 |
private String comment; // 프로젝트 주석 내용 |
25 | 28 |
} |
--- src/main/java/kr/co/takensoft/ai/system/project/dto/UpdateProjectNameDTO.java
+++ src/main/java/kr/co/takensoft/ai/system/project/dto/UpdateProjectNameDTO.java
... | ... | @@ -1,5 +1,6 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.project.dto; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.common.dto.BaseParam; |
|
3 | 4 |
import lombok.Getter; |
4 | 5 |
import lombok.NoArgsConstructor; |
5 | 6 |
import lombok.Setter; |
... | ... | @@ -16,6 +17,6 @@ |
16 | 17 |
@Setter |
17 | 18 |
@Getter |
18 | 19 |
@NoArgsConstructor |
19 |
-public class UpdateProjectNameDTO { |
|
20 |
+public class UpdateProjectNameDTO extends BaseParam { |
|
20 | 21 |
private String projectName; |
21 | 22 |
} |
--- src/main/java/kr/co/takensoft/ai/system/project/service/ProjectService.java
+++ src/main/java/kr/co/takensoft/ai/system/project/service/ProjectService.java
... | ... | @@ -1,5 +1,6 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.project.service; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.common.dto.BaseParam; |
|
3 | 4 |
import kr.co.takensoft.ai.system.project.dto.*; |
4 | 5 |
import kr.co.takensoft.ai.system.project.vo.ProjectVO; |
5 | 6 |
import org.springframework.transaction.annotation.Transactional; |
... | ... | @@ -20,14 +21,13 @@ |
20 | 21 |
public interface ProjectService { |
21 | 22 |
|
22 | 23 |
/** |
23 |
- * @param memberId - 사용자 아이디 |
|
24 |
- * @param projectDTO - 생성할 프로젝트 정보 |
|
24 |
+ * @param request - 생성할 프로젝트 정보 |
|
25 | 25 |
* @return 등록 성공 여부 |
26 | 26 |
* |
27 | 27 |
* 프로젝트 등록 |
28 | 28 |
*/ |
29 | 29 |
@Transactional |
30 |
- public int saveProject(String memberId, InsertProjectDTO projectDTO); |
|
30 |
+ int saveProject(InsertProjectDTO request); |
|
31 | 31 |
|
32 | 32 |
/** |
33 | 33 |
* @param memberId - 사용자 아이디 |
... | ... | @@ -35,7 +35,7 @@ |
35 | 35 |
* |
36 | 36 |
* 프로젝트 이름 자동 생성 |
37 | 37 |
*/ |
38 |
- public String generateProjectNameForMember(String memberId); |
|
38 |
+ String generateProjectNameForMember(String memberId); |
|
39 | 39 |
|
40 | 40 |
/** |
41 | 41 |
* @param index - 숫자 |
... | ... | @@ -43,91 +43,72 @@ |
43 | 43 |
* |
44 | 44 |
* 숫자를 알파벳으로 변경(0 -> 'A', 1 -> 'B', ... 25 -> 'Z', 26 -> 'AA', ...) |
45 | 45 |
*/ |
46 |
- public String numberToAlphabet(int index); |
|
46 |
+ String numberToAlphabet(int index); |
|
47 | 47 |
|
48 | 48 |
/** |
49 |
- * @param memberId - 사용자 아이디 |
|
50 |
- * @return 프로젝트 리스트 |
|
49 |
+ * @param request - 프로젝트 목록 검색 조건 |
|
50 |
+ * @return HashMap<String, Object> - 프로젝트 목록 정보를 담은 객체 |
|
51 | 51 |
* |
52 |
- * 사용자가 참여한 프로젝트 목록 조회 |
|
52 |
+ * 프로젝트 목록 조회 |
|
53 | 53 |
*/ |
54 |
- public List<ProjectDTO> findProjectsByMemberId(String memberId); |
|
54 |
+ HashMap<String, Object> findAllProjects(ProjectSearchReqDTO request); |
|
55 | 55 |
|
56 | 56 |
/** |
57 |
- * @param memberId - 사용자 아이디 |
|
58 |
- * @return 사용자가 생성한 프로젝트 개수 |
|
59 |
- * |
|
60 |
- * 사용자가 생성한 프로젝트 개수 조회 |
|
61 |
- */ |
|
62 |
- public int countCreatedByMember(String memberId); |
|
63 |
- |
|
64 |
- /** |
|
65 |
- * @param memberId - 사용자 아이디 |
|
66 | 57 |
* @param projectId - 수정 프로젝트 아이디 |
67 |
- * @param projectDTO - 수정 프로젝트 정보를 담은 DTO 객체 |
|
58 |
+ * @param request - 수정 프로젝트 정보를 담은 DTO 객체 |
|
68 | 59 |
* @return 수정 성공 여부 |
69 | 60 |
* |
70 | 61 |
* 프로젝트 정보 수정 |
71 | 62 |
*/ |
72 | 63 |
@Transactional |
73 |
- public int updateProject(String memberId, String projectId, UpdateProjectDTO projectDTO); |
|
64 |
+ int updateProject(String projectId, UpdateProjectDTO request); |
|
74 | 65 |
|
75 | 66 |
/** |
76 |
- * @param memberId - 사용자 아이디 |
|
77 |
- * @param projectId - 복제할 프로젝트 아이디 |
|
67 |
+ * @param currentProjectId - 복제할 프로젝트 아이디 |
|
68 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
78 | 69 |
* @return 복제 성공 여부 |
79 | 70 |
* |
80 | 71 |
* 프로젝트 복제 |
81 | 72 |
*/ |
82 | 73 |
@Transactional |
83 |
- public int duplicateProject(String memberId, String projectId); |
|
74 |
+ int duplicateProject(String currentProjectId, BaseParam request); |
|
84 | 75 |
|
85 | 76 |
/** |
86 |
- * @param memberId - 사용자 아이디 |
|
87 | 77 |
* @param projectId - 프로젝트 아이디 |
88 |
- * @param projectDTO - 이름 변경 정보를 담은 DTO 객체 |
|
78 |
+ * @param request - 이름 변경 정보를 담은 DTO 객체 |
|
89 | 79 |
* @return 이름 변경 성공 여부 |
90 | 80 |
* |
91 | 81 |
* 프로젝트 이름 변경 |
92 | 82 |
*/ |
93 | 83 |
@Transactional |
94 |
- public int renameProject(String memberId, String projectId, UpdateProjectNameDTO projectDTO); |
|
84 |
+ int renameProject(String projectId, UpdateProjectNameDTO request); |
|
95 | 85 |
|
96 | 86 |
/** |
97 |
- * @param memberId - 사용자 아이디 |
|
98 |
- * @param projectId - 프로젝트 아이디 |
|
87 |
+ * @param projectGroupId - 프로젝트 그룹 아이디 |
|
88 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
99 | 89 |
* @return 프로젝트 삭제 성공 여부 |
100 | 90 |
* |
101 | 91 |
* 프로젝트 삭제 (use_at = 'N') |
102 | 92 |
*/ |
103 | 93 |
@Transactional |
104 |
- public int deleteProject(String memberId, String projectId); |
|
94 |
+ int deleteProject(String projectGroupId, BaseParam request); |
|
105 | 95 |
|
106 | 96 |
/** |
107 |
- * @param memberId - 사용자 아이디 |
|
108 | 97 |
* @param projectId - 복원할 프로젝트 아이디 |
98 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
109 | 99 |
* @return 복원 성공 여부 |
110 | 100 |
* |
111 | 101 |
* 이전 프로젝트 복원 |
112 | 102 |
*/ |
113 | 103 |
@Transactional |
114 |
- public int restoreProject(String memberId, String projectId); |
|
104 |
+ int restoreProject(String projectId, BaseParam request); |
|
115 | 105 |
|
116 | 106 |
/** |
117 |
- * @param memberId - 사용자 아이디 |
|
118 | 107 |
* @param projectId - 복원할 프로젝트 아이디 |
108 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
119 | 109 |
* @return HashMap<String, Object> - 프로젝트 상세 정보를 담은 객체 |
120 | 110 |
* |
121 | 111 |
* 프로젝트 상세 조회 |
122 | 112 |
*/ |
123 |
- public HashMap<String, Object> findProject(String memberId, String projectId); |
|
124 |
- |
|
125 |
- /** |
|
126 |
- * @param memberId - 사용자 아이디 |
|
127 |
- * @param searchReqDTO - 프로젝트 목록 검색 조건 |
|
128 |
- * @return HashMap<String, Object> - 프로젝트 목록 정보를 담은 객체 |
|
129 |
- * |
|
130 |
- * 프로젝트 목록 조회 |
|
131 |
- */ |
|
132 |
- public HashMap<String, Object> findAllProjects(String memberId, ProjectSearchReqDTO searchReqDTO); |
|
113 |
+ HashMap<String, Object> findProject(String projectId, BaseParam request); |
|
133 | 114 |
} |
--- src/main/java/kr/co/takensoft/ai/system/project/service/impl/ProjectServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/project/service/impl/ProjectServiceImpl.java
... | ... | @@ -1,5 +1,6 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.project.service.impl; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.common.dto.BaseParam; |
|
3 | 4 |
import kr.co.takensoft.ai.system.common.idgen.service.IdgenService; |
4 | 5 |
import kr.co.takensoft.ai.system.project.dao.ProjectDAO; |
5 | 6 |
import kr.co.takensoft.ai.system.project.dto.*; |
... | ... | @@ -46,22 +47,26 @@ |
46 | 47 |
//private final ProjectLogService projectLogService; |
47 | 48 |
|
48 | 49 |
/** |
49 |
- * @param memberId - 사용자 아이디 |
|
50 |
- * @param projectDTO - 생성할 프로젝트 정보 |
|
50 |
+ * @param request - 생성할 프로젝트 정보 |
|
51 | 51 |
* @return 등록 성공 여부 |
52 | 52 |
* |
53 | 53 |
* 프로젝트 등록 |
54 | 54 |
*/ |
55 | 55 |
@Override |
56 |
- public int saveProject(String memberId, InsertProjectDTO projectDTO) { |
|
56 |
+ public int saveProject(InsertProjectDTO request) { |
|
57 | 57 |
|
58 | 58 |
try { |
59 |
+ System.out.println("프로젝트 서비스 들어옴"); |
|
60 |
+ String memberId = request.getMemberId(); // 사용자 아이디 가져오기 |
|
59 | 61 |
String projectId = projectIdgn.getNextStringId(); // 프로젝트 구분 아이디 생성 |
60 | 62 |
String projectGroupId = projectGroupService.saveProjectGroup(); // 프로젝트 그룹 객체 아이디 가져오기 |
61 | 63 |
String isOwner = "Y"; // 프로젝트 대표자 여부 'Y' |
64 |
+ |
|
62 | 65 |
projectMemberService.saveProjectMember(projectGroupId, memberId, isOwner); // 프로젝트 참여자 객체 생성 |
63 |
- projectImageService.saveProjectImage(projectId, projectDTO.getImageFileName(), projectDTO.getImageFileUrl()); // 프로젝트 이미지 객체 생성 |
|
64 |
- projectCommentService.saveProjectComment(memberId, projectId, projectDTO.getSummary(), projectDTO.getComment()); // 프로젝트 주석 객체 생성 |
|
66 |
+ System.out.println("이미지 "+ request.getImageFile().getOriginalFilename()); |
|
67 |
+ projectImageService.saveProjectImage(projectId, request.getImageFile()); // 프로젝트 이미지 객체 생성 |
|
68 |
+ projectCommentService.saveProjectComment(memberId, projectId, request.getSummary(), request.getComment()); // 프로젝트 주석 객체 생성 |
|
69 |
+ |
|
65 | 70 |
String projectName = generateProjectNameForMember(memberId); // 프로젝트 이름 생성 |
66 | 71 |
ProjectVO projectVO = new ProjectVO(projectId, projectGroupId, projectName); // 프로젝트 정보 등록 |
67 | 72 |
return projectDAO.saveProject(projectVO); |
... | ... | @@ -80,7 +85,7 @@ |
80 | 85 |
@Override |
81 | 86 |
public String generateProjectNameForMember(String memberId) { |
82 | 87 |
|
83 |
- int memberProjectCount = countCreatedByMember(memberId); // 사용자가 생성한 프로젝트 개수 |
|
88 |
+ int memberProjectCount = projectDAO.countCreatedByMemberId(memberId); // 사용자가 생성한 프로젝트 개수 |
|
84 | 89 |
return "프로젝트 " + numberToAlphabet(memberProjectCount); |
85 | 90 |
} |
86 | 91 |
|
... | ... | @@ -107,39 +112,39 @@ |
107 | 112 |
} |
108 | 113 |
|
109 | 114 |
/** |
110 |
- * @param memberId - 사용자 아이디 |
|
111 |
- * @return 프로젝트 리스트 |
|
115 |
+ * @param request - 프로젝트 목록 검색 조건 |
|
116 |
+ * @return HashMap<String, Object> - 프로젝트 목록 정보를 담은 객체 |
|
112 | 117 |
* |
113 |
- * 사용자가 참여한 프로젝트 목록 조회 |
|
118 |
+ * 프로젝트 목록 조회 |
|
114 | 119 |
*/ |
115 | 120 |
@Override |
116 |
- public List<ProjectDTO> findProjectsByMemberId(String memberId) { |
|
117 |
- return projectDAO.findProjectsByMemberId(memberId); |
|
121 |
+ public HashMap<String, Object> findAllProjects(ProjectSearchReqDTO request) { |
|
122 |
+ |
|
123 |
+ try { |
|
124 |
+ List<ProjectDTO> projectDTOS = projectDAO.findAllProjects(request) |
|
125 |
+ .stream().map(ProjectDTO::from).collect(Collectors.toList()); // 프로젝트 목록 조회 |
|
126 |
+ HashMap<String, Object> result = new HashMap<>(); // 응답 결과 담을 객체 생성 |
|
127 |
+ result.put("projects", projectDTOS); // 프로젝트 목록을 결과에 담기 |
|
128 |
+ return result; |
|
129 |
+ } |
|
130 |
+ catch (Exception e) { |
|
131 |
+ e.printStackTrace(); |
|
132 |
+ throw e; |
|
133 |
+ } |
|
118 | 134 |
} |
119 | 135 |
|
120 | 136 |
/** |
121 |
- * @param memberId - 사용자 아이디 |
|
122 |
- * @return 사용자가 생성한 프로젝트 개수 |
|
123 |
- * |
|
124 |
- * 사용자가 생성한 프로젝트 개수 조회 |
|
125 |
- */ |
|
126 |
- @Override |
|
127 |
- public int countCreatedByMember(String memberId) { |
|
128 |
- return projectDAO.countCreatedByMemberId(memberId); |
|
129 |
- } |
|
130 |
- |
|
131 |
- /** |
|
132 |
- * @param memberId - 사용자 아이디 |
|
133 | 137 |
* @param projectId - 수정 프로젝트 아이디 |
134 |
- * @param projectDTO - 수정 프로젝트 정보를 담은 DTO 객체 |
|
138 |
+ * @param request - 수정 프로젝트 정보를 담은 DTO 객체 |
|
135 | 139 |
* @return 수정 성공 여부 |
136 | 140 |
* |
137 | 141 |
* 프로젝트 정보 수정 |
138 | 142 |
*/ |
139 | 143 |
@Override |
140 | 144 |
@Transactional |
141 |
- public int updateProject(String memberId, String projectId, UpdateProjectDTO projectDTO) { |
|
145 |
+ public int updateProject(String projectId, UpdateProjectDTO request) { |
|
142 | 146 |
try { |
147 |
+ String memberId = request.getMemberId(); // 사용자 아이디 가져오기 |
|
143 | 148 |
ProjectVO projectVO = projectDAO.findById(projectId) |
144 | 149 |
.orElseThrow(() -> new IllegalArgumentException("프로젝트가 존재하지 않습니다.")); // 기존 프로젝트 가져오기 |
145 | 150 |
if(!projectVO.getIsMain().equals("Y")) { // 기존 프로젝트 대표 여부 확인하기 |
... | ... | @@ -150,8 +155,8 @@ |
150 | 155 |
projectDAO.unsetProjectMain(projectVO.getProjectGroupId()); // 기존 프로젝트를 대표 프로젝트 해제 |
151 | 156 |
|
152 | 157 |
String updateProjectId = projectIdgn.getNextStringId(); // 프로젝트 구분 아이디 생성 |
153 |
- projectImageService.saveProjectImage(updateProjectId, projectDTO.getImageFileName(), projectDTO.getImageFileUrl()); // 프로젝트 이미지 객체 생성 |
|
154 |
- projectCommentService.saveProjectComment(memberId, updateProjectId, projectDTO.getSummary(), projectDTO.getComment()); // 프로젝트 주석 객체 생성 |
|
158 |
+ projectImageService.saveProjectImage(projectId, request.getImageFile()); // 프로젝트 이미지 객체 생성 |
|
159 |
+ projectCommentService.saveProjectComment(memberId, updateProjectId, request.getSummary(), request.getComment()); // 프로젝트 주석 객체 생성 |
|
155 | 160 |
String projectName = projectVO.getProjectName(); // 기존 프로젝트 이름 가져오기 |
156 | 161 |
ProjectVO updateProjectVO = new ProjectVO(updateProjectId, projectGroupId, projectName); // 프로젝트 정보 등록(새로운 버전) |
157 | 162 |
return projectDAO.saveProject(updateProjectVO); |
... | ... | @@ -162,16 +167,17 @@ |
162 | 167 |
} |
163 | 168 |
|
164 | 169 |
/** |
165 |
- * @param memberId - 사용자 아이디 |
|
166 | 170 |
* @param currentProjectId - 복제할 프로젝트 아이디 |
171 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
167 | 172 |
* @return 복제 성공 여부 |
168 | 173 |
* |
169 | 174 |
* 프로젝트 복제 |
170 | 175 |
*/ |
171 | 176 |
@Override |
172 | 177 |
@Transactional |
173 |
- public int duplicateProject(String memberId, String currentProjectId) { |
|
178 |
+ public int duplicateProject(String currentProjectId, BaseParam request) { |
|
174 | 179 |
try { |
180 |
+ String memberId = request.getMemberId(); // 사용자 아이디 가져오기 |
|
175 | 181 |
ProjectVO currentProjectVO = projectDAO.findById(currentProjectId) |
176 | 182 |
.orElseThrow(() -> new IllegalArgumentException("프로젝트가 존재하지 않습니다.")); // 기존 프로젝트 가져오기 |
177 | 183 |
String currentProjectGroupId = currentProjectVO.getProjectGroupId(); // 기존 프로젝트 그룹 아이디 가져오기 |
... | ... | @@ -181,10 +187,12 @@ |
181 | 187 |
String projectGroupId = projectGroupService.saveProjectGroup(); // 복제 프로젝트 그룹 객체 아이디 가져오기 |
182 | 188 |
String isOwner = "Y"; // 프로젝트 대표자 여부 'Y' |
183 | 189 |
projectMemberService.saveProjectMember(projectGroupId, memberId, isOwner); // 복제 프로젝트 참여자 객체 생성 |
190 |
+ |
|
184 | 191 |
ProjectImageVO imageVO = projectImageService.findImage(currentProjectVO.getImageId()); // 기존 프로젝트 이미지 가져오기 |
185 | 192 |
ProjectCommentVO commentVO = projectCommentService.findComment(currentProjectVO.getCommentId()); // 기존 프로젝트 주석 가져오기 |
186 |
- projectImageService.saveProjectImage(projectId, imageVO.getFileName(), imageVO.getFileUrl()); // 복제 프로젝트 이미지 객체 생성(기존 프로젝트 이미지 복사) |
|
193 |
+ projectImageService.copyProjectImage(projectId, imageVO.getFileName(), imageVO.getFileUrl()); // 복제 프로젝트 이미지 객체 생성(기존 프로젝트 이미지 복사) |
|
187 | 194 |
projectCommentService.saveProjectComment(memberId, projectId, commentVO.getSummary(), commentVO.getComment()); // 복제 프로젝트 주석 객체 생성(기존 프로젝트 주석 복사) |
195 |
+ |
|
188 | 196 |
String projectName = ""; |
189 | 197 |
if(currentProjectVO.getIsMain().equals("Y")){ // 대표 프로젝트를 복제하는 경우 이름 생성 |
190 | 198 |
projectName = "[복사본] " + currentProjectVO.getProjectName(); |
... | ... | @@ -201,22 +209,22 @@ |
201 | 209 |
} |
202 | 210 |
|
203 | 211 |
/** |
204 |
- * @param memberId - 사용자 아이디 |
|
205 | 212 |
* @param projectId - 프로젝트 아이디 |
206 |
- * @param projectDTO - 이름 변경 정보를 담은 DTO 객체 |
|
213 |
+ * @param request - 이름 변경 정보를 담은 DTO 객체 |
|
207 | 214 |
* @return 이름 변경 성공 여부 |
208 | 215 |
* |
209 | 216 |
* 프로젝트 이름 변경 |
210 | 217 |
*/ |
211 | 218 |
@Override |
212 | 219 |
@Transactional |
213 |
- public int renameProject(String memberId, String projectId, UpdateProjectNameDTO projectDTO) { |
|
220 |
+ public int renameProject(String projectId, UpdateProjectNameDTO request) { |
|
214 | 221 |
try { |
222 |
+ String memberId = request.getMemberId(); // 사용자 아이디 가져오기 |
|
215 | 223 |
ProjectVO projectVO = projectDAO.findById(projectId) |
216 | 224 |
.orElseThrow(() -> new IllegalArgumentException("프로젝트가 존재하지 않습니다.")); // 프로젝트 가져오기 |
217 | 225 |
String projectGroupId = projectVO.getProjectGroupId(); // 프로젝트 그룹 아이디 가져오기 |
218 | 226 |
projectMemberService.validateProjectMember(projectGroupId, memberId); // 프로젝트 참여자 존재 여부 검증 |
219 |
- return projectDAO.updateProjectName(projectId, projectDTO.getProjectName()); // 프로젝트 이름 변경 |
|
227 |
+ return projectDAO.updateProjectName(projectId, request.getProjectName()); // 프로젝트 이름 변경 |
|
220 | 228 |
} catch (Exception e) { |
221 | 229 |
e.printStackTrace(); |
222 | 230 |
return -1; |
... | ... | @@ -224,18 +232,19 @@ |
224 | 232 |
} |
225 | 233 |
|
226 | 234 |
/** |
227 |
- * @param memberId - 사용자 아이디 |
|
228 | 235 |
* @param projectGroupId - 프로젝트 그룹 아이디 |
236 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
229 | 237 |
* @return 프로젝트 삭제 성공 여부 |
230 | 238 |
* |
231 | 239 |
* 프로젝트 삭제 (use_at = 'N') |
232 | 240 |
*/ |
233 | 241 |
@Override |
234 | 242 |
@Transactional |
235 |
- public int deleteProject(String memberId, String projectGroupId) { |
|
243 |
+ public int deleteProject(String projectGroupId, BaseParam request) { |
|
236 | 244 |
try { |
245 |
+ String memberId = request.getMemberId(); // 사용자 아이디 가져오기 |
|
237 | 246 |
projectGroupService.validateExistence(projectGroupId); // 프로젝트 그룹 존재 여부 검증 |
238 |
- projectMemberService.validateProjectMember(projectGroupId, memberId); // 프로젝트 참여자 존재 여부 검증 |
|
247 |
+ projectMemberService.validateProjectOwner(projectGroupId, memberId); // 프로젝트 참여자 존재 여부 검증 |
|
239 | 248 |
projectGroupService.deleteProjectGroup(projectGroupId); // 프로젝트 그룹 삭제(use_at = 'N') |
240 | 249 |
return projectDAO.deactivateProjectsByGroupId(projectGroupId); // 프로젝트 삭제(use_at = 'N') |
241 | 250 |
} catch (Exception e) { |
... | ... | @@ -245,20 +254,22 @@ |
245 | 254 |
} |
246 | 255 |
|
247 | 256 |
/** |
248 |
- * @param memberId - 사용자 아이디 |
|
249 | 257 |
* @param projectId - 복원할 프로젝트 아이디 |
258 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
250 | 259 |
* @return 복원 성공 여부 |
251 | 260 |
* |
252 | 261 |
* 이전 프로젝트 복원 |
253 | 262 |
*/ |
254 | 263 |
@Override |
255 | 264 |
@Transactional |
256 |
- public int restoreProject(String memberId, String projectId) { |
|
265 |
+ public int restoreProject(String projectId, BaseParam request) { |
|
257 | 266 |
try { |
267 |
+ String memberId = request.getMemberId(); // 사용자 아이디 가져오기 |
|
258 | 268 |
ProjectVO projectVO = projectDAO.findById(projectId) |
259 | 269 |
.orElseThrow(() -> new IllegalArgumentException("프로젝트가 존재하지 않습니다.")); // 프로젝트 가져오기 |
260 | 270 |
String projectGroupId = projectVO.getProjectGroupId(); // 프로젝트 그룹 아이디 가져오기 |
261 | 271 |
projectMemberService.validateProjectMember(projectGroupId, memberId); // 프로젝트 참여자 존재 여부 검증 |
272 |
+ |
|
262 | 273 |
projectDAO.unsetProjectMain(projectGroupId); // 현재 프로젝트 대표 프로젝트 해제 |
263 | 274 |
projectDAO.setProjectMain(projectId); // 복원할 프로젝트를 대표 프로젝트로 설정 |
264 | 275 |
return projectDAO.deactivateProjectsCreatedAfter(projectGroupId, projectId); // 복원할 프로젝트 이후에 생성된 프로젝트 삭제 |
... | ... | @@ -269,55 +280,36 @@ |
269 | 280 |
} |
270 | 281 |
|
271 | 282 |
/** |
272 |
- * @param memberId - 사용자 아이디 |
|
273 | 283 |
* @param projectId - 복원할 프로젝트 아이디 |
284 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
274 | 285 |
* @return HashMap<String, Object> - 프로젝트 상세 정보를 담은 객체 |
275 | 286 |
* |
276 | 287 |
* 프로젝트 상세 조회 |
277 | 288 |
*/ |
278 | 289 |
@Override |
279 |
- public HashMap<String, Object> findProject(String memberId, String projectId) { |
|
290 |
+ public HashMap<String, Object> findProject(String projectId, BaseParam request) { |
|
280 | 291 |
try { |
292 |
+ String memberId = request.getMemberId(); // 사용자 아이디 가져오기 |
|
281 | 293 |
HashMap<String, Object> result = new HashMap<>(); |
282 | 294 |
ProjectVO projectVO = projectDAO.findById(projectId) |
283 | 295 |
.orElseThrow(() -> new IllegalArgumentException("프로젝트가 존재하지 않습니다.")); // 프로젝트 가져오기 |
284 | 296 |
String projectGroupId = projectVO.getProjectGroupId(); // 프로젝트 그룹 아이디 가져오기 |
297 |
+ |
|
285 | 298 |
projectMemberService.validateProjectMember(projectGroupId, memberId); // 프로젝트 참여자 존재 여부 검증 |
286 | 299 |
List<ProjectMemberVO> projectMemberVOS = projectMemberService.findProjectMembers(projectGroupId); // 프로젝트 참여자 목록 가져오기 |
300 |
+ |
|
287 | 301 |
ProjectImageVO imageVO = projectImageService.findImage(projectVO.getImageId()); // 프로젝트 이미지 가져오기 |
288 | 302 |
ProjectCommentVO commentVO = projectCommentService.findComment(projectVO.getCommentId()); // 프로젝트 주석 가져오기 |
289 | 303 |
List<ProjectMemberDTO> projectMemberDTOS = projectMemberVOS.stream() |
290 | 304 |
.map(ProjectMemberDTO::from).collect(Collectors.toList()); // 프로젝트 참여자 목록 dto 객체에 담기 |
305 |
+ |
|
306 |
+ // 응답 결과 생성하기 |
|
291 | 307 |
result.put("project", ProjectDTO.from(projectVO)); |
292 | 308 |
result.put("projectMember", projectMemberDTOS); |
293 | 309 |
result.put("projectComment", ProjectCommentDTO.from(commentVO)); |
294 | 310 |
result.put("projectImage", ProjectImageDTO.from(imageVO)); |
295 | 311 |
return result; // 프로젝트 상세 조회 결과 응답 |
296 | 312 |
} catch (Exception e) { |
297 |
- e.printStackTrace(); |
|
298 |
- throw e; |
|
299 |
- } |
|
300 |
- } |
|
301 |
- |
|
302 |
- /** |
|
303 |
- * @param memberId - 사용자 아이디 |
|
304 |
- * @param searchReqDTO - 프로젝트 목록 검색 조건 |
|
305 |
- * @return HashMap<String, Object> - 프로젝트 목록 정보를 담은 객체 |
|
306 |
- * |
|
307 |
- * 프로젝트 목록 조회 |
|
308 |
- */ |
|
309 |
- @Override |
|
310 |
- public HashMap<String, Object> findAllProjects(String memberId, ProjectSearchReqDTO searchReqDTO) { |
|
311 |
- |
|
312 |
- try { |
|
313 |
- HashMap<String, Object> result = new HashMap<>(); |
|
314 |
- searchReqDTO.setMemberId(memberId); // 검색 조건에 사용자 아이디 추가 |
|
315 |
- List<ProjectDTO> projectDTOS = projectDAO.findAllProjects(searchReqDTO) |
|
316 |
- .stream().map(ProjectDTO::from).collect(Collectors.toList()); // 프로젝트 목록 조회 |
|
317 |
- result.put("projects", projectDTOS); // 프로젝트 목록을 결과에 담기 |
|
318 |
- return result; |
|
319 |
- } |
|
320 |
- catch (Exception e) { |
|
321 | 313 |
e.printStackTrace(); |
322 | 314 |
throw e; |
323 | 315 |
} |
--- src/main/java/kr/co/takensoft/ai/system/project/web/ProjectController.java
+++ src/main/java/kr/co/takensoft/ai/system/project/web/ProjectController.java
... | ... | @@ -1,6 +1,7 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.project.web; |
2 | 2 |
|
3 | 3 |
import kr.co.takensoft.ai.system.auth.vo.MemberVO; |
4 |
+import kr.co.takensoft.ai.system.common.dto.BaseParam; |
|
4 | 5 |
import kr.co.takensoft.ai.system.project.dto.InsertProjectDTO; |
5 | 6 |
import kr.co.takensoft.ai.system.project.dto.ProjectSearchReqDTO; |
6 | 7 |
import kr.co.takensoft.ai.system.project.dto.UpdateProjectDTO; |
... | ... | @@ -10,17 +11,18 @@ |
10 | 11 |
import org.springframework.http.HttpStatus; |
11 | 12 |
import org.springframework.http.ResponseEntity; |
12 | 13 |
import org.springframework.web.bind.annotation.*; |
14 |
+import org.springframework.web.multipart.MultipartFile; |
|
13 | 15 |
|
14 | 16 |
import java.util.HashMap; |
15 | 17 |
|
16 |
-/* |
|
18 |
+/** |
|
17 | 19 |
* @author : 박현정 |
18 | 20 |
* @since : 2025.07.09 |
19 | 21 |
* @modification |
20 | 22 |
* since | author | description |
21 | 23 |
* 2025.07.09 | 박현정 | 최초 등록 |
22 | 24 |
* |
23 |
- * 사용자 정보 관련 서비스 |
|
25 |
+ * 프로젝트 관련 Controller |
|
24 | 26 |
*/ |
25 | 27 |
@RestController |
26 | 28 |
@RequiredArgsConstructor |
... | ... | @@ -28,130 +30,116 @@ |
28 | 30 |
public class ProjectController { |
29 | 31 |
|
30 | 32 |
private final ProjectService projectService; |
31 |
- private final String MEMBER_ID = "test"; |
|
32 | 33 |
|
33 | 34 |
/** |
34 |
- * @param insertProjectDTO - 생성할 프로젝트 정보 |
|
35 |
+// * @param request - 생성할 프로젝트 정보 |
|
35 | 36 |
* @return ResponseEntity - 프로젝트 등록 결과를 포함하는 응답 |
36 | 37 |
* |
37 | 38 |
* 프로젝트 등록 |
38 | 39 |
*/ |
39 | 40 |
@PostMapping("/saveProject.json") |
40 |
- public ResponseEntity<?> saveProject(@RequestBody InsertProjectDTO insertProjectDTO) { |
|
41 |
+ public ResponseEntity<?> saveProject( |
|
42 |
+ @ModelAttribute InsertProjectDTO request) { |
|
41 | 43 |
HashMap<String, Object> result = new HashMap<>(); |
42 |
- String memberId = MEMBER_ID; |
|
43 |
- result.put("result", projectService.saveProject(memberId, insertProjectDTO)); |
|
44 |
+ System.out.println("컨트롤러 이미지 파일: " + request.getImageFile().getOriginalFilename()); |
|
45 |
+ result.put("result", projectService.saveProject(request)); |
|
44 | 46 |
return new ResponseEntity<>(result, HttpStatus.OK); |
45 | 47 |
} |
46 | 48 |
|
47 | 49 |
/** |
48 |
- * @return ResponseEntity - 사용자가 참여한 프로젝트 목록을 포함하는 응답 |
|
49 |
- * |
|
50 |
- * 사용자가 참여한 프로젝트 목록 조회 |
|
51 |
- */ |
|
52 |
- @PostMapping("/findAllByMemberId.json") |
|
53 |
- public ResponseEntity<?> findAllByMemberId() { |
|
54 |
- HashMap<String, Object> result = new HashMap<>(); |
|
55 |
- String memberId = MEMBER_ID; |
|
56 |
- result.put("result", projectService.findProjectsByMemberId(memberId)); |
|
57 |
- return new ResponseEntity<>(result, HttpStatus.OK); |
|
58 |
- } |
|
59 |
- |
|
60 |
- /** |
|
61 |
- * @param projectId - 수정 프로젝트 아이디 |
|
62 |
- * @param updateProjectDTO - 수정 프로젝트 정보 |
|
63 |
- * @return ResponseEntity - 프로젝트 정보 수정 처리 결과를 포함하는 응답 |
|
64 |
- * |
|
65 |
- * 프로젝트 정보 수정 |
|
66 |
- */ |
|
67 |
- @PostMapping("/{projectId}/updateProject.json") |
|
68 |
- public ResponseEntity<?> updateCategory(@PathVariable String projectId, @RequestBody UpdateProjectDTO updateProjectDTO) { |
|
69 |
- HashMap<String, Object> result = new HashMap<>(); |
|
70 |
- String memberId = MEMBER_ID; |
|
71 |
- result.put("result", projectService.updateProject(memberId, projectId, updateProjectDTO)); |
|
72 |
- return new ResponseEntity<>(result, HttpStatus.OK); |
|
73 |
- } |
|
74 |
- |
|
75 |
- /** |
|
76 |
- * @param projectId - 복제할 프로젝트 아이디 |
|
77 |
- * @return ResponseEntity - 프로젝트 복제 결과를 포함하는 응답 |
|
78 |
- * |
|
79 |
- * 프로젝트 복제 |
|
80 |
- */ |
|
81 |
- @PostMapping("/{projectId}/duplicateProject.json") |
|
82 |
- public ResponseEntity<?> duplicateProject(@PathVariable String projectId) { |
|
83 |
- HashMap<String, Object> result = new HashMap<>(); |
|
84 |
- String memberId = MEMBER_ID; |
|
85 |
- result.put("result", projectService.duplicateProject(memberId, projectId)); |
|
86 |
- return new ResponseEntity<>(result, HttpStatus.OK); |
|
87 |
- } |
|
88 |
- |
|
89 |
- /** |
|
90 |
- * @param projectId - 이름 변경할 프로젝트 아이디 |
|
91 |
- * @return ResponseEntity - 프로젝트 이름 수정 결과를 포함하는 응답 |
|
92 |
- * |
|
93 |
- * 프로젝트 이름 변경 |
|
94 |
- */ |
|
95 |
- @PostMapping("/{projectId}/renameProject.json") |
|
96 |
- public ResponseEntity<?> renameProject(@PathVariable String projectId, @RequestBody UpdateProjectNameDTO updateProjectNameDTO) { |
|
97 |
- HashMap<String, Object> result = new HashMap<>(); |
|
98 |
- String memberId = MEMBER_ID; |
|
99 |
- result.put("result", projectService.renameProject(memberId, projectId, updateProjectNameDTO)); |
|
100 |
- return new ResponseEntity<>(result, HttpStatus.OK); |
|
101 |
- } |
|
102 |
- |
|
103 |
- /** |
|
104 |
- * @param projectGroupId - 삭제할 프로젝트 그룹 아이디 |
|
105 |
- * @return ResponseEntity - 프로젝트 삭제 결과를 포함하는 응답 |
|
106 |
- * |
|
107 |
- * 프로젝트 삭제 (use_at = 'N') |
|
108 |
- */ |
|
109 |
- @PostMapping("/{projectGroupId}/deleteProject.json") |
|
110 |
- public ResponseEntity<?> deleteProject(@PathVariable String projectGroupId) { |
|
111 |
- HashMap<String, Object> result = new HashMap<>(); |
|
112 |
- String memberId = MEMBER_ID; |
|
113 |
- result.put("result", projectService.deleteProject(memberId, projectGroupId)); |
|
114 |
- return new ResponseEntity<>(result, HttpStatus.OK); |
|
115 |
- } |
|
116 |
- |
|
117 |
- /** |
|
118 |
- * @param projectId - 복원할 프로젝트 아이디 |
|
119 |
- * @return ResponseEntity - 프로젝트 복원 결과를 포함하는 응답 |
|
120 |
- * |
|
121 |
- * 프로젝트 이전 버전 복원 |
|
122 |
- */ |
|
123 |
- @PostMapping("/{projectId}/restoreProject.json") |
|
124 |
- public ResponseEntity<?> restoreProject(@PathVariable String projectId) { |
|
125 |
- HashMap<String, Object> result = new HashMap<>(); |
|
126 |
- String memberId = MEMBER_ID; |
|
127 |
- result.put("result", projectService.restoreProject(memberId, projectId)); |
|
128 |
- return new ResponseEntity<>(result, HttpStatus.OK); |
|
129 |
- } |
|
130 |
- |
|
131 |
- /** |
|
132 |
- * @param projectId - 프로젝트 아이디 |
|
133 |
- * @return ResponseEntity - 프로젝트 상세 조회 정보를 포함하는 응답 |
|
134 |
- * |
|
135 |
- * 프로젝트 상세 조회 |
|
136 |
- */ |
|
137 |
- @PostMapping("/{projectId}/findProject.json") |
|
138 |
- public ResponseEntity<?> findProject(@PathVariable String projectId) { |
|
139 |
- HashMap<String, Object> result = new HashMap<>(); |
|
140 |
- String memberId = MEMBER_ID; |
|
141 |
- result.put("result", projectService.findProject(memberId, projectId)); |
|
142 |
- return new ResponseEntity<>(result, HttpStatus.OK); |
|
143 |
- } |
|
144 |
- |
|
145 |
- /** |
|
50 |
+ * @param request - 프로젝트 검색 조건을 담은 DTO 객체 |
|
146 | 51 |
* @return ResponseEntity - 프로젝트 목록 정보를 포함하는 응답 |
147 | 52 |
* |
148 | 53 |
* 프로젝트 목록 조회 |
149 | 54 |
*/ |
150 | 55 |
@PostMapping("/findAllProjects.json") |
151 |
- public ResponseEntity<?> findAllProjects(@RequestBody ProjectSearchReqDTO projectSearchReqDTO) { |
|
56 |
+ public ResponseEntity<?> findAllProjects(@RequestBody ProjectSearchReqDTO request) { |
|
152 | 57 |
HashMap<String, Object> result = new HashMap<>(); |
153 |
- String memberId = MEMBER_ID; |
|
154 |
- result.put("result", projectService.findAllProjects(memberId, projectSearchReqDTO)); |
|
58 |
+ result.put("result", projectService.findAllProjects(request)); |
|
59 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
60 |
+ } |
|
61 |
+ |
|
62 |
+ /** |
|
63 |
+ * @param projectId - 수정 프로젝트 아이디 |
|
64 |
+ * @param request - 수정 프로젝트 정보 |
|
65 |
+ * @return ResponseEntity - 프로젝트 정보 수정 처리 결과를 포함하는 응답 |
|
66 |
+ * |
|
67 |
+ * 프로젝트 정보 수정 |
|
68 |
+ */ |
|
69 |
+ @PostMapping("/{projectId}/updateProject.json") |
|
70 |
+ public ResponseEntity<?> updateCategory(@PathVariable String projectId, @RequestBody UpdateProjectDTO request) { |
|
71 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
72 |
+ result.put("result", projectService.updateProject(projectId, request)); |
|
73 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
74 |
+ } |
|
75 |
+ |
|
76 |
+ /** |
|
77 |
+ * @param projectId - 복제할 프로젝트 아이디 |
|
78 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
79 |
+ * @return ResponseEntity - 프로젝트 복제 결과를 포함하는 응답 |
|
80 |
+ * |
|
81 |
+ * 프로젝트 복제 |
|
82 |
+ */ |
|
83 |
+ @PostMapping("/{projectId}/duplicateProject.json") |
|
84 |
+ public ResponseEntity<?> duplicateProject(@PathVariable String projectId, @RequestBody BaseParam request) { |
|
85 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
86 |
+ result.put("result", projectService.duplicateProject(projectId, request)); |
|
87 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
88 |
+ } |
|
89 |
+ |
|
90 |
+ /** |
|
91 |
+ * @param projectId - 이름 변경할 프로젝트 아이디 |
|
92 |
+ * @param request - 변경할 이름을 담은 DTO 객체 |
|
93 |
+ * @return ResponseEntity - 프로젝트 이름 수정 결과를 포함하는 응답 |
|
94 |
+ * |
|
95 |
+ * 프로젝트 이름 변경 |
|
96 |
+ */ |
|
97 |
+ @PostMapping("/{projectId}/renameProject.json") |
|
98 |
+ public ResponseEntity<?> renameProject(@PathVariable String projectId, @RequestBody UpdateProjectNameDTO request) { |
|
99 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
100 |
+ result.put("result", projectService.renameProject(projectId, request)); |
|
101 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
102 |
+ } |
|
103 |
+ |
|
104 |
+ /** |
|
105 |
+ * @param projectGroupId - 삭제할 프로젝트 그룹 아이디 |
|
106 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
107 |
+ * @return ResponseEntity - 프로젝트 삭제 결과를 포함하는 응답 |
|
108 |
+ * |
|
109 |
+ * 프로젝트 삭제 (use_at = 'N') |
|
110 |
+ */ |
|
111 |
+ @PostMapping("/{projectGroupId}/deleteProject.json") |
|
112 |
+ public ResponseEntity<?> deleteProject(@PathVariable String projectGroupId, @RequestBody BaseParam request) { |
|
113 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
114 |
+ result.put("result", projectService.deleteProject(projectGroupId, request)); |
|
115 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
116 |
+ } |
|
117 |
+ |
|
118 |
+ /** |
|
119 |
+ * @param projectId - 복원할 프로젝트 아이디 |
|
120 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
121 |
+ * @return ResponseEntity - 프로젝트 복원 결과를 포함하는 응답 |
|
122 |
+ * |
|
123 |
+ * 프로젝트 이전 버전 복원 |
|
124 |
+ */ |
|
125 |
+ @PostMapping("/{projectId}/restoreProject.json") |
|
126 |
+ public ResponseEntity<?> restoreProject(@PathVariable String projectId, @RequestBody BaseParam request) { |
|
127 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
128 |
+ result.put("result", projectService.restoreProject(projectId, request)); |
|
129 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
130 |
+ } |
|
131 |
+ |
|
132 |
+ /** |
|
133 |
+ * @param projectId - 프로젝트 아이디 |
|
134 |
+ * @param request - 사용자 아이디를 담은 DTO 객체 |
|
135 |
+ * @return ResponseEntity - 프로젝트 상세 조회 정보를 포함하는 응답 |
|
136 |
+ * |
|
137 |
+ * 프로젝트 상세 조회 |
|
138 |
+ */ |
|
139 |
+ @PostMapping("/{projectId}/findProject.json") |
|
140 |
+ public ResponseEntity<?> findProject(@PathVariable String projectId, @RequestBody BaseParam request) { |
|
141 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
142 |
+ result.put("result", projectService.findProject(projectId, request)); |
|
155 | 143 |
return new ResponseEntity<>(result, HttpStatus.OK); |
156 | 144 |
} |
157 | 145 |
} |
--- src/main/java/kr/co/takensoft/ai/system/projectImage/service/ProjectImageService.java
+++ src/main/java/kr/co/takensoft/ai/system/projectImage/service/ProjectImageService.java
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 |
|
3 | 3 |
import kr.co.takensoft.ai.system.projectImage.vo.ProjectImageVO; |
4 | 4 |
import org.springframework.transaction.annotation.Transactional; |
5 |
+import org.springframework.web.multipart.MultipartFile; |
|
5 | 6 |
|
6 | 7 |
/** |
7 | 8 |
* @author 박현정 |
... | ... | @@ -16,14 +17,13 @@ |
16 | 17 |
|
17 | 18 |
/** |
18 | 19 |
* @param projectId - 프로젝트 아이디 |
19 |
- * @param fileName - 이미지 파일 이름 |
|
20 |
- * @param fileUrl - 이미지 파일 경로 |
|
20 |
+ * @param file - 이미지 파일 |
|
21 | 21 |
* @return 등록 성공 여부 |
22 | 22 |
* |
23 | 23 |
* 프로젝트 이미지 등록 |
24 | 24 |
*/ |
25 | 25 |
@Transactional |
26 |
- public int saveProjectImage(String projectId, String fileName, String fileUrl); |
|
26 |
+ int saveProjectImage(String projectId, MultipartFile file); |
|
27 | 27 |
|
28 | 28 |
/** |
29 | 29 |
* @param imageId - 프로젝트 이미지 아이디 |
... | ... | @@ -31,5 +31,16 @@ |
31 | 31 |
* |
32 | 32 |
* 프로젝트 이미지 정보 조회 |
33 | 33 |
*/ |
34 |
- public ProjectImageVO findImage(String imageId); |
|
34 |
+ ProjectImageVO findImage(String imageId); |
|
35 |
+ |
|
36 |
+ /** |
|
37 |
+ * @param projectId - 프로젝트 아이디 |
|
38 |
+ * @param fileName - 이미지 파일 이름 |
|
39 |
+ * @param fileUrl - 이미지 파일 경로 |
|
40 |
+ * @return 복사 성공 여부 |
|
41 |
+ * |
|
42 |
+ * 프로젝트 이미지 복사 |
|
43 |
+ */ |
|
44 |
+ @Transactional |
|
45 |
+ int copyProjectImage(String projectId, String fileName, String fileUrl); |
|
35 | 46 |
} |
--- src/main/java/kr/co/takensoft/ai/system/projectImage/service/impl/ProjectImageServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/projectImage/service/impl/ProjectImageServiceImpl.java
... | ... | @@ -9,6 +9,10 @@ |
9 | 9 |
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl; |
10 | 10 |
import org.springframework.stereotype.Service; |
11 | 11 |
import org.springframework.transaction.annotation.Transactional; |
12 |
+import org.springframework.web.multipart.MultipartFile; |
|
13 |
+ |
|
14 |
+import java.io.File; |
|
15 |
+import java.util.UUID; |
|
12 | 16 |
|
13 | 17 |
/** |
14 | 18 |
* @author : 박현정 |
... | ... | @@ -25,21 +29,46 @@ |
25 | 29 |
|
26 | 30 |
private final ProjectImageDAO projectImageDAO; |
27 | 31 |
private final IdgenService projectImageIdgn; |
32 |
+ private static final String SAVE_DIR = System.getProperty("user.dir") + "/images/"; // 실제 저장 경로 (물리 경로) |
|
33 |
+ private static final String ACCESS_URL_PREFIX = "/static/images/"; // 브라우저가 접근할 경로 (URL 경로) |
|
28 | 34 |
|
29 | 35 |
/** |
30 | 36 |
* @param projectId - 프로젝트 아이디 |
31 |
- * @param fileName - 이미지 파일 이름 |
|
32 |
- * @param fileUrl - 이미지 파일 경로 |
|
37 |
+ * @param file - 이미지 파일 |
|
33 | 38 |
* @return 등록 성공 여부 |
34 | 39 |
* |
35 | 40 |
* 프로젝트 이미지 등록 |
36 | 41 |
*/ |
37 | 42 |
@Override |
38 |
- public int saveProjectImage(String projectId, String fileName, String fileUrl) { |
|
43 |
+ public int saveProjectImage(String projectId, MultipartFile file) { |
|
39 | 44 |
|
40 |
- String projectImageId = projectImageIdgn.getNextStringId(); // 프로젝트 주석 구분 아이디 생성 |
|
41 |
- ProjectImageVO projectImageVO = new ProjectImageVO(projectImageId, projectId, fileName, fileUrl); // 주석 정보 등록 |
|
42 |
- return projectImageDAO.saveProjectImage(projectImageVO); |
|
45 |
+ if(file.isEmpty()) { |
|
46 |
+ System.out.println("파일이 없음"); |
|
47 |
+ return -1; // 파일 비어있음 오류 |
|
48 |
+ } |
|
49 |
+ |
|
50 |
+ try { |
|
51 |
+ String originalName = file.getOriginalFilename(); // 업로드 한 파일 이름 |
|
52 |
+ String uuid = UUID.randomUUID().toString(); // UUID 생성 |
|
53 |
+ String newFileName = uuid + '_' + originalName; // 서버에 저장할 파일명 새성 |
|
54 |
+ |
|
55 |
+ File directory = new File(SAVE_DIR); // 서버에 저장할 디렉터리 생성 |
|
56 |
+ if(!directory.exists()) { |
|
57 |
+ directory.mkdir(); |
|
58 |
+ } |
|
59 |
+ |
|
60 |
+ File dest = new File(SAVE_DIR + newFileName); // 서버에 저장할 파일 경로 지정 |
|
61 |
+ file.transferTo(dest); // 업로드 한 파일을 서버에 복사 |
|
62 |
+ |
|
63 |
+ String projectImageId = projectImageIdgn.getNextStringId(); // 프로젝트 이미지 구분 아이디 생성 |
|
64 |
+ String imageUrl = ACCESS_URL_PREFIX + newFileName; // 브라우저로 접근할 수 있는 이미지 경로 |
|
65 |
+ ProjectImageVO projectImageVO = new ProjectImageVO(projectImageId, projectId, originalName, imageUrl); // 이미지 정보 등록 |
|
66 |
+ System.out.println("이미지 저장 경로: "+ dest.getPath()); |
|
67 |
+ return projectImageDAO.saveProjectImage(projectImageVO); |
|
68 |
+ } catch (Exception e) { |
|
69 |
+ e.printStackTrace(); |
|
70 |
+ return -1; |
|
71 |
+ } |
|
43 | 72 |
} |
44 | 73 |
|
45 | 74 |
/** |
... | ... | @@ -52,4 +81,21 @@ |
52 | 81 |
public ProjectImageVO findImage(String imageId) { |
53 | 82 |
return projectImageDAO.findById(imageId); |
54 | 83 |
} |
84 |
+ |
|
85 |
+ /** |
|
86 |
+ * @param projectId - 프로젝트 아이디 |
|
87 |
+ * @param fileName - 이미지 파일 이름 |
|
88 |
+ * @param fileUrl - 이미지 파일 경로 |
|
89 |
+ * @return 복사 성공 여부 |
|
90 |
+ * |
|
91 |
+ * 프로젝트 이미지 복사 |
|
92 |
+ */ |
|
93 |
+ @Override |
|
94 |
+ @Transactional |
|
95 |
+ public int copyProjectImage(String projectId, String fileName, String fileUrl){ |
|
96 |
+ |
|
97 |
+ String projectImageId = projectImageIdgn.getNextStringId(); // 프로젝트 이미지 구분 아이디 생성 |
|
98 |
+ ProjectImageVO projectImageVO = new ProjectImageVO(projectImageId, projectId, fileName, fileUrl); // 이미지 정보 등록 |
|
99 |
+ return projectImageDAO.saveProjectImage(projectImageVO); |
|
100 |
+ } |
|
55 | 101 |
} |
--- src/main/java/kr/co/takensoft/ai/system/projectMember/dao/ProjectMemberDAO.java
+++ src/main/java/kr/co/takensoft/ai/system/projectMember/dao/ProjectMemberDAO.java
... | ... | @@ -42,4 +42,13 @@ |
42 | 42 |
* 프로젝트 참여자 목록 조회 |
43 | 43 |
*/ |
44 | 44 |
List<ProjectMemberVO> findAllByGroupId(String projectGroupId); |
45 |
+ |
|
46 |
+ /** |
|
47 |
+ * @param projectGroupId - 프로젝트 그룹 아이디 |
|
48 |
+ * @param memberId - 사용자 아이디 |
|
49 |
+ * @return boolean - 프로젝트 대표자 여부 검증 |
|
50 |
+ * |
|
51 |
+ * 프로젝트 대표자 여부 검증 |
|
52 |
+ */ |
|
53 |
+ boolean existsByProjectGroupIdAndMemberIdAndIsOwner(String projectGroupId, String memberId); |
|
45 | 54 |
} |
--- src/main/java/kr/co/takensoft/ai/system/projectMember/service/ProjectMemberService.java
+++ src/main/java/kr/co/takensoft/ai/system/projectMember/service/ProjectMemberService.java
... | ... | @@ -40,4 +40,12 @@ |
40 | 40 |
* 프로젝트 참여자 목록 조회 |
41 | 41 |
*/ |
42 | 42 |
List<ProjectMemberVO> findProjectMembers(String projectGroupId); |
43 |
+ |
|
44 |
+ /** |
|
45 |
+ * @param projectGroupId - 프로젝트 그룹 아이디 |
|
46 |
+ * @param memberId - 사용자 아이디 |
|
47 |
+ * |
|
48 |
+ * 프로젝트 대표자 여부 검증 |
|
49 |
+ */ |
|
50 |
+ void validateProjectOwner(String projectGroupId, String memberId); |
|
43 | 51 |
} |
--- src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
... | ... | @@ -74,4 +74,21 @@ |
74 | 74 |
public List<ProjectMemberVO> findProjectMembers(String projectGroupId) { |
75 | 75 |
return projectMemberDAO.findAllByGroupId(projectGroupId); |
76 | 76 |
} |
77 |
+ |
|
78 |
+ /** |
|
79 |
+ * @param projectGroupId - 프로젝트 그룹 아이디 |
|
80 |
+ * @param memberId - 사용자 아이디 |
|
81 |
+ * |
|
82 |
+ * 프로젝트 대표자 여부 검증 |
|
83 |
+ */ |
|
84 |
+ @Override |
|
85 |
+ public void validateProjectOwner(String projectGroupId, String memberId) { |
|
86 |
+ if(!projectMemberDAO.existsByProjectGroupIdAndMemberIdAndIsOwner(projectGroupId, memberId)){ |
|
87 |
+ try { |
|
88 |
+ throw new IllegalAccessException("이 프로젝트의 대표자가 아닙니다."); |
|
89 |
+ } catch (IllegalAccessException e) { |
|
90 |
+ e.printStackTrace(); |
|
91 |
+ } |
|
92 |
+ } |
|
93 |
+ } |
|
77 | 94 |
} |
--- src/main/resources/application.yml
+++ src/main/resources/application.yml
... | ... | @@ -8,6 +8,10 @@ |
8 | 8 |
secret: 58abbb9886f2b0e3af5f13242d27feedf1ecf59a0eca4996716bc1f8e76b5464 |
9 | 9 |
accessTime: 600000 # 10분 600000 |
10 | 10 |
refreshTime: 86400000 # 24시간 86400000 |
11 |
+ servlet: |
|
12 |
+ multipart: |
|
13 |
+ max-file-size: 50MB |
|
14 |
+ max-request-size: 50MB |
|
11 | 15 |
|
12 | 16 |
# front url |
13 | 17 |
frontUrls: http://localhost:10910/ |
--- src/main/resources/mybatis/mapper/project/project-SQL.xml
+++ src/main/resources/mybatis/mapper/project/project-SQL.xml
... | ... | @@ -56,29 +56,6 @@ |
56 | 56 |
|
57 | 57 |
<!-- |
58 | 58 |
작 성 자 : 박현정 |
59 |
- 작 성 일 : 2025.07.11 |
|
60 |
- 내 용 : 사용자가 참여하는 모든 프로젝트 조회 |
|
61 |
- --> |
|
62 |
- <select id="findProjectsByMemberId" resultMap="ProjectMap" parameterType="String"> |
|
63 |
- SELECT |
|
64 |
- p.project_id, |
|
65 |
- p.project_group_id, |
|
66 |
- p.project_name, |
|
67 |
- p.is_main, |
|
68 |
- p.use_at, |
|
69 |
- pm.is_owner, |
|
70 |
- TO_CHAR(p.created_at, 'YYYY-MM-DD HH24:MI') AS created_at, |
|
71 |
- TO_CHAR(p.updated_at, 'YYYY-MM-DD HH24:MI') AS updated_at |
|
72 |
- FROM project_member pm |
|
73 |
- JOIN project p ON pm.project_group_id = p.project_group_id |
|
74 |
- WHERE pm.member_id = #{memberId} |
|
75 |
- AND pm.use_at = 'Y' |
|
76 |
- AND p.use_at = 'Y' |
|
77 |
- AND p.is_main = 'Y' |
|
78 |
- </select> |
|
79 |
- |
|
80 |
- <!-- |
|
81 |
- 작 성 자 : 박현정 |
|
82 | 59 |
작 성 일 : 2025.07.14 |
83 | 60 |
내 용 : 프로젝트 조회 |
84 | 61 |
--> |
... | ... | @@ -234,9 +211,7 @@ |
234 | 211 |
FROM project p |
235 | 212 |
JOIN project_member pm ON p.project_group_id = pm.project_group_id |
236 | 213 |
<where> |
237 |
- <if test="memberId != null"> |
|
238 | 214 |
pm.member_id = #{memberId} |
239 |
- </if> |
|
240 | 215 |
<if test="projectGroupId != null"> |
241 | 216 |
AND p.project_group_id = #{projectGroupId} |
242 | 217 |
</if> |
--- src/main/resources/mybatis/mapper/projectMember/projectMember-SQL.xml
+++ src/main/resources/mybatis/mapper/projectMember/projectMember-SQL.xml
... | ... | @@ -58,17 +58,36 @@ |
58 | 58 |
작 성 일 : 2025.07.10 |
59 | 59 |
내 용 : 프로젝트 참여자 존재 여부 확인 |
60 | 60 |
--> |
61 |
- <select id="existsByProjectGroupIdAndMemberId" resultType="boolean"> |
|
61 |
+ <select id="existsByProjectGroupIdAndMemberId" parameterType="String" resultType="boolean"> |
|
62 | 62 |
SELECT EXISTS ( |
63 | 63 |
SELECT 1 |
64 | 64 |
FROM project_member |
65 | 65 |
WHERE project_group_id = #{projectGroupId} |
66 | 66 |
AND member_id = #{memberId} |
67 |
+ AND use_at = 'Y' |
|
67 | 68 |
) |
68 | 69 |
</select> |
69 | 70 |
|
70 | 71 |
<!-- |
71 | 72 |
작 성 자 : 박현정 |
73 |
+ 작 성 일 : 2025.07.16 |
|
74 |
+ 내 용 : 프로젝트 대표자 여부 확인 |
|
75 |
+ --> |
|
76 |
+ <select id="existsByProjectGroupIdAndMemberIdAndIsOwner" parameterType="String" resultType="boolean"> |
|
77 |
+ SELECT EXISTS ( |
|
78 |
+ SELECT 1 |
|
79 |
+ FROM project_member |
|
80 |
+ WHERE project_group_id = #{projectGroupId} |
|
81 |
+ AND member_id = #{memberId} |
|
82 |
+ AND is_owner = 'Y' |
|
83 |
+ AND use_at = 'Y' |
|
84 |
+ ) |
|
85 |
+ </select> |
|
86 |
+ |
|
87 |
+ |
|
88 |
+ |
|
89 |
+ <!-- |
|
90 |
+ 작 성 자 : 박현정 |
|
72 | 91 |
작 성 일 : 2025.07.15 |
73 | 92 |
내 용 : 프로젝트 참여자 조회 (프로젝트 그룹 아이디로 검색) |
74 | 93 |
--> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?