package cn.fateverse.query.factory;

import cn.fateverse.query.entity.DataSourceManage;
import cn.fateverse.query.entity.DynamicPage;
import cn.fateverse.query.mapper.DynamicDataSourceMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.Map;

/**
 * @author Clay
 * @date 2023-07-16
 */
public interface DynamicDataSourceFactory {

    /**
     * 获取到数据库session 工厂
     *
     * @param dataSource 数据源管理信息
     * @return 数据工厂
     */
    SqlSessionFactory getSqlSessionFactory(DataSourceManage dataSource);

    /**
     * 获取到查询的mapper映射文件
     *
     * @param sqlSession sqlSession
     * @return 映射的mapper
     */
    DynamicDataSourceMapper getTableMapper(SqlSession sqlSession);

    /**
     * 获取到动态的分页信息
     *
     * @return 分页信息
     */
    DynamicPage getDynamicPage();

    /**
     * 使用数据源拼接jdbcUrl
     *
     * @param dataSourceManage 数据源管理信息
     * @return url返回参数
     */
    String getDataBaseUrl(DataSourceManage dataSourceManage);

    /**
     * 获取到数据库对应的特殊参数
     *
     * @param dataSourceManage 数据库特殊参数
     * @return 返回参数
     */
    Map<String, Object> getParams(DataSourceManage dataSourceManage);
}
