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

[Library Management System] 25.09.01 (34일)

dev.jelee 2025. 9. 1. 16:03

[ 작업한 내용 ]

1. 공지사항 등록

1-1) 공지사항 엔티티

- id, title, content, createdDate, updatedDate, wirter 필드를 가짐.

- writer는 User의 id와 join.

- @PrePersist를 사용하여 공지사항 작성시 createdDate 자동으로 시간 저장.


1-2) AdminNoticeController

- POST 방식으로 @RequestBody로 AdminNoticeCreateDTO와 로그인한 사용자의 인증객체를 요청받기.

- 요청받은 데이터를 서비스로직으로 전달.

- 서비스로직으로부터 반환 받은 데이터를 클라이언트에게 반환.


1-3) AdminNoticeService

- controller 계층에서 전달받은 인증객체의 id를 기반으로 repository.findById()를 사용하여 유효한 사용자인지 확인을 하기.

- title, content가 비어있는지 체크하고 비어있으면 예외발생.

- 사용자의 권한이 ROLE_MANAGER, ROLE_ADMIN이 아니면 예외발생.

- 전달받은 AdminNoticeCreateDTO에 있는 데이터를 가지고 Notice 객체를 생성.

- 생성한 Notice 객체를 repository.save()를 통해 DB에 저장.

- 응답 DTO인 AdminNoticeCreateResDTO를 생성해 controller로 반환.


1-4) NoticeReository

- JpaRepository를 상속받는 interface로 생성.


1-5) messages.properties

- 공지사항 생성시 에러, 성공 메시지 추가.

error.notice.title.blank=공지사항 제목은 필수입니다.
error.notice.content.blank=공지사항 내용은 필수입니다.
error.notice.create.writer=공지사항은 매니저 또는 관리자만 작성이 가능합니다.
success.notice.created=공지사항이 성공적으로 등록되었습니다.

1-6) NoticeSuccessCode

- 공지사항 생성시 성공코드 추가.

NOTICE_CREATED(HttpStatus.CREATED, "NOTICE_201", "success.notice.created");

1-7) NoticeErrorCode

- 공지사항 생성시 발생하는 에러코드 추가.

NOTICE_TITLE_BLANK(HttpStatus.BAD_REQUEST, "NOTICE_001", "error.notice.title.blank"),
NOTICE_CONTENT_BLANK(HttpStatus.BAD_REQUEST, "NOTICE_002", "error.notice.content.blank");
NOTICE_CREATE_WRITER(HttpStatus.BAD_REQUEST, "NOTICE_003", "error.notice.create.writer");

1-8) SecurityConfig

- 공지사항 관련 엔드포인트 접근 허가.


[ 메모 ]

- JPA방식을 사용하는 경우 FK인 컬럼을 엔티티에서 표현할때 n대 1의 경우 @ManyToOne. 그 외에 @ManyToMany, @ManyToAny 등이 있다는 걸 알게되었다. 지금 당장은 개발하는데에 집중해야해서 자세히 찾아보지는 않았지만 나중에 필수로 알아두어야하는 부분.

- 지금까지 개발하면서 수정해야하는 부분, 개선해야하는 부분이 문득 떠오른다. 처음에는 헤매고 이해가 잘 안되는 부분이 있어서 우선 개발을 하는 것을 목표로했다면 지금은 처음보다는 이해력이 올라가서 '아, 여기서 이렇게 해야지 깔끔할 거 같은데..'라는 생각이 자주 든다. 


commit
권한에 따라 공지글 작성할 수 있음.