[ 작업한 내용 ]
1. 관리자 - 공지사항 상세보기
1-1) messages.properties
- success.notice.detail=공지사항 상세보기가 완료되었습니다.
1-2) NoticeSuccessCode
- NOTICE_DETAIL(HttpStatus.OK, "NOTICE_206", "success.notice.detail");
1-3) AdminNoticeDetailResDTO
- 공지사항 상세 요청시 응답 DTO.
- id, title, content, createdDate, updatedDate, writer 필드.
- Notice 객체를 파라미터로 받는 생성자함수 생성.
1-4) AdminNoticeController
- GET방식으로 @PathVariable Long noticeId를 파라미터로 공지사항 상세내용을 요청한다.
- noticeId를 service 계층으로 전달하여 해당 공지사항 글을 찾아서 가져와 AdminNoticeDetailResDTO타입의 responseDTO 변수에 저장한다.
- 성공메시지와 responseDTO를 클라이언트에게 반환한다.
1-5) AdminNoticeService
- controller 계층으로 전달받은 noticeId를 가지고 JpaRepository를 상속받은 repository 계층을 통해 DB에 해당 noticeId를 가진 공지사항 상세 데이터를 가져와 Notice 타입(엔티티)의 notice 변수에 저장.
- .orElseThrow() 메서드를 사용하여 해당 noticeId의 데이터가 없으면 예외처리.
- notice 데이터를 가지고 AdminNoticeDetailResDTO 인스턴를 생성하여 controller로 반환.
2. 사용자 - 공지사항 전체 목록 보기(페이징)
2-1) UserNoticeListResDTO
- 사용자가 공지사항 전체 목록 요청시 응답할 DTO
- id, title, createdDate, writer 필드
- Notice를 파라미터로 받는 생성자함수 생성.
2-2) UserNoticeController
- 페이징 처리를 해야하기 때문에 @RequestParam을 사용하여 page, size각각 기본값 0과 10으로 지정해준다.
- page와 size를 service 계층으로 전달하여 해당 페이지의 데이터를 가져와 Page<UserNoticeListResDTO> 타입의 responseDTO 변수에 담는다.
- 성공 메시지와 responseDTO 데이터를 클라이언트 측으로 반환해준다.
2-3) UserNoticeService
- controller로 전달받은 page와 size를 가지고 Pageable을 사용하여 페이징 준비를 한다. PageRequest.of(page, size);
- repository 계층의 findAll() 메서드를 사용하여 pageable을 전달하여 해당 페이지의 요청한 데이터 개수만큼 가져와 Page<Notice> result 변수에 담는다.
- if문을 사용하여 result가 비어있는지 확인 후 예외처리.
- Page를 List 타입으로 .stream()과 .map()을 사용하여 변환 시킨 뒤 controller 계층으로 반환할 때에는 PageImpl을 사용하여 List 타입을 Page형태로 랩핑하여 반환한다.
'개발 기록 > 도서관 관리 시스템' 카테고리의 다른 글
[Library Management System] 25.09.06 (39일) (0) | 2025.09.06 |
---|---|
[Library Management System] 25.09.05 (38일) (0) | 2025.09.05 |
[Library Management System] 25.09.03 (36일) (0) | 2025.09.03 |
[Library Management System] 25.09.02 (35일) (0) | 2025.09.02 |
[Library Management System] 25.09.01 (34일) (0) | 2025.09.01 |