package egovframework.com.mtdata.database.service;

import java.util.List;

import egovframework.com.mtdata.database.vo.*;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Update;

public interface DatabaseService {

	/**
	 * 데이터베이스 스키마 조회 후 [comtsysdbinfo]테이블에 데이터를 저장한다
	 *
	 * @param vo
	 * @return
	 * @throws Exception
	 */
	int insertDbInfo(DatabaseInfoVO vo) throws Exception;

	/**
	 * 사용자가 입력한 연결정보를 [comttblinfo]테이블에 저장한다
	 *
	 * @param vo
	 * @return
	 * @throws Exception
	 */
	int insertDbConnInfo(DatabaseInfoVO vo) throws Exception;

	/**
	 * [comttblinfo]테이블에 저장된 내용을 조회한다(단일)
	 *
	 * @param vo
	 * @return
	 */
	DatabaseInfoVO selectSysDb(DatabaseInfoVO vo);

	/**
	 * Yaml 파일을 업데이트하기 위해 목록을 조회한다(pg_chameleon yaml용이나 차후 다른 용도로 쓰임이 있다 판단되면 수정)
	 *
	 * @param vo
	 * @return
	 */
	List<DatabaseInfoVO> selectSysDbConnList(DatabaseInfoVO vo);

	/**
	 * DB 연결 정보 검증(중복확인)
	 *
	 * @param vo
	 * @return
	 */
	int checkDbConnInfo(DatabaseInfoVO vo);

	/**
	 * 스키마 내 테이블정보를 [inst_db_tbl_info] 테이블에 저장한다.
	 *
	 * @param tbVo
	 * @return
	 */
	int insertDbTblInfo(TableInfoVO tbVo) throws Exception;



	/**
	 * 컬럼 정보를 [inst_tbl_col_info] 테이블에 저장한다.
	 *
	 * @param colVo
	 * @return
	 */
	public int insertTblColInfo(ColumnInfoVO colVo) throws Exception;




	/**
	 * 등록된 DB 정보 관리 리스트
	 *
	 * @param vo
	 * @return List<DatabaseInfoVO>
	 */
	List<DatabaseInfoVO> selectRegisterdDBInfoList(DatabaseInfoVO vo);

	/**
	 * 등록된 DB 정보 관리 수정
	 *
	 * @param vo
	 * @return List<DatabaseInfoVO>
	 */
	void updateRegisterdDBInfoList(DatabaseInfoVO vo) throws Exception;

	/**
	 * 등록된 DB 정보 관리 삭제
	 *
	 * @param vo
	 * @return List<DatabaseInfoVO>
	 */
	void deleteRegisterdDBInfoList(DatabaseInfoVO vo) throws Exception;


	/**
	 * DB 연결 정보 리스트 조회
	 *
	 * @param vo
	 * @return List<DBConnInfoVO>
	 */
	List<DBConnInfoVO> selectInstDbConnInfoList(DBConnInfoVO vo);

	/**
	 * DB 연결 정보 조회
	 *
	 * @param vo
	 * @return DBConnInfoVO
	 */
	DBConnInfoVO selectInstDbConnInfo(DBConnInfoVO vo);

	/**
	 * DB 연결 정보 저장
	 *
	 * @param vo
	 * @return
	 */
	void insertInstDbConnInfo(DBConnInfoVO vo) throws Exception;

	/**
	 * DB 연결 정보 수정
	 *
	 * @param vo
	 * @return
	 */
	void updateInstDbConnInfo(DBConnInfoVO vo) throws Exception;


	/**
	 * DB 연결 정보 삭제
	 *
	 * @param vo
	 * @return
	 */
	void deleteInstDbConnInfo(DBConnInfoVO vo) throws Exception;

	/**
	 * DB 정보 리스트 조회
	 *
	 * @param vo
	 * @return List<DBInfoVO>
	 */
	List<DBInfoVO> selectInstDbInfoList(DBInfoVO vo);

	/**
	 * DB 정보 조회
	 *
	 * @param vo
	 * @return DBInfoVO
	 */
	DBInfoVO selectInstDbInfo(DBInfoVO vo);

	/**
	 * DB 정보 저장
	 *
	 * @param vo
	 * @return
	 */
	void insertInstDbInfo(DBInfoVO vo) throws Exception;

	/**
	 * DB 정보 수정
	 *
	 * @param vo
	 * @return
	 */
	void updateInstDbInfo(DBInfoVO vo) throws Exception;

	/**
	 * DB 정보 삭제
	 *
	 * @param vo
	 * @return
	 */
	void deleteInstDbInfo(DBInfoVO vo) throws Exception;



	/**
	 * DB 테이블 정보 리스트 조회
	 *
	 * @param vo
	 * @return List<DBTblInfoVO>
	 */
	List<DBTblInfoVO> selectInstDbTblInfoList(DBTblInfoVO vo);

	/**
	 * DB 테이블 정보 조회
	 *
	 * @param vo
	 * @return DBTblInfoVO
	 */
	DBTblInfoVO selectInstDbTblInfo(DBTblInfoVO vo);

	/**
	 * DB 테이블 정보 저장
	 *
	 * @param vo
	 * @return
	 */
	void insertInstDbTblInfo(DBTblInfoVO vo) throws Exception;

	/**
	 * DB 테이블 정보 수정
	 *
	 * @param vo
	 * @return
	 */
	void updateInstDbTblInfo(DBTblInfoVO vo) throws Exception;


	/**
	 * DB 테이블 정보 삭제
	 *
	 * @param vo
	 * @return
	 */
	void deleteInstDbTblInfo(DBTblInfoVO vo) throws Exception;



	/**
	 * DB 테이블 컬럼 정보 리스트 조회
	 *
	 * @param vo
	 * @return List<DBTblColInfoVO>
	 */
	List<DBTblColInfoVO> selectInstDbTblColInfoList(DBTblColInfoVO vo);

	/**
	 * DB 테이블 컬럼 정보 조회
	 *
	 * @param vo
	 * @return DBTblColInfoVO
	 */
	DBTblColInfoVO selectInstDbTblColInfo(DBTblColInfoVO vo);

	/**
	 * DB 테이블 컬럼 정보 저장
	 *
	 * @param vo
	 * @return
	 */
	void insertInstDbTblColInfo(DBTblColInfoVO vo) throws Exception;

	/**
	 * DB 테이블 컬럼 정보 수정
	 *
	 * @param vo
	 * @return
	 */
	void updateInstDbTblColInfo(DBTblColInfoVO vo) throws Exception;


	/**
	 * DB 테이블 컬럼 정보 삭제
	 *
	 * @param vo
	 * @return
	 */
	void deleteInstDbTblColInfo(DBTblColInfoVO vo) throws Exception;

}
