[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (22)
2021. 4. 12. 18:30ㆍSpring/Practice
1. 문제
- 공지사항의 내용을 등록한 후 바로 동일한 제목과 내용의 공지사항을 등록하는 경우 등록을 막는 API
- 중복의 경우 (조건: 동일 제목, 동일 내용과 등록일이 현재 시간 기준 1분 이내의 경우는 중복으로 판단)
- 예외발생 (DuplicateNoticeException)
2. 풀이
- DuplicateNoticeException.java
package com.example.jpa.sample.notice.exception;
public class DuplicateNoticeException extends RuntimeException {
public DuplicateNoticeException(String message) {
super(message);
}
}
- NoticeRepository.java
package com.example.jpa.sample.notice.repository;
import com.example.jpa.sample.notice.entity.Notice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@Repository
public interface NoticeRepository extends JpaRepository<Notice, Long> {
Optional<List<Notice>> findByIdIn(List<Long> idList);
Optional<List<Notice>> findByTitleAndContentsAndRegDateIsGreaterThanEqual(String title, String contents, LocalDateTime regDate);
int countByTitleAndContentsAndRegDateIsGreaterThanEqual(String title, String contents, LocalDateTime regDate);
}
- ApiNoticeController.java
@RequiredArgsConstructor
@RestController
public class ApiNoticeController {
private final NoticeRepository noticeRepository;
...
@ExceptionHandler(DuplicateNoticeException.class)
public ResponseEntity<String> handlerDuplicateNoticeException(DuplicateNoticeException exception) {
return new ResponseEntity<>(exception.getMessage(), HttpStatus.OK);
}
// 문제 26
@PostMapping("/api/notice")
public void addNotice(@RequestBody NoticeInput noticeInput) {
// 증복 확인 (제목, 내용, 등록시간이 1분 이내일 경우)
LocalDateTime checkDate = LocalDateTime.now().minusMinutes(1); // 현재 시간 1분 전
// Optional<List<Notice>> noticeList = noticeRepository.findByTitleAndContentsAndRegDateIsGreaterThanEqual(
// noticeInput.getTitle(),
// noticeInput.getContents(),
// checkDate
// );
//
// if(noticeList.isPresent()) {
// if(noticeList.get().size() > 0) {
// throw new DuplicateNoticeException("1분 이내의 등록된 동일한 공지사항이 존재합니다.");
// }
// }
int noticeCount = noticeRepository.countByTitleAndContentsAndRegDateIsGreaterThanEqual(
noticeInput.getTitle(),
noticeInput.getContents(),
checkDate
);
if(noticeCount > 0) {
throw new DuplicateNoticeException("1분 이내의 등록된 동일한 공지사항이 존재합니다.");
}
noticeRepository.save(Notice.builder()
.title(noticeInput.getTitle())
.contents(noticeInput.getContents())
.regDate(LocalDateTime.now())
.hits(0)
.likes(0)
.build()
);
}
}
728x90
'Spring > Practice' 카테고리의 다른 글
[Practice] 사용자 API 만들기 (2) (0) | 2021.04.12 |
---|---|
[Practice] 사용자 API 만들기 (1) (0) | 2021.04.12 |
[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (21) (0) | 2021.04.12 |
[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (20) (0) | 2021.04.12 |