개발 기록/도서관 관리 시스템

[Library Management System] 25.09.05 (38일)

dev.jelee 2025. 9. 5. 12:38

[ 작업한 내용 ]

1. 사용자-공지사항 상세보기

1-1) UserNoticeDetailResDTO

- 사용자가 공지사항 상세페이지 요청시 응답할 DTO

- id, title, content, createdDate, updatedDate, writer

- Notice 객체를 파라미터로 받는 생성자함수 생성.


1-2) UserNoticeController

- GET 방식으로 `noticeId`를 @PathVariable로 전달받기.

- service 계층으로 `noticeId`를 전달하여 해당 데이터를 가져와 `UserNoticeDetailResDTO`타입의 `responseDTO` 변수에 담기.

- 성공메시지와 `responseDTO` 데이터를 클라이언트에게 반환.


1-3) UserNoticeService

- controller 계층으로부터 전달받은 `noticeId`를 기반으로, repository 계층을 통해 DB에서 해당 공지사항을 조회하여 가져온 다음 `Notice`타입의 변수에 저장한다.

- 조회된 `Notice` 데이터를 기반으로 `UserNoticeDetailResDTO` 객체를 생성하여 반환.


2. 사용자-공지사항 검색 목록 조회

2-1) UserNoticeSearchResDTO

- 사용자가 검색한 데이터 요청시 응답할 데이터 DTO

- id, title, createdDate, writer


2-2) UserNoticeController

- GET방식으로 `keyword`, `page`, `size`를 @RequestParam으로 전달받는다.

- service 계층으로 `keyword`, `page`, `size`를 전달하여 해당 데이터를 조회하고, 결과를 `Page<UserNoticeSearchResDTO>` 타입의 `responseDTO` 변수에 담는다.

- 성공메시지와 `responseDTO`를 클라이언트 측으로 반환한다.


2-3) UserNoticeService

- 페이징 처리를 위해 controller 계층에서 전달받은 `page`, `size`값을 `PageRequest.of()`를 이용해 `Pageable`객체로 생성한다.

- repository계층으로 `keyword`와 `pageable`를 전달하여 데이터를 조회하고, 결과를 `Page<Notice>`타입의 `result` 변수에 담는다. 이때 사용된 메서드는 `findByTitleContainerIgnoreCase()`다. (Jpa Repository 상속받음)

- `result`가 비어있는 경우, 예외를 발생시켜 처리한다.

- `result.getContent()`를 통해 Notice 엔티티 리스트를 꺼낸 후, 이를 UserNoticeSearchResDTO로 변환하여 `dtoList` 변수에 저장한다.

- 마지막으로 `dtoList`를 PageImpl로 감싸 Page 형식으로 래핑하여 controller로 반환한다.


commit
사용자-공지사항 상세보기(좌), 사용자-공지사항 검색 목록 조회(우)