package kcg.imis.cmmn.bbs;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;

/**
  * @FileName : BaseBbsService.java
  * @Project : 국제해양프로젝트
  * @Date : 2018. 3. 22. 
  * @작성자 : Moon
  * @변경이력 : 
  * @프로그램 설명 : 기본 게시판 인터페이스
 */
public interface BaseBbsService<SearchT, DataT> {
	/**
	 * 데이터 한 건을 반환한다.
	 * 
	 * @param dataVO
	 *            조회할 VO (대부분 PK의 값으로 조회한다.)
	 * @return 데이터 한 건
	 * @throws Exception
	 *             기본 예외 처리
	 */
	DataT select(DataT dataVO) throws Exception;

	/**
	 * 페이징 처리없이 데이터 전체 목록을 반환한다.
	 * 
	 * @param searchVO 검색정보 객체
	 * @return 데이터 목록
	 * @throws Exception 기본 예외 처리
	 */
	List<DataT> selectListAll(SearchT searchVO) throws Exception;
	
	/**
	 * 데이터 목록을 반환한다.
	 * 
	 * @param searchVO
	 *            검색, 페이지 정보 객체
	 * @return 데이터 목록
	 * @throws Exception
	 *             기본 예외 처리
	 */
	List<DataT> selectList(SearchT searchVO) throws Exception;

	/**
	 * 데이터 목록 개수를 반환한다.
	 * 
	 * @param searchVO
	 *            검색, 페이지 정보 객체
	 * @return 데이터 목록 갯수
	 * @throws Exception
	 *             기본 예외 처리
	 */
	int selectListCnt(SearchT searchVO) throws Exception;

	/**
	 * 데이터 총 개수를 반환한다.
	 * 
	 * @param searchVO
	 *            검색, 페이지 정보 객체
	 * @return 데이터 총 개수
	 * @throws Exception
	 *             기본 예외 처리
	 */
	int selectTotalCnt(SearchT searchVO) throws Exception;

	/**
	 * 데이터를 입력한다.
	 * 
	 * @param dataVO
	 *            입력할 VO
	 * @param fileMap
	 *            파일이 담긴 Map 객체
	 * @return 맵 객체 { result: 1-성공 0-실패, idx: 등록된 게시물 idx }
	 * 
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> insert(DataT dataVO,
			Map<String, MultipartFile> fileMap) throws Exception;

	/**
	 * 데이터를 수정한다.
	 * 
	 * @param dataVO
	 *            수정할 VO
	 * @param fileMap
	 *            파일이 담긴 Map 객체
	 * @param deleteFiles
	 *            삭제할 파일리스트
	 * @return 맵 객체 { result: 1-성공 0-실패, idx: 수정된 게시물 idx }
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> update(DataT dataVO,
			Map<String, MultipartFile> fileMap, String[] deleteFiles) throws Exception;

	/**
	 * 데이터를 삭제한다.
	 * 
	 * @param dataVO
	 *            삭제할 VO
	 * @return 맵 객체 { result: 1-성공 0-실패, idx: 삭제된 게시물 idx }
	 * @throws Exception
	 *             기본 예외 처리 
	 */
	HashMap<String, Object> delete(DataT dataVO) throws Exception;
}
