package cn.ictgu.serv.service;
import cn.ictgu.redis.RedisTokenManager;
import cn.ictgu.serv.mapper.UserMapper;
import cn.ictgu.serv.model.User;
import cn.ictgu.serv.service.UserService;
import cn.ictgu.tools.mail.MailService;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
/**
* 用户管理
* Created by Silence on 2017/4/11.
*/
@Service
@Log4j2
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper mapper;
@Autowired
private RedisTokenManager tokenManager;
@Autowired
private MailService mailService;
public boolean updateNickname(Long id, String nickname){
return mapper.updateNicknameById(id, nickname) > 0;
}
public User getById(Long id){
return mapper.selectById(id);
}
public User getByEmail(String email){
return mapper.selectByEmail(email);
}
public boolean signUp(User user){
String email = user.getEmail();
if (existEmail(email)){
log.error("用户注册,邮箱已注册:" + email);
return false;
}
sendValidateEmail(user);
return true;
}
public User completeSignUp(String token){
User user = tokenManager.getUserOfSignUp(token);
if (user != null){
if (existEmail(user.getEmail())){
user = mapper.selectByEmail(user.getEmail());
}else {
mapper.insert(user);
}
return user;
}
return null;
}
@Async
private void sendValidateEmail(User user){
String token = tokenManager.getTokenOfSignUp(user);
log.error("用户注册,准备发送邮件:User:" + JSONObject.toJSONString(user) + ", Token: " + token);
mailService.userValidate(user, token);
}
private boolean existEmail(String email){
return mapper.selectByEmail(email) != null;
}
}