/**
 * 
 */
package org.springframework.samples.kyuriboard.domain.logic;

import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.samples.kyuriboard.domain.Board;
import org.springframework.samples.kyuriboard.domain.Memo;
import org.springframework.samples.kyuriboard.domain.User;

/**
 * @author DAMI(archy712@naver.com)
 *
 */
public interface KyuriBoardFacade {
	
	// -----------------------------------------------------------
	// Board
	// -----------------------------------------------------------
	
	/**
	 * 주어진 게시물ID로 게시물 객체를 반환한다
	 * @param boardId 게시물ID
	 * @return Board 게시물 객체
	 * @throws DataAccessException
	 */
	Board getBoardByBoardId(int boardId) throws DataAccessException;
	
	
	/**
	 * 게시물의 총 리스트를 반환한다.
	 * @return java.util.List 게시물 총 리스트
	 * @throws DataAccessException
	 */
	List getBoardList() throws DataAccessException;
	
	
	/**
	 * 주어진 사용자ID에 해당하는 게시물 리스트를 반환한다.
	 * @param userId 사용자ID
	 * @return java.util.List 게시물 리스트
	 * @throws DataAccessException
	 */
	List getBoardListByUserId(String userId) throws DataAccessException;
	
	
	/**
	 * 주어진 사용자명에 해당하는 게시물 리스트를 반환한다.
	 * @param userName 사용자명
	 * @return java.util.List 게시물 리스트
	 * @throws DataAccessException
	 */
	List getBoardListByUserName(String userName) throws DataAccessException;
	
	
	/**
	 * 주어진 제목에 해당하는 게시물 리스트를 반환한다.
	 * @param title 게시물 제목
	 * @return java.util.List 게시물 리스트
	 * @throws DataAccessException
	 */
	List getBoardListByTitle(String title) throws DataAccessException;
	
	
	/**
	 * 주어진 게시물을 입력한다.
	 * @param board 입력할 게시물
	 * @throws DataAccessException
	 */
	void insertBoard(Board board) throws DataAccessException;
	
	
	/**
	 * 주어진 게시물을 수정한다.
	 * @param board 입력할 게시물
	 * @throws DataAccessException
	 */
	void updateBoard(Board board) throws DataAccessException;
	
	
	/**
	 * 주어진 게시물을 삭제한다.
	 * @param boardId 삭제할 게시물 ID
	 * @throws DataAccessException
	 */
	void deleteBoard(int boardId) throws DataAccessException;
	
	
	// ---------------------------------------------------------
	// Memo
	// ---------------------------------------------------------
	
	
	/**
	 * 주어진 메모ID에 해당하는 메모를 반환한다.
	 * @param memoId 메모ID
	 * @return Memo 메모 객체
	 * @throws DataAccessException
	 */
	Memo getMemoByMemoId(int memoId) throws DataAccessException;
	
	
	/**
	 * 주어진 게시물ID에 해당하는 메모 리스트를 반환한다.
	 * @param boardId 게시물ID
	 * @return java.util.List 메모 리스트
	 * @throws DataAccessException
	 */
	List getMemoListByBoardId(int boardId) throws DataAccessException;
	
	
	/**
	 * 주어진 메모를 입력한다.
	 * @param memo 입력할 메모
	 * @throws DataAccessException
	 */
	void insertMemo(Memo memo) throws DataAccessException;
	
	
	/**
	 * 주어진 메모를 수정한다.
	 * @param memo 수정할 메모
	 * @throws DataAccessException
	 */
	void updateMemo(Memo memo) throws DataAccessException;
	
	
	/**
	 * 주어진 메모ID에 해당하는 메모를 삭제한다.
	 * @param memoId 삭제할 메모 ID
	 * @throws DataAccessException
	 */
	void deleteMemo(int memoId) throws DataAccessException;
	
	
	/**
	 * 주어진 게시물ID에 해당하는 메모들을 삭제한다.
	 * @param boardId
	 * @throws DataAccessException
	 */
	void deleteMemoByBoardId(int boardId) throws DataAccessException;
	
	
	// ---------------------------------------------------------
	// User
	// ---------------------------------------------------------
	

	/**
	 * 주어진 사용자ID에 해당하는 사용자를 반환한다.
	 * @param userId 사용자 ID
	 * @return User 사용자
	 * @throws DataAccessException
	 */
	User getUserByUserId(String userId) throws DataAccessException;
	
	
	/**
	 * 주어진 사용자ID와 비밀번호를 만족하는 사용자를 반환한다.
	 * @param userId 사용자 ID
	 * @param passwd 사용자 비밀번호
	 * @return User 사용자
	 * @throws DataAccessException
	 */
	User getUserByUserIdAndPasswd(String userId, String passwd) throws DataAccessException;
	
	
	/**
	 * 주어진 사용자를 등록한다.
	 * @param user 등록할 사용자
	 * @throws DataAccessException
	 */
	void insertUser(User user) throws DataAccessException;
	
	
	/**
	 * 주어진 사용자를 수정한다.
	 * @param user 수정할 사용자
	 * @throws DataAccessException
	 */
	void updateUser(User user) throws DataAccessException;
	
	
	/**
	 * 사용자 리스트를 반환한다.
	 * @return java.util.List 사용자 리스트
	 * @throws DataAccessException
	 */
	List getUserList() throws DataAccessException;

}
