어떤 기능인가요?
추가하려는 기능에 대해 간결하게 설명해주세요
학생 앱(app-api)에서 쓰는 게시판(공지) 조회 API 2개를 추가합니다 — 공지 목록 조회, 공지 상세 조회. core:domain:welfare에 이미 있는 Notice 도메인 객체·JPA 엔티티·notices 테이블(#13)을 기반으로 Service/Repository/Controller 레이어를 붙입니다.
📝 작업 상세 내용
스코프 제외: 썸네일/첨부파일 URL(fileId → fileUrl) 변환은 File 도메인(#17)이 아직 Service/Repository도 없는 상태라 이번 이슈에서는 제외합니다. thumbnailUrl/images[].fileUrl/attachments[].fileUrl은 일단 null로 응답합니다.
의존: 에러 응답이 ApiResponse 포맷으로 나가려면 GlobalExceptionHandler(#18)가 필요합니다.
📁 참고 자료 (선택)
어떤 기능인가요?
학생 앱(app-api)에서 쓰는 게시판(공지) 조회 API 2개를 추가합니다 — 공지 목록 조회, 공지 상세 조회.
core:domain:welfare에 이미 있는Notice도메인 객체·JPA 엔티티·notices테이블(#13)을 기반으로 Service/Repository/Controller 레이어를 붙입니다.📝 작업 상세 내용
GET /v1/app/notices?category=&cursor=&size=— 목록 조회,pinned DESC, createdAt DESC, id DESC기준 커서(keyset) 페이지네이션GET /v1/app/notices/{noticeId}— 상세 조회, 없으면 404(NOTICE_NOT_FOUND)core:domain:welfare에NoticeErrorCode/NoticeRepository/NoticeService·NoticeServiceImpl추가infrastructure:db에NoticeJpaRepository/NoticeRepositoryImpl추가core:common의CursorSliceResult(및api:common-api의CursorSliceResponse)nextCursor타입을Long→String으로 변경 (복합 정렬 커서 지원 목적)/v1/app/**)스코프 제외: 썸네일/첨부파일 URL(
fileId → fileUrl) 변환은 File 도메인(#17)이 아직 Service/Repository도 없는 상태라 이번 이슈에서는 제외합니다.thumbnailUrl/images[].fileUrl/attachments[].fileUrl은 일단null로 응답합니다.의존: 에러 응답이
ApiResponse포맷으로 나가려면GlobalExceptionHandler(#18)가 필요합니다.📁 참고 자료 (선택)