doclib Board Asset Adapter
doclib은 UI센터 assets/board를 포털 소유 경로인 client/src/features/boards/asset에 적용하고, doclib-board-adapter.ts에서 기존 archive API를 BoardDataSource 계약으로 변환한다.
게시판 유형 선택
tsx
import {
BoardList,
createDoclibBoardDataSource,
createDoclibBoardPermissionResolver,
getBoardVariant,
} from "@/features/boards";
const variant = getBoardVariant("ARCHIVE");
const dataSource = createDoclibBoardDataSource();
const permissions = createDoclibBoardPermissionResolver({
portalId: "doclib",
variant: variant.id,
permissions: directoryBoardPermissions,
});
<BoardList
board={board}
variant={variant}
dataSource={dataSource}
permissions={permissions}
onCreate={openCreateForm}
onSelect={openDetail}
/>;현재 제공 유형은 GENERAL, NOTICE, QNA, ARCHIVE, GALLERY다. 유형은 공통 UI의 복제본이 아니라 기본 라벨, 페이지 크기, 댓글·첨부·썸네일·답변 상태·버전 이력·상단 고정 기능을 정의하는 프로파일이다.
API 경계
| ASSET 계약 | doclib 구현 |
|---|---|
list·get | fetchPortalData 결과를 BoardPage·BoardPost로 정규화 |
create | /api/boards/:boardId/posts 호출 후 uploadApiFile로 첨부 연결 |
update | /api/posts/:postId PATCH 계약 호출 후 신규 첨부 연결 |
remove | /api/posts/:postId DELETE 계약 호출 |
uploadVersion | 기존 uploadApiVersion 호출 후 파일 상세 재조회 |
download | 기존 fetchAttachmentDownloadUrl의 signed URL 반환 |
| 권한 | portalId, boardId, postId, action을 DirectoryService 권한 resolver로 전달 |
update와 remove는 현재 서버가 제공해야 하는 게시글 PATCH/DELETE 계약을 명시적으로 사용한다. 서버 라우트가 아직 배포되지 않은 환경에서는 작성·조회·첨부 버전·다운로드부터 적용하고, 수정·삭제 버튼은 해당 계약 배포 후 활성화한다.
적용 원칙
doclib 어댑터는 UI 컴포넌트에 API 원문을 노출하지 않는다. 서버 응답은 BoardPost, BoardAttachment, BoardPage로 변환하며, 파일 검증·저장소 키·다운로드 권한은 기존 서버 정책을 유지한다. DirectoryService 권한 조회에는 항상 portalId: "doclib"을 포함해 다른 포털의 게시판 권한과 분리한다.