박현정 박현정 7 days ago
250804 박현정 피드백 개수 요약 기능 추가
@08f523b087a798f80ec792944ca8cde5cec52f16
src/main/java/kr/co/takensoft/ai/system/feedback/dao/FeedbackDAO.java
--- src/main/java/kr/co/takensoft/ai/system/feedback/dao/FeedbackDAO.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/dao/FeedbackDAO.java
@@ -1,6 +1,8 @@
 package kr.co.takensoft.ai.system.feedback.dao;
 
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackCountDTO;
 import kr.co.takensoft.ai.system.feedback.dto.FeedbackDTO;
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackSummaryDTO;
 import kr.co.takensoft.ai.system.feedback.vo.FeedbackVO;
 import kr.co.takensoft.ai.system.project.vo.ProjectVO;
 import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
@@ -51,4 +53,21 @@
      * 피드백 목록 조회(사용자가 참여하는 모든 프로젝트를 대상으로 함)
      */
     List<FeedbackVO> findAllByMemberId(String memberId);
+
+    /**
+     * @param memberId - 사용자 아이디
+     * @return List<FeedbackCountDTO> - 미확인 피드백 목록 조회 결과
+     *
+     * 피드백 알림 목록 조회 (미확인 피드백 목록 조회)
+     */
+    List<FeedbackCountDTO> countUncheckedFeedbacks(String memberId);
+
+    /**
+     * @param memberId - 사용자 아이디
+     * @return FeedbackSummaryDTO - 피드백 개수 요약 결과
+     *
+     * 일주일 간 피드백 개수 조회
+     */
+    FeedbackSummaryDTO countWeeklyFeedbacks(String memberId);
+
 }
 
src/main/java/kr/co/takensoft/ai/system/feedback/dto/FeedbackCountDTO.java (added)
+++ src/main/java/kr/co/takensoft/ai/system/feedback/dto/FeedbackCountDTO.java
@@ -0,0 +1,26 @@
+package kr.co.takensoft.ai.system.feedback.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author 박현정
+ * @since 2025.08.04
+ * @modification
+ *     since    |    author    | description
+ *  2025.08.04  |    박현정    | 최초 등록
+ *
+ * 피드백 알림 관련 DTO
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class FeedbackCountDTO {
+
+    private String projectGroupId; // 프로젝트 그룹 아이디
+    private String projectName; // 프로젝트 이름
+    private int unCheckedFeedbackCnt; // 미확인 피드백 개수
+}
 
src/main/java/kr/co/takensoft/ai/system/feedback/dto/FeedbackSummaryDTO.java (added)
+++ src/main/java/kr/co/takensoft/ai/system/feedback/dto/FeedbackSummaryDTO.java
@@ -0,0 +1,26 @@
+package kr.co.takensoft.ai.system.feedback.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author 박현정
+ * @since 2025.08.04
+ * @modification
+ *     since    |    author    | description
+ *  2025.08.04  |    박현정    | 최초 등록
+ *
+ * 피드백 개수 요약 관련 DTO
+ */
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class FeedbackSummaryDTO {
+
+    private int totalCount; // 특정 기간 동안 총 피드백 개수
+    private int uncheckedCount; // 특정 기간 동안 미확인 피드백 개수
+    private int checkedCount; // 특정 기간 동안 확인한 피드백 개수
+}
src/main/java/kr/co/takensoft/ai/system/feedback/service/FeedbackService.java
--- src/main/java/kr/co/takensoft/ai/system/feedback/service/FeedbackService.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/service/FeedbackService.java
@@ -1,7 +1,9 @@
 package kr.co.takensoft.ai.system.feedback.service;
 
 import kr.co.takensoft.ai.system.common.dto.BaseParam;
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackCountDTO;
 import kr.co.takensoft.ai.system.feedback.dto.FeedbackDTO;
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackSummaryDTO;
 import kr.co.takensoft.ai.system.feedback.dto.InsertFeedbackDTO;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -45,4 +47,20 @@
      * 피드백 목록 조회(사용자가 참여하는 모든 프로젝트를 대상으로 함)
      */
     List<FeedbackDTO> findAllFeedbacks(BaseParam request);
+
+    /**
+     * @param request - 사용자 아이디를 담은 DTO 객체
+     * @return List<FeedbackCountDTO> - 미확인 피드백 개수를 담은 DTO 객체 리스트
+     *
+     * 피드백 알림 목록 조회 (미확인 피드백 목록 조회)
+     */
+    List<FeedbackCountDTO> getUncheckedFeedbackCountsByProject(BaseParam request);
+
+    /**
+     * @param request - 사용자 아이디를 담은 DTO 객체
+     * @return FeedbackSummaryDTO - 피드백 개수 요약 결과
+     *
+     * 일주일 간 피드백 개수 조회
+     */
+    FeedbackSummaryDTO findFeedbackSummary(BaseParam request);
 }
src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
--- src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/service/impl/FeedbackServiceImpl.java
@@ -4,7 +4,9 @@
 import kr.co.takensoft.ai.system.common.dto.BaseParam;
 import kr.co.takensoft.ai.system.common.idgen.service.IdgenService;
 import kr.co.takensoft.ai.system.feedback.dao.FeedbackDAO;
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackCountDTO;
 import kr.co.takensoft.ai.system.feedback.dto.FeedbackDTO;
+import kr.co.takensoft.ai.system.feedback.dto.FeedbackSummaryDTO;
 import kr.co.takensoft.ai.system.feedback.dto.InsertFeedbackDTO;
 import kr.co.takensoft.ai.system.feedback.service.FeedbackService;
 import kr.co.takensoft.ai.system.feedback.vo.FeedbackVO;
@@ -102,4 +104,28 @@
             throw e;
         }
     }
+
+    /**
+     * @param request - 사용자 아이디를 담은 DTO 객체
+     * @return List<FeedbackCountDTO> - 미확인 피드백 개수를 담은 DTO 객체 리스트
+     *
+     * 피드백 알림 목록 조회 (미확인 피드백 목록 조회)
+     */
+    @Override
+    public List<FeedbackCountDTO> getUncheckedFeedbackCountsByProject(BaseParam request) {
+
+        return feedbackDAO.countUncheckedFeedbacks(request.getMemberId());
+    }
+
+    /**
+     * @param request - 사용자 아이디를 담은 DTO 객체
+     * @return FeedbackSummaryDTO - 피드백 개수 요약 결과
+     *
+     * 일주일 간 피드백 개수 조회
+     */
+    @Override
+    public FeedbackSummaryDTO findFeedbackSummary(BaseParam request) {
+
+        return feedbackDAO.countWeeklyFeedbacks(request.getMemberId());
+    }
 }
src/main/java/kr/co/takensoft/ai/system/feedback/web/FeedbackController.java
--- src/main/java/kr/co/takensoft/ai/system/feedback/web/FeedbackController.java
+++ src/main/java/kr/co/takensoft/ai/system/feedback/web/FeedbackController.java
@@ -68,4 +68,30 @@
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
+    /**
+     * @param request - 사용자 아이디를 담은 DTO 객체
+     * @return ResponseEntity - 미확인 피드백 개수 결과를 포함하는 응답
+     *
+     * 미확인 피드백 목록 조회
+     */
+    @PostMapping("/feedback/findUncheckedFeedbacks.json")
+    public ResponseEntity<?> findUncheckedFeedbacks(@RequestBody BaseParam request) {
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("result", feedbackService.getUncheckedFeedbackCountsByProject(request));
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    /**
+     * @param request - 사용자 아이디를 담은 DTO 객체
+     * @return ResponseEntity - 피드백 개수 요약 결과를 포함하는 응답
+     *
+     * 일주일 간 피드백 개수 조회
+     */
+    @PostMapping("/feedback/findFeedbackSummary.json")
+    public ResponseEntity<?> findFeedbackSummary(@RequestBody BaseParam request) {
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("result", feedbackService.findFeedbackSummary(request));
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
 }
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
+++ src/main/java/kr/co/takensoft/ai/system/projectMember/service/impl/ProjectMemberServiceImpl.java
@@ -39,6 +39,7 @@
 
         try {
             String projectMemberId = projectMemberIdgn.getNextStringId(); // 프로젝트 참여자 구분 아이디 생성
+            System.out.println("프로젝트 참여자 아이디 생성: " + projectMemberId);
             ProjectMemberVO projectMemberVO = new ProjectMemberVO(projectMemberId, projectGroupId, memberId, isOwner);
             return projectMemberDAO.saveProjectMember(projectMemberVO);
         } catch (Exception e) {
src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
--- src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
+++ src/main/resources/mybatis/mapper/feedback/feedback-SQL.xml
@@ -101,6 +101,11 @@
         WHERE f.use_at = 'Y'
     </select>
 
+    <!--
+    작 성 자 : 박현정
+    작 성 일 : 2025.07.16
+    내    용 : 피드백 확인
+    -->
     <update id="setFeedbackCheck" parameterType="String">
         UPDATE feedback
         <set>
@@ -111,4 +116,37 @@
         AND use_at = 'Y'
     </update>
 
+    <!--
+    작 성 자 : 박현정
+    작 성 일 : 2025.08.04
+    내    용 : 확인 안 된 피드백 개수 조회
+    -->
+    <select id="countUncheckedFeedbacks" resultType="FeedbackCountDTO" parameterType="String">
+        SELECT f.project_group_id,
+            p.project_name,
+            COUNT (f.feedback_id) AS un_checked_feedback_cnt
+        FROM feedback f
+        INNER JOIN project_member pm ON f.project_group_id = pm.project_group_id AND pm.member_id = #{memberId}
+        LEFT JOIN project p ON f.project_group_id = p.project_group_id AND p.is_main = 'Y'
+        WHERE f.use_at = 'Y'
+        AND f.is_checked = 'N'
+        GROUP BY f.project_group_id, p.project_name
+    </select>
+
+    <!--
+    작 성 자 : 박현정
+    작 성 일 : 2025.08.04
+    내    용 : 일주일 간 피드백 통계 조회
+    -->
+    <select id="countWeeklyFeedbacks" resultType="FeedbackSummaryDTO" parameterType="String">
+        SELECT
+            COUNT(*) AS total_count,
+            COUNT(CASE WHEN is_checked = 'N' THEN 1 END) AS unchecked_count,
+            COUNT(CASE WHEN is_checked = 'Y' THEN 1 END) AS checked_count
+        FROM feedback f
+        INNER JOIN project_member pm ON f.project_group_id = pm.project_group_id AND pm.member_id = #{memberId}
+        WHERE f.use_at = 'Y'
+        AND f.created_at >= CURRENT_DATE - INTERVAL '7 day'
+    </select>
+
 </mapper>
(파일 끝에 줄바꿈 문자 없음)
Add a comment
List