= 게시판 관리

== 개요

SDL에서 제공하는 게시판 관리 기능으로 공지사항(메인화면 공지팝업 연동)이나 FAQ 게시판 등 Community 성격으로 게시글 등록 및 답변기능을 사용할 수 있는 게시판 기능이다. +
관리 기능에서 게시판 등록 및 관리를 할 수 있으며 사용자용과 관리자용 메뉴를 따로 만들어 권한별로 게시판 기능을 사용할 수 있도록 제공한다.

== Table

* 게시판 : TN_CF_BOARD
* 게시판 분류 : TN_CF_BOARD_CLASSIFICATION
* 게시판 컬럼 : TN_CF_BOARD_COLUMN

== API

.BoardController.java

. 게시판 목록 조회(페이징) +
GET /boards-with-paging +
Query ID : selectBoardPagingList

. 게시판 상세정보 조회 +
GET /boards/{boardId} +
Query ID : selectBoard

. 게시판 등록 +
POST /boards +
Query ID : insertBoard, insertBoardClassification, insertBoardColumn
* 게시판 등록 시 등록화면에서 추가한 게시판 분류 목록과 default 컬럼 정보가 저장된다.

[source,java]
----
@Override
@Transactional
public void insertBoard(Board board) {

    // 게시판 저장.
    boardDao.insertBoard(board);

    // 게시판 분류 저장.
    if (!board.getClassifications().isEmpty()) {
        for (BoardClassification boardClassification : board.getClassifications()) {
            boardClassification.setBoardId(board.getBoardId());
            boardClassification.setClassificationId(idGenService.getNextStringId());
            boardDao.insertBoardClassification(boardClassification);
        }
    }

    // 게시판 컬럼 저장.
    boardDao.insertBoardColumn(board.getBoardId());
}
----

[start=5]
. 게시판 수정 +
PUT /boards/{boardId} +
Query ID : updateBoard, updateBoardClassification, updateBoardColumn
* 게시판 수정시 변경된 게시판 분류 목록과 컬럼 정보가 수정된다.

[source,java]
----
@Override
@Transactional
public void updateBoard(Board board) {

    // 게시판 수정.
    boardDao.updateBoard(board);

    // 게시판 분류 수정.
    List<BoardClassification> beforeClassifications = boardDao.getBoardClassificationList(board.getBoardId());
    List<String> beforeClassificationIdList = new ArrayList<>();
    -- 생략 --
}
----

[start=6]
. 게시판 삭제 +
DELETE /boards/{boardId} +
Query ID : deleteBoard

== 화면

. 게시판 목록 화면

image::boardManagement_01.png[]

* 게시판 목록을 확인할 수 있다.
* 해당 게시판의 등록된 게시글 등록건수와 현재 사용 여부등의 정보를 보여준다.
* 등록 버튼 클릭 시 등록화면으로 이동되며 게시판 명 클릭 시 게시판 수정화면으로 이동된다.

[start=2]
. 게시판 등록 화면

image::boardManagement_02.png[]

* 게시판을 등록할 수 있다.
* 게시판 세부기능 속성
** 에디터 사용여부 : CafeNote 등 에디터를 사용할지 선택('미사용' 선택 시 textarea 태그로 구현된다)
** 이미지파일사용 : 이미지 파일 등록 시 본문에 이미지를 표시한다.(사진형 게시판일 경우 필수사용)
** 메인 공지팝업 : 게시글 등록 시 메인 공지사항 팝업창에 해당 기간동안 게시글이 노출된다.
** 게시글 '공지'라벨 표시 : 게시글 등록 시 게시글 목록 상단에 공지 게시글로 노출된다.

[start=3]
. 게시판 상세정보 수정 화면

image::boardManagement_03.png[]

* 게시판 세부기능 속성 변경이 가능하다.
* '공지팝업 제한' 기능은 해당 게시판의 공지게시글을 일시적으로 제한할 수 있는 기능이다.

image::boardManagement_04.png[]

* 게시판의 검색 조건을 선택할 수 있다.
* 게시글 목록화면에서 보여줄 정보를 선택 할수 있다.
** 각 컬럼의 사용 여부에 따라서 넓이가 합산 100%로 변경된다.
* 게시글 목록 정렬 기준을 선택 할 수 있으며 작성일 내림차순이 기본으로 선택된다.