diff --git a/src/main/java/com/dbnt/kcgfilemanager/config/LogStatus.java b/src/main/java/com/dbnt/kcgfilemanager/config/LogStatus.java index 5e3e1a2..9c4740e 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/config/LogStatus.java +++ b/src/main/java/com/dbnt/kcgfilemanager/config/LogStatus.java @@ -8,22 +8,20 @@ import java.util.HashMap; @AllArgsConstructor @Getter public enum LogStatus { - WRITE("WRITE", "작성"), - MODIFY("MODIFY", "수정"), - MOVE("MOVE", "이동"), - DELETE("DELETE", "삭제"), - FILE_ADD("FILE_ADD", "파일추가"), - FILE_REMOVE("FILE_REMOVE", "파일삭제"), - FILE_DOWN("FILE_DOWN", "파일다운로드"); + WRITE("작성"), + MODIFY("수정"), + MOVE("이동"), + DELETE("삭제"), + FILE_ADD("파일추가"), + FILE_REMOVE("파일삭제"), + FILE_DOWN("파일다운로드"); - private String key; private String value; - public static HashMap getStatusMap(){ HashMap statusMap = new HashMap<>(); for(LogStatus status: LogStatus.values()){ - statusMap.put(status.getKey(), status.getValue()); + statusMap.put(status.name(), status.getValue()); } return statusMap; } diff --git a/src/main/java/com/dbnt/kcgfilemanager/config/SecurityConfig.java b/src/main/java/com/dbnt/kcgfilemanager/config/SecurityConfig.java index d1e95b6..67ea1e4 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/config/SecurityConfig.java +++ b/src/main/java/com/dbnt/kcgfilemanager/config/SecurityConfig.java @@ -33,8 +33,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() // 페이지 권한 설정 - .antMatchers("/board/**").hasRole("MEMBER") // MEMBER, ADMIN만 접근 허용 - .antMatchers("/admin/**").hasRole("ADMIN") // ADMIN만 접근 허용 + .antMatchers("/board/**").hasRole(Role.USER.name()) // USER, ADMIN 접근 허용 + .antMatchers("/admin/**").hasRole(Role.ADMIN.name()) // ADMIN만 접근 허용 .antMatchers("/user/login").permitAll() // 로그인 페이지는 권한 없이 접근 허용 .and() // 로그인 설정 .formLogin() .loginPage("/user/login") // Custom login form 사용 diff --git a/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java b/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java index beb3f95..0abd78c 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java +++ b/src/main/java/com/dbnt/kcgfilemanager/controller/BoardController.java @@ -7,6 +7,7 @@ import com.dbnt.kcgfilemanager.model.UserInfo; import com.dbnt.kcgfilemanager.service.BoardService; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartHttpServletRequest; @@ -62,10 +63,11 @@ public class BoardController { } @GetMapping("/selectBoardContent") - public ModelAndView selectBoardContent(Board content){ + public ModelAndView selectBoardContent(Board content, @AuthenticationPrincipal UserInfo loginUser){ ModelAndView mav = new ModelAndView("board/contentDetail"); Board target = boardService.selectContentByContentSeqAndViewCntUp(content.getContentSeq()); mav.addObject("content", boardService.SelectContentForeignAttribute(target)); + mav.addObject("loginUser", loginUser); return mav; } @GetMapping("/selectBoardLog") @@ -76,6 +78,10 @@ public class BoardController { mav.addObject("logList", boardService.selectContentLog(content.getContentSeq())); return mav; } + @DeleteMapping("/deleteContent") + public Integer deleteContent(Board content, @AuthenticationPrincipal UserInfo loginUser){ + return boardService.deleteContent(content, loginUser); + } @GetMapping("/fileDownload") public void fileDownload(Principal principal, Integer contentSeq, Integer fileSeq, HttpServletRequest request, HttpServletResponse response){ diff --git a/src/main/java/com/dbnt/kcgfilemanager/repository/HashTagLinkRepository.java b/src/main/java/com/dbnt/kcgfilemanager/repository/HashTagLinkRepository.java index 3b61585..5f7c623 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/repository/HashTagLinkRepository.java +++ b/src/main/java/com/dbnt/kcgfilemanager/repository/HashTagLinkRepository.java @@ -3,6 +3,8 @@ package com.dbnt.kcgfilemanager.repository; import com.dbnt.kcgfilemanager.model.HashTagLink; import org.springframework.data.jpa.repository.JpaRepository; -public interface HashTagLinkRepository extends JpaRepository { +import java.util.List; +public interface HashTagLinkRepository extends JpaRepository { + List findByContentSeq(int contentSeq); } diff --git a/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java b/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java index 0de7c19..ac4f566 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java +++ b/src/main/java/com/dbnt/kcgfilemanager/service/BoardService.java @@ -42,7 +42,7 @@ public class BoardService { BoardLog log = new BoardLog(); log.setContentSeq(contentSeq); log.setLogSeq(lastLog == null?1:(lastLog.getLogSeq()+1)); - log.setLogStatus(status.getKey()); + log.setLogStatus(status.name()); log.setDescription(description); log.setCreateId(createId); boardLogRepository.save(log); @@ -126,7 +126,9 @@ public class BoardService { @Transactional public Board selectContentByContentSeqAndViewCntUp(Integer contentSeq) { Board target = boardRepository.findById(contentSeq).orElse(null); - target.setViewCnt(target.getViewCnt()+1); + if(target.getStatus()==null){ + target.setViewCnt(target.getViewCnt()+1); + } return target; } @@ -157,6 +159,32 @@ public class BoardService { return target; } + @Transactional + public Integer deleteContent(Board content, UserInfo user) { + int contentSeq = content.getContentSeq(); + content = boardRepository.findById(contentSeq).orElse(null); + content.setTitle("삭제된 게시물"); + content.setDescription(null); + content.setStatus("D"); + saveBoardLog(contentSeq, LogStatus.DELETE, null, user.getUserId()); + deleteHashTagLink(contentSeq); + deleteFileInfo(contentSeq); + return contentSeq; + } + + private void deleteHashTagLink(int contentSeq){ + List tagLinkList = hashTagLinkRepository.findByContentSeq(contentSeq); + hashTagLinkRepository.deleteAll(tagLinkList); + } + private void deleteFileInfo(int contentSeq){ + List fileInfoList = fileInfoRepository.findByContentSeqOrderByFileSeqAsc(contentSeq); + for(FileInfo fileInfo: fileInfoList){ + File file = new File(fileInfo.getSavePath(), fileInfo.getConversionName()); + file.delete(); + } + fileInfoRepository.deleteAll(fileInfoList); + } + private String makeFilePath(Integer categorySeq){ BoardCategory category = boardCategoryRepository.findById(categorySeq).orElse(null); if(category.getParentSeq()==null){ @@ -169,5 +197,4 @@ public class BoardService { double unitSelector = Math.floor(Math.log(fileSize)/Math.log(1024)); return Math.round((fileSize/Math.pow(1024, unitSelector))*100)/100d+" "+units[(int)unitSelector]; } - } diff --git a/src/main/resources/mybatisMapper/BoardMapper.xml b/src/main/resources/mybatisMapper/BoardMapper.xml index 5941115..fc931bf 100644 --- a/src/main/resources/mybatisMapper/BoardMapper.xml +++ b/src/main/resources/mybatisMapper/BoardMapper.xml @@ -14,7 +14,7 @@ FROM BOARD A INNER JOIN USER_INFO B ON A.CREATE_ID = B.USER_ID - INNER JOIN (SELECT CONTENT_SEQ, MAX(FILE_SEQ) AS FILE_CNT + LEFT OUTER JOIN (SELECT CONTENT_SEQ, MAX(FILE_SEQ) AS FILE_CNT FROM FILE_INFO GROUP BY CONTENT_SEQ ) C ON A.CONTENT_SEQ = C.CONTENT_SEQ @@ -30,11 +30,11 @@ FROM BOARD A INNER JOIN USER_INFO B ON A.CREATE_ID = B.USER_ID - INNER JOIN (SELECT CONTENT_SEQ, MAX(FILE_SEQ) AS FILE_CNT + LEFT OUTER JOIN (SELECT CONTENT_SEQ, MAX(FILE_SEQ) AS FILE_CNT FROM FILE_INFO GROUP BY CONTENT_SEQ ) C ON A.CONTENT_SEQ = C.CONTENT_SEQ - WHERE CATEGORY_SEQ = ${categorySeq} + WHERE A.CATEGORY_SEQ = ${categorySeq} + diff --git a/src/main/resources/templates/admin/userMgt.html b/src/main/resources/templates/admin/userMgt.html index 60b45ef..7e311eb 100644 --- a/src/main/resources/templates/admin/userMgt.html +++ b/src/main/resources/templates/admin/userMgt.html @@ -210,7 +210,7 @@
- +
diff --git a/src/main/resources/templates/board/contentDetail.html b/src/main/resources/templates/board/contentDetail.html index d601e4d..dc0ace7 100644 --- a/src/main/resources/templates/board/contentDetail.html +++ b/src/main/resources/templates/board/contentDetail.html @@ -2,8 +2,9 @@
+
-

+
@@ -11,7 +12,7 @@
-
+
@@ -31,7 +32,7 @@
-
+
@@ -43,4 +44,14 @@
+ +
+
+ +
+
+ +
+
+
\ No newline at end of file diff --git a/src/main/resources/templates/board/contentList.html b/src/main/resources/templates/board/contentList.html index 832b767..82db7cb 100644 --- a/src/main/resources/templates/board/contentList.html +++ b/src/main/resources/templates/board/contentList.html @@ -9,6 +9,8 @@
+ +

diff --git a/src/main/resources/templates/login/signup.html b/src/main/resources/templates/login/signup.html index 7cd7361..793704a 100644 --- a/src/main/resources/templates/login/signup.html +++ b/src/main/resources/templates/login/signup.html @@ -8,8 +8,8 @@
- admin - + admin + member