/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.vlabs.umt.services.user;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import cn.vlabs.umt.services.user.bean.BindInfo;
import cn.vlabs.umt.services.user.bean.User;
import cn.vlabs.umt.services.user.bean.UserField;
import cn.vlabs.umt.services.user.exception.InvalidUserNameException;
import cn.vlabs.umt.services.user.exception.UserNotFound;
/**
* 用户服务的接口
* @author xiejj@cnic.cn
*
* @creation Dec 7, 2009 11:32:26 AM
*/
public interface UserService {
static final String BEAN_ID="UserService";
/**
* 创建新用户
* @param user 用户的信息
* @param status 账户创建,是否带激活
* @return 用户ID
* @throws InvalidUserNameException 如果用户名不是合法的Email格式则抛出该异常
*/
int create(User user,String status) throws InvalidUserNameException ;
/**
* 查询用户
* @param umtId 用户名
* @return 用户信息
*/
User getUserByUmtId(String umtId);
/**
* 批量查询用户
* */
List<User> getUsersByUmtId(List<String> umtId);
/**
* 查询用户,用uid
* */
User getUserByUid(int uid);
/**
* 查询用户
* @param openid openid信息
* @return 用户信息
*/
User getUserByOpenid(String openid,String type,String url);
/**
* 查询用户,根据登录名
* @param loginName 登陆名
* */
User getUserByLoginName(String loginName);
/**
* 删除用户
* @param userid 用户的ID
*/
void removeByUid(int userid);
/**
* 更新用户信息
* @param user 用户信息
*/
void update(User user);
/**
* 更新用户信息
* @param user
* @param withPassword
*/
void update(User user, boolean withPassword);
/**
* 更新账户的某一个属性
* @param columName 字段名
* @param value 值
* @param username 登陆邮箱或者userKey
*
* */
void updateValueByColumn(int uid,String columnName,String value);
void updateValueByColumn(int[] uid,String columnName,String value);
/**
* 修改用户密码
* @param username 用户名
* @param password 新密码
*/
void updatePassword(int uid, String password);
/**
* 修改CoreMail用户密码
* */
void updateCoreMailPassword(String username,String password);
/**
* 发送用户修改密码的邮件
* @param locale 国际化
* @param username 用户名
* @param baseUrl 本机器的根地址
* @param type security or login
* @throws UserNotFound
*/
void sendChangeMail(Locale locale,int uid,String username,String baseURL) throws UserNotFound;
/**
* 发送注册验证邮箱,以后更改登录名后难免也要激活
* @param locale 主要用来取国际化参数
* @param uid 用户id
* @param userName 要发送的地址,也就是刚注册成功或者更换成功的账户
* @param activeUrl 激活地址
* @param changeLoginName 是否是更改登录名
*/
void sendActivicationLoginMail(Locale locale,int uid,String loginName,String activeUrl,boolean changeLoginName,int loginNameInfoId);
/**
* 发送主账号激活码和密保邮箱,从邮箱点的话,两者皆可激活
* @param locale 主要用来取国际化参数
* @param uid 用户id
* @param userName 要发送的地址,也就是刚注册成功或者更换成功的账户
* @param activeUrl 激活地址
* @param loginNameInfoId 账户Id
* @return
*
* */
boolean sendActivateionLoginMailAndSecurity(Locale locale,int uid,String loginName,String baseUrl,int loginNameInfoId);
/**
* 提交确认邮件
* @param locale 国际化参数
* @param uid 用户id
* @param oldLoginName 老主账户名
* @param baseUrl 基本路径
* */
void sendComfirmToOldMail(Locale locale,int uid,String oldloginName,String baseUrl);
/**
* 发送注册验证邮箱,以后更改登录名后难免也要激活
* @param locale 主要用来取国际化参数
* @param uid 用户id
* @param loginName 要发送的地址,也就是刚注册成功或者更换成功的账户
* @param activeUrl 激活地址
* @param loginNameId 用户名id
* @param isChange 是否是更改激活
*/
public void sendActivicationSecondaryEmail(Locale locale,int uid,String loginName,String activeUrl,int loginNameId,boolean isChange);
/**
* 发送注册密保邮箱,以后更改登录名后难免也要激活
* @param locale 主要用来取国际化参数
* @param loginEmail
* @param securityEmail 要发送的地址,也就是刚注册成功或者更换成功的账户
* @param activeUrl 激活地址
* @return null
* */
public void sendActivicationSecurityMail(Locale locale,int uid,String securityEmail,String activeUrl);
/**
* 应用调用的时候
* */
public void sendWarnUCUser(String umtId,String baseUrl);
/**
* 删除Token
* @param tokenid tokend的ID?
*/
void removeToken(int tokenid);
/**
* 查询用户总数
* @return
*/
int getUserCount();
/**
* 查询用户信息
* @param start
* @param recordPerPage
* @return
*/
Collection<User> getUsers(int start, int count);
/**
* 删除用户
* @param usernames
*/
void remove(int[] uids);
/**
* 判断用户是否存在
* @param usernames
* @return
*/
Set<String> isExist(String... usernames);
/**
* 查询用户,老方法,不建议使用
* @param query
* @return
*/
Collection<User> search(String query,int start, int count);
/**
* 查询用户,老方法,不建议使用
* @param query
* @param start
* @param count
* @param orderBy "username, email, truename"
* @param isAscendent
* @return
*/
Collection<User> search(String query,int start, int count, UserField orderBy, boolean isAscendent);
/**
* 只查询umt用户
* @param keyword 关键字
* @param offset 偏移
* @param size 数量
* */
Collection<User> searchUmtOnly(String keyword,int offset,int size);
/**
* 查询用户,老方法,不建议使用,建议使用
* @param query
* @return
*/
int searchCount(String query);
/**
* 查询用户,而且,只查询umt用户
* */
/**
* 批量创建用户
* @param users
*/
void create(List<User> users);
/**
* 获取一个用户的密保邮箱,已激活的
* @param uid
* @return securityEmail
* */
String getSecurityEmail(int uid);
/**
* 获取一个用户的密保邮箱,未激活的
* @param uid
* @return securityEmail
* */
String getTempSecurityEmail(int uid);
/**
* 用户是否验证过主账号
* @param uid 用户id
* @param email 主账号登陆名
**/
boolean isActivePrimaryEmail(String email);
/***
* 用户绑定第三方账户
* @param uid umtUid
* @param screenName 第三方用户名
* @param openId 第三方用户标识
* @param type 第三方类型
*/
void bindThirdParty(BindInfo bindInfo);
/**
* 获取用户的第三方信息
* */
List<BindInfo> getBindInfosByUid(int uid);
/**
* 解除与第三方的绑定关系
* @param bindId 绑定id
* */
void deleteBindById(int bindId);
/**
* 解除与第三方的绑定关系
* @param bindId 绑定id
* */
void deleteBindByUid(int uid);
/**
* 获得最大的umtId
* */
String getLastedUmtId();
/**
* 当前账户名,是否被使用
* @param loginName
* @return 1,可用, 2,已被使用,3,域名不允许注册,4,其他验证错误
*
**/
int USER_NAME_UNUSED=1;
int USER_NAME_USED=2;
int USER_NAME_DOMAIN_NOT_ALLOWD=3;
int USER_NAME_VALIDATE_ERROR=4;
int isUsed(String loginName);
/**
* 除了本人,其他的冗余信息全部删掉,因为有抢注存在,慎用
* */
void removeUserExpectMe(String loginName,int uid);
/**
* 同步coreMail用户,如果存在则不管,如果不存在则
* 返回loginNameInfoId
* */
User upgradeCoreMailUser(String loginName);
/**
* 更新用户状态
* */
void switchGEOInfo(User user);
}