using System;
using System.Collections.Generic;
using System.Text;

/**********关于用户操作的数据库访问层**********
 * 这里主要有创建一个新用户,删除用户,修改用户信息
 * 设定用户能否登录该网站,登录,返回用户列表等等
 * 接口设计:魏莹
 * 设计时间:2008年5月20日
 * 修订者:王枢昊
 * 修订时间:
 ***********************************************/
namespace IDDal
{
    /// <summary>
    /// 用户操作的类
    /// </summary>
    /// <typeparam name="T">用户对象</typeparam>
    public interface UserDal<T>
    {
        /// <summary>
        /// 创建一个用户的方法
        /// </summary>
        /// <param name="user">用户对象</param>
        /// <returns>影响数据库记录行数</returns>
        int CreateNewUser(T user);

        /// <summary>
        /// 修改一个用户的方法
        /// </summary>
        /// <param name="user">用户对象</param>
        /// <returns>影响数据库记录行数</returns>
        int ModifyUser(T user);

        int ModifyUserInfo(T user);
        /// <summary>
        /// 删除一个用户的方法
        /// </summary>
        /// <param name="user">用户对象</param>
        /// <returns>影响数据库记录行数</returns>
        int DeleteUser(T user);

        /// <summary>
        /// 用户登录方法
        /// </summary>
        /// <param name="account">帐号</param>
        /// <param name="password">密码</param>
        /// <returns>用户对象</returns>
        T Login(string account, string password);

        /// <summary>
        /// 检测是否存在用户
        /// </summary>
        /// <param name="user">用户对象</param>
        /// <returns>存在的个数</returns>
        int ExsitUser(T user);

        /// <summary>
        /// 获取非验证用户的列表
        /// </summary>
        /// <returns>集合对象</returns>
        IList<T> SelectNoVerify();

        /// <summary>
        /// 获取验证用户的列表
        /// </summary>
        /// <returns>集合对象</returns>
        IList<T> SelectVerified();

        /// <summary>
        /// 获取用户列表
        /// </summary>
        /// <returns>集合对象</returns>
        IList<T> UserList();

        /// <summary>
        /// 将用户设为通过验证的用户的方法
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns>影响数据库记录行数</returns>
        int SetVerify(string userName);

        /// <summary>
        /// 将用户设为不同通过验证的用户的方法
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns>影响数据库记录行数</returns>
        int SetNoVerify(string userName);

        /// <summary>
        /// 根据用户名获取用户对象
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns>用户对象</returns>
        T GetUserInfo(string userName);

        /// <summary>
        /// 查询出活跃用户
        /// </summary>
        /// <returns>用户对象集合</returns>
        IList<T> SelectActiveUser();
    }
}
