From 9ddb11b6f195b9c00e8c58b8eb5f6c857ffbb5a3 Mon Sep 17 00:00:00 2001 From: jjunh33 Date: Mon, 19 Oct 2026 02:11:28 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=EA=B3=B5=EC=A7=80=20=EC=9A=B4?= =?UTF-8?q?=EC=98=81=EC=A7=84=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20AdminNoticeS?= =?UTF-8?q?ervice=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 학생 앱 조회는 NoticeService에 남기고, 운영진의 목록·상세·작성·수정·삭제·고정을 AdminNoticeService로 옮긴다. --- .../welfare/notice/AdminNoticeController.java | 10 +-- .../usecase/AdminNoticeReadUseCase.java | 6 +- .../usecase/AdminNoticeWriteUseCase.java | 8 +- .../notice/service/AdminNoticeService.java | 33 ++++++++ .../domain/notice/service/NoticeService.java | 24 +----- .../service/impl/AdminNoticeServiceImpl.java | 84 +++++++++++++++++++ .../service/impl/NoticeServiceImpl.java | 60 ------------- 7 files changed, 132 insertions(+), 93 deletions(-) create mode 100644 core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/AdminNoticeService.java create mode 100644 core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/AdminNoticeServiceImpl.java diff --git a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/AdminNoticeController.java b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/AdminNoticeController.java index 3e6f8aea..1922b8c4 100644 --- a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/AdminNoticeController.java +++ b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/AdminNoticeController.java @@ -16,7 +16,7 @@ import kr.ac.kookmin.stream.api.common.dto.PageResponse; import kr.ac.kookmin.stream.common.PageResult; import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; -import kr.ac.kookmin.stream.welfare.domain.notice.service.NoticeService; +import kr.ac.kookmin.stream.welfare.domain.notice.service.AdminNoticeService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -35,7 +35,7 @@ @RequiredArgsConstructor public class AdminNoticeController implements AdminNoticeApi { - private final NoticeService noticeService; + private final AdminNoticeService adminNoticeService; private final AdminNoticeReadUseCase adminNoticeReadUseCase; private final AdminNoticeWriteUseCase adminNoticeWriteUseCase; @@ -46,7 +46,7 @@ public ApiResponse> getNotices( @RequestParam(required = false) String keyword, @Valid @ModelAttribute PageParams pageParams ) { - PageResult result = noticeService.search(keyword, pageParams.toOffset()); + PageResult result = adminNoticeService.search(keyword, pageParams.toOffset()); return ApiResponse.success(PageResponse.from(result, AdminNoticeListItemResponse::from)); } @@ -80,7 +80,7 @@ public ApiResponse updateNotice( @Override @DeleteMapping("/{noticeId}") public ApiResponse deleteNotice(AdminApiUser apiUser, @PathVariable Long noticeId) { - noticeService.delete(noticeId); + adminNoticeService.delete(noticeId); return ApiResponse.success(); } @@ -91,7 +91,7 @@ public ApiResponse changePinned( @PathVariable Long noticeId, @Valid @RequestBody NoticePinRequest request ) { - noticeService.changePinned(noticeId, request.pinned()); + adminNoticeService.changePinned(noticeId, request.pinned()); return ApiResponse.success(); } } diff --git a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeReadUseCase.java b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeReadUseCase.java index 589e567a..892c8a1b 100644 --- a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeReadUseCase.java +++ b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeReadUseCase.java @@ -3,7 +3,7 @@ import java.util.List; import kr.ac.kookmin.stream.file.service.FileService; import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; -import kr.ac.kookmin.stream.welfare.domain.notice.service.NoticeService; +import kr.ac.kookmin.stream.welfare.domain.notice.service.AdminNoticeService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -14,11 +14,11 @@ @RequiredArgsConstructor public class AdminNoticeReadUseCase { - private final NoticeService noticeService; + private final AdminNoticeService adminNoticeService; private final FileService fileService; public AdminNoticeDetail getDetail(Long noticeId) { - Notice notice = noticeService.getNotice(noticeId); + Notice notice = adminNoticeService.getNotice(noticeId); return new AdminNoticeDetail( notice, diff --git a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeWriteUseCase.java b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeWriteUseCase.java index a1a5f2b3..54bfb47c 100644 --- a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeWriteUseCase.java +++ b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/notice/usecase/AdminNoticeWriteUseCase.java @@ -10,7 +10,7 @@ import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCreateCommand; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeUpdateCommand; -import kr.ac.kookmin.stream.welfare.domain.notice.service.NoticeService; +import kr.ac.kookmin.stream.welfare.domain.notice.service.AdminNoticeService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -25,17 +25,17 @@ @RequiredArgsConstructor public class AdminNoticeWriteUseCase { - private final NoticeService noticeService; + private final AdminNoticeService adminNoticeService; private final FileService fileService; public Notice create(Long createdBy, NoticeCreateCommand command) { requireFilesExist(command.imageIds(), command.attachmentIds()); - return noticeService.create(createdBy, command); + return adminNoticeService.create(createdBy, command); } public Notice update(Long noticeId, NoticeUpdateCommand command) { requireFilesExist(command.imageIds(), command.attachmentIds()); - return noticeService.update(noticeId, command); + return adminNoticeService.update(noticeId, command); } private void requireFilesExist(List imageIds, List attachmentIds) { diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/AdminNoticeService.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/AdminNoticeService.java new file mode 100644 index 00000000..af0ff883 --- /dev/null +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/AdminNoticeService.java @@ -0,0 +1,33 @@ +package kr.ac.kookmin.stream.welfare.domain.notice.service; + +import kr.ac.kookmin.stream.common.PageOffset; +import kr.ac.kookmin.stream.common.PageResult; +import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; +import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCreateCommand; +import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeUpdateCommand; + +/** + * 운영진용 공지 서비스. 학생 앱이 쓰는 조회는 {@link NoticeService}가 맡는다. + */ +public interface AdminNoticeService { + + /** + * 공지 목록. 제목 검색어({@code keyword})로 거르고 고정 우선, 최신순으로 페이지 단위 조회한다. + * 검색어가 null이거나 공백이면 거르지 않는다. + */ + PageResult search(String keyword, PageOffset pageOffset); + + Notice getNotice(Long id); + + Notice create(Long createdBy, NoticeCreateCommand command); + + /** + * 공지를 수정한다. 명령의 수정 시각이 저장된 값과 다르면(그 사이 다른 관리자가 고친 경우) + * {@code NOTICE_UPDATE_CONFLICT}로 거부한다. + */ + Notice update(Long id, NoticeUpdateCommand command); + + void delete(Long id); + + void changePinned(Long id, boolean pinned); +} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java index e4c8a77b..cad3d55a 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java @@ -1,32 +1,14 @@ package kr.ac.kookmin.stream.welfare.domain.notice.service; import kr.ac.kookmin.stream.common.CursorSliceResult; -import kr.ac.kookmin.stream.common.PageOffset; -import kr.ac.kookmin.stream.common.PageResult; import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCategory; -import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCreateCommand; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCursor; -import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeUpdateCommand; +/** + * 학생 앱이 쓰는 공지 조회. 운영진의 작성·수정·삭제·고정과 목록은 {@link AdminNoticeService}가 맡는다. + */ public interface NoticeService { CursorSliceResult getNotices(NoticeCategory category, NoticeCursor cursor, int size); - - /** - * 운영진용 공지 목록. 제목 검색어({@code keyword})로 거르고 고정 우선, 최신순으로 페이지 단위 조회한다. - * 검색어가 null이거나 공백이면 거르지 않는다. - */ - PageResult search(String keyword, PageOffset pageOffset); - Notice getNotice(Long id); - Notice create(Long createdBy, NoticeCreateCommand command); - - /** - * 공지를 수정한다. 명령의 수정 시각이 저장된 값과 다르면(그 사이 다른 관리자가 고친 경우) - * {@code NOTICE_UPDATE_CONFLICT}로 거부한다. - */ - Notice update(Long id, NoticeUpdateCommand command); - - void delete(Long id); - void changePinned(Long id, boolean pinned); } diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/AdminNoticeServiceImpl.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/AdminNoticeServiceImpl.java new file mode 100644 index 00000000..6a91d620 --- /dev/null +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/AdminNoticeServiceImpl.java @@ -0,0 +1,84 @@ +package kr.ac.kookmin.stream.welfare.domain.notice.service.impl; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import kr.ac.kookmin.stream.common.BusinessException; +import kr.ac.kookmin.stream.common.OutboxWriter; +import kr.ac.kookmin.stream.common.PageOffset; +import kr.ac.kookmin.stream.common.PageResult; +import kr.ac.kookmin.stream.common.event.NoticeCreated; +import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; +import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCreateCommand; +import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeErrorCode; +import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeUpdateCommand; +import kr.ac.kookmin.stream.welfare.domain.notice.repository.NoticeRepository; +import kr.ac.kookmin.stream.welfare.domain.notice.service.AdminNoticeService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +class AdminNoticeServiceImpl implements AdminNoticeService { + + private final NoticeRepository noticeRepository; + private final OutboxWriter outboxWriter; + + // 목록과 전체 개수를 두 번 조회하므로 같은 스냅샷에서 읽도록 읽기 트랜잭션으로 묶는다 + @Override + @Transactional(readOnly = true) + public PageResult search(String keyword, PageOffset pageOffset) { + String normalizedKeyword = keyword == null || keyword.isBlank() ? null : keyword.trim(); + return noticeRepository.search(normalizedKeyword, pageOffset); + } + + @Override + @Transactional(readOnly = true) + public Notice getNotice(Long id) { + return noticeRepository.findById(id) + .orElseThrow(() -> new BusinessException(NoticeErrorCode.NOTICE_NOT_FOUND)); + } + + // 공지 저장과 알림 이벤트 기록이 함께 커밋되도록 트랜잭션을 건다 + @Override + @Transactional + public Notice create(Long createdBy, NoticeCreateCommand command) { + Notice notice = noticeRepository.save(Notice.create(createdBy, command)); + outboxWriter.record(new NoticeCreated(notice.getId())); + return notice; + } + + @Override + @Transactional + public Notice update(Long id, NoticeUpdateCommand command) { + Notice notice = getNotice(id); + validateNotModified(notice, command.expectedUpdatedAt()); + + notice.update(command); + return noticeRepository.save(notice); + } + + @Override + @Transactional + public void delete(Long id) { + if (!noticeRepository.delete(id)) { + throw new BusinessException(NoticeErrorCode.NOTICE_NOT_FOUND); + } + } + + @Override + @Transactional + public void changePinned(Long id, boolean pinned) { + Notice notice = getNotice(id); + notice.changePinned(pinned); + noticeRepository.save(notice); + } + + // updated_at이 초 단위 DATETIME이라 같은 초로 맞춰 비교한다. 수정 화면이 읽은 뒤 고쳐졌다면 시각이 달라진다 + private void validateNotModified(Notice notice, LocalDateTime expectedUpdatedAt) { + LocalDateTime current = notice.getUpdatedAt().truncatedTo(ChronoUnit.SECONDS); + if (!current.equals(expectedUpdatedAt.truncatedTo(ChronoUnit.SECONDS))) { + throw new BusinessException(NoticeErrorCode.NOTICE_UPDATE_CONFLICT); + } + } +} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java index 801ff4a4..21ed9081 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java @@ -1,19 +1,11 @@ package kr.ac.kookmin.stream.welfare.domain.notice.service.impl; -import java.time.LocalDateTime; -import java.time.temporal.ChronoUnit; import kr.ac.kookmin.stream.common.BusinessException; import kr.ac.kookmin.stream.common.CursorSliceResult; -import kr.ac.kookmin.stream.common.OutboxWriter; -import kr.ac.kookmin.stream.common.PageOffset; -import kr.ac.kookmin.stream.common.PageResult; -import kr.ac.kookmin.stream.common.event.NoticeCreated; import kr.ac.kookmin.stream.welfare.domain.notice.domain.Notice; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCategory; -import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCreateCommand; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeCursor; import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeErrorCode; -import kr.ac.kookmin.stream.welfare.domain.notice.domain.NoticeUpdateCommand; import kr.ac.kookmin.stream.welfare.domain.notice.repository.NoticeRepository; import kr.ac.kookmin.stream.welfare.domain.notice.service.NoticeService; import lombok.RequiredArgsConstructor; @@ -25,7 +17,6 @@ class NoticeServiceImpl implements NoticeService { private final NoticeRepository noticeRepository; - private final OutboxWriter outboxWriter; @Override @Transactional(readOnly = true) @@ -37,61 +28,10 @@ public CursorSliceResult getNotices(NoticeCategory category, NoticeCurso return noticeRepository.findAll(category, cursor, size); } - // 목록과 전체 개수를 두 번 조회하므로 같은 스냅샷에서 읽도록 읽기 트랜잭션으로 묶는다 - @Override - @Transactional(readOnly = true) - public PageResult search(String keyword, PageOffset pageOffset) { - String normalizedKeyword = keyword == null || keyword.isBlank() ? null : keyword.trim(); - return noticeRepository.search(normalizedKeyword, pageOffset); - } - @Override @Transactional(readOnly = true) public Notice getNotice(Long id) { return noticeRepository.findById(id) .orElseThrow(() -> new BusinessException(NoticeErrorCode.NOTICE_NOT_FOUND)); } - - // 공지 저장과 알림 이벤트 기록이 함께 커밋되도록 트랜잭션을 건다 - @Override - @Transactional - public Notice create(Long createdBy, NoticeCreateCommand command) { - Notice notice = noticeRepository.save(Notice.create(createdBy, command)); - outboxWriter.record(new NoticeCreated(notice.getId())); - return notice; - } - - @Override - @Transactional - public Notice update(Long id, NoticeUpdateCommand command) { - Notice notice = getNotice(id); - validateNotModified(notice, command.expectedUpdatedAt()); - - notice.update(command); - return noticeRepository.save(notice); - } - - @Override - @Transactional - public void delete(Long id) { - if (!noticeRepository.delete(id)) { - throw new BusinessException(NoticeErrorCode.NOTICE_NOT_FOUND); - } - } - - @Override - @Transactional - public void changePinned(Long id, boolean pinned) { - Notice notice = getNotice(id); - notice.changePinned(pinned); - noticeRepository.save(notice); - } - - // updated_at이 초 단위 DATETIME이라 같은 초로 맞춰 비교한다. 수정 화면이 읽은 뒤 고쳐졌다면 시각이 달라진다 - private void validateNotModified(Notice notice, LocalDateTime expectedUpdatedAt) { - LocalDateTime current = notice.getUpdatedAt().truncatedTo(ChronoUnit.SECONDS); - if (!current.equals(expectedUpdatedAt.truncatedTo(ChronoUnit.SECONDS))) { - throw new BusinessException(NoticeErrorCode.NOTICE_UPDATE_CONFLICT); - } - } } From 5241df96c3bfda35431a839b731ef9bdcc1f8365 Mon Sep 17 00:00:00 2001 From: jjunh33 Date: Mon, 19 Oct 2026 02:11:28 +0900 Subject: [PATCH 2/3] =?UTF-8?q?docs:=20=EC=9A=B4=EC=98=81=EC=A7=84=20?= =?UTF-8?q?=EC=A0=84=EC=9A=A9=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=20=EA=B7=9C=EC=B9=99=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/conventions/coding-style.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/conventions/coding-style.md b/docs/conventions/coding-style.md index 6278a2e7..394a2adc 100644 --- a/docs/conventions/coding-style.md +++ b/docs/conventions/coding-style.md @@ -20,6 +20,7 @@ Business는 공개 인터페이스 + `service.impl` 구현체로 구성한다. | Presentation | 교차 도메인 조합 | `{Feature}UseCase` | `api:{client}-api` | | Business | 공개 진입점 인터페이스 | `{Domain}Service` | `core:domain:{모듈}` `domain/{도메인}/service` (공개) | | Business | 구현체 | `{Domain}ServiceImpl` | `core:domain:{모듈}` `domain/{도메인}/service/impl` (비공개) | +| Business | 운영진 전용 서비스 | `Admin{Domain}Service` / 구현체 `Admin{Domain}ServiceImpl` | 위와 같은 패키지 (2-7절) | | Data Access | Repository 인터페이스 | `{Domain}Repository` | `core:domain:{모듈}` `domain/{도메인}/repository` (공개) | | Data Access | Repository 구현체 | `{Domain}RepositoryImpl` | `infrastructure:db` | | Data Access | JPA Repository | `{Domain}JpaRepository` | `infrastructure:db` | @@ -282,6 +283,7 @@ Map countAppliedByEventIds(List eventIds); - **`{Domain}ServiceImpl`가 `{Domain}Repository`를 직접 참조**한다. - 비즈니스 규칙 검증은 `{Domain}ServiceImpl`(또는 `service.impl` 협력 객체)에서 하고 `BusinessException`을 던진다. - 트랜잭션 경계는 Service 메서드에. 조회 전용은 `@Transactional(readOnly = true)`, 교차 도메인 UseCase가 감쌀 수 있게 **기본 전파(REQUIRED)** 를 쓴다(`architecture.md` 6-1절). +- **운영진 전용 기능은 학생 앱이 쓰는 `{Domain}Service`와 분리해 `Admin{Domain}Service`로 둔다.** 같은 도메인 모듈의 `service`/`service.impl`에 두고 `{Domain}Repository`를 공유하며, 두 서비스는 서로 호출하지 않는다(`architecture.md` 레이어 규칙 4). 운영진 전용 서비스가 필요한 도메인부터 점진적으로 나누고, 분리하기 전의 도메인은 `{Domain}Service` 하나로 둔다. 다른 도메인 조합(예: 공지에 붙일 파일 확인)은 서비스가 아니라 `api:admin-api`의 UseCase가 맡는다. 예: 공지는 학생용 조회를 `NoticeService`, 운영진의 목록·상세·작성·수정·삭제·고정을 `AdminNoticeService`가 맡는다. ```java // core:domain:member — domain/member/service (공개) From 259426f1d6803d1762f174d7a2e68e6bb11b26a6 Mon Sep 17 00:00:00 2001 From: jjunh33 Date: Thu, 22 Oct 2026 20:58:07 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=EA=B3=B5=EC=A7=80=20=EB=8B=A8?= =?UTF-8?q?=EA=B1=B4=20=EC=A1=B0=ED=9A=8C=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=A5=BC=20getById=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stream/api/app/welfare/notice/AppNoticeController.java | 2 +- .../stream/welfare/domain/notice/service/NoticeService.java | 2 +- .../welfare/domain/notice/service/impl/NoticeServiceImpl.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/notice/AppNoticeController.java b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/notice/AppNoticeController.java index a2350cc3..03d7eaae 100644 --- a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/notice/AppNoticeController.java +++ b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/notice/AppNoticeController.java @@ -56,7 +56,7 @@ public ApiResponse> getNotices( @Override @GetMapping("/{noticeId}") public ApiResponse getNotice(@PathVariable("noticeId") Long noticeId) { - Notice notice = noticeService.getNotice(noticeId); + Notice notice = noticeService.getById(noticeId); Map imagesById = fileService.findAllByIdIn( notice.getImageIds() == null ? List.of() : notice.getImageIds() diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java index d08f2d45..63d705c5 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/NoticeService.java @@ -11,5 +11,5 @@ public interface NoticeService { CursorSliceResult getNotices(NoticeCategory category, NoticeCursor cursor, int size); - Notice getNotice(Long id); + Notice getById(Long id); } diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java index cb6a7e6f..a789bc9b 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/notice/service/impl/NoticeServiceImpl.java @@ -28,7 +28,7 @@ public CursorSliceResult getNotices(NoticeCategory category, NoticeCurso } @Override - public Notice getNotice(Long id) { + public Notice getById(Long id) { return noticeRepository.findById(id) .orElseThrow(() -> new BusinessException(NoticeErrorCode.NOTICE_NOT_FOUND)); }