package org.xmx0632.deliciousfruit.api.v1;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springside.modules.beanvalidator.BeanValidators;
import org.springside.modules.mapper.BeanMapper;
import org.springside.modules.utils.DateProvider;
import org.xmx0632.deliciousfruit.api.v1.bo.RegisterRequest;
import org.xmx0632.deliciousfruit.api.v1.bo.RegisterResponse;
import org.xmx0632.deliciousfruit.api.v1.bo.Result;
import org.xmx0632.deliciousfruit.api.v1.helper.PasswordHelper;
import org.xmx0632.deliciousfruit.entity.UserAccount;
import org.xmx0632.deliciousfruit.service.UserAccountService;
/**
* UserAccount的API的Controller.
*
* @author xmx0632
*/
@Controller
@RequestMapping(value = "/api/v1")
public class UserAccountRegisterApiController {
private static Logger log = LoggerFactory
.getLogger(UserAccountRegisterApiController.class);
private DateProvider dateProvider = DateProvider.DEFAULT;
@Autowired
private UserAccountService userAccountService;
@Autowired
private Validator validator;
@RequestMapping(value = "/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<?> register(
@RequestBody RegisterRequest registerRequest) {
log.debug("Request:{}", registerRequest);
String userName = "";
String phone = registerRequest.getPhone();
boolean isPhone = false;
if (phone != null && !"".equals(phone.trim())) {
userName = phone;
isPhone = true;
} else {
userName = registerRequest.getEmail();
}
long usernameCount = userAccountService.countByUsername(userName);
log.debug("userName:{} usernameCount:{}", userName, usernameCount);
if (usernameCount > 0) {
log.debug("exist {} userAccount with username({})", usernameCount,
userName);
log.debug("username {} exist", userName);
RegisterResponse response = RegisterResponse
.createUsernameExistResponse("username exist");
response.setErr(null);
log.debug("response:{}", response);
return new ResponseEntity<RegisterResponse>(response, HttpStatus.OK);
}
UserAccount userAccount = new UserAccount();
BeanMapper.copy(registerRequest, userAccount);
userAccount.setUsername(userName);
userAccount.setMobile(registerRequest.getPhone());
userAccount.setEmail(registerRequest.getEmail());
// 调用JSR303 Bean Validator进行校验,如果出错返回json格式的错误信息.
Set<ConstraintViolation<UserAccount>> failures = validator
.validate(userAccount);
if (!failures.isEmpty()) {
RegisterResponse response = RegisterResponse
.createFailResponse("invalid property");
response.setErr(BeanValidators.extractPropertyAndMessage(failures));
log.debug("response:{}", response);
return new ResponseEntity<RegisterResponse>(response, HttpStatus.OK);
}
userAccount.setPlatform(UserAccount.PLATFORM_MOBILE);
userAccount.setAccount(BigDecimal.ZERO);
userAccount.setCredit(0);
Date currentDate = dateProvider.getDate();
userAccount.setRegisterDate(currentDate);
userAccount.setCreateTime(currentDate);
userAccount.setGroupInfo("");
if (isPhone) {
if (StringUtils.isNotBlank(registerRequest.getVerifycode())) {
String encodedPassword = PasswordHelper.md5(registerRequest
.getVerifycode());
userAccount.setPassword(encodedPassword);
}
} else {
if (StringUtils.isNotBlank(registerRequest.getPwd())) {
String encodedPassword = PasswordHelper.md5(registerRequest
.getPwd());
userAccount.setPassword(encodedPassword);
}
}
userAccountService.saveUserAccount(userAccount);
RegisterResponse response = new RegisterResponse();
response.setResult(Result.SUCCESS_RESULT);
log.debug("response:{}", response);
return new ResponseEntity<RegisterResponse>(response, HttpStatus.OK);
}
}