package kr.itn.itnhub.project; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface ProjectMapper { /** 기관별 연락이력 건수·최근 연락일·보고서 건수. 사업관리 목록에 붙일 값만 모아 한 번에 읽는다. */ List findSideInfo(); List findLogsByOrg(@Param("orgId") Long orgId); int insertLog(@Param("orgId") Long orgId, @Param("contactedOn") String contactedOn, @Param("method") String method, @Param("summary") String summary, @Param("author") String author); int updateLog(@Param("orgId") Long orgId, @Param("id") Long id, @Param("contactedOn") String contactedOn, @Param("method") String method, @Param("summary") String summary); int deleteLog(@Param("orgId") Long orgId, @Param("id") Long id); List findReportsByOrg(@Param("orgId") Long orgId); int insertReport(@Param("orgId") Long orgId, @Param("fileName") String fileName, @Param("contentType") String contentType, @Param("byteSize") long byteSize, @Param("content") byte[] content, @Param("uploadedBy") String uploadedBy); /** 보고서 교체(요구사항 [25]). 새 행을 만들지 않고 같은 자리를 덮어쓴다. */ int updateReport(@Param("orgId") Long orgId, @Param("id") Long id, @Param("fileName") String fileName, @Param("contentType") String contentType, @Param("byteSize") long byteSize, @Param("content") byte[] content, @Param("uploadedBy") String uploadedBy); /** 다운로드용. 파일 내용까지 읽는다. */ ReportContent findReportContent(@Param("orgId") Long orgId, @Param("id") Long id); int deleteReport(@Param("orgId") Long orgId, @Param("id") Long id); /** @param lastContactedOn 연락 이력이 없으면 null */ record ProjectSideInfo(Long orgId, String lastContactedOn, int contactCount, int reportCount) { } record ReportContent(String fileName, String contentType, byte[] content) { } }