package org.xmx0632.deliciousfruit.api.v1;
import java.util.Set;
import javax.servlet.ServletRequest;
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.xmx0632.deliciousfruit.api.v1.bo.LoginResponse;
import org.xmx0632.deliciousfruit.api.v1.bo.MobileUser;
import org.xmx0632.deliciousfruit.api.v1.bo.Result;
import org.xmx0632.deliciousfruit.api.v1.bo.UpdatePwdRequest;
import org.xmx0632.deliciousfruit.api.v1.bo.UpdatePwdResponse;
import org.xmx0632.deliciousfruit.api.v1.bo.UpdateRequest;
import org.xmx0632.deliciousfruit.api.v1.bo.UpdateResponse;
import org.xmx0632.deliciousfruit.api.v1.helper.PasswordHelper;
import org.xmx0632.deliciousfruit.api.v1.helper.WebHelper;
import org.xmx0632.deliciousfruit.entity.UserAccount;
import org.xmx0632.deliciousfruit.service.UserAccountService;
/**
* UserAccount的API的Controller.
*
* @author xmx0632
*/
@Controller
@RequestMapping(value = "/api/v1/user")
public class UserAccountApiController {
private static Logger log = LoggerFactory
.getLogger(UserAccountApiController.class);
@Autowired
private UserAccountService userAccountService;
@Autowired
private Validator validator;
@RequestMapping(value = "/login", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<LoginResponse> login(ServletRequest request) {
UserAccount userAccount = WebHelper.getCurrentUser(request);
log.debug("UserAccount:{}", userAccount);
LoginResponse response = new LoginResponse();
response.setResult(Result.SUCCESS_RESULT);
response.setUser(BeanMapper.map(userAccount, MobileUser.class));
log.debug("response:{}", response);
return new ResponseEntity<LoginResponse>(response, HttpStatus.OK);
}
@RequestMapping(value = "/update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<UpdateResponse> update(
@RequestBody UpdateRequest updateRequest, ServletRequest request) {
UserAccount userAccount = WebHelper.getCurrentUser(request);
log.debug("UserAccount:{}", userAccount);
log.debug("Request:{}", updateRequest);
// 用UpdateRequest决定哪些属性可以被更新
BeanMapper.copy(updateRequest, userAccount);
Set<ConstraintViolation<UserAccount>> failures = validator
.validate(userAccount);
if (!failures.isEmpty()) {
UpdateResponse response = UpdateResponse
.createFailResponse("invalid property");
response.setErr(BeanValidators.extractPropertyAndMessage(failures));
log.debug("response:{}", response);
return new ResponseEntity<UpdateResponse>(response, HttpStatus.OK);
}
// UpdateRequest
userAccount.setCustomerName(updateRequest.getCustomerName());
userAccount.setEmail(updateRequest.getEmail());
userAccount.setSex(updateRequest.getSex());
userAccount.setMobile(updateRequest.getMobile());
userAccountService.saveUserAccount(userAccount);
UpdateResponse response = new UpdateResponse();
response.setResult(Result.SUCCESS_RESULT);
log.debug("response:{}", response);
return new ResponseEntity<UpdateResponse>(response, HttpStatus.OK);
}
@RequestMapping(value = "/changePwd", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<UpdatePwdResponse> changePwd(
@RequestBody UpdatePwdRequest updatePwdRequest,
ServletRequest request) {
UserAccount userAccount = WebHelper.getCurrentUser(request);
log.debug("UserAccount:{}", userAccount);
log.debug("Request:{}", updatePwdRequest);
if (StringUtils.isNotBlank(updatePwdRequest.getPwd())) {
String encodedPassword = PasswordHelper.md5(updatePwdRequest
.getPwd());
userAccount.setPassword(encodedPassword);
}
userAccountService.saveUserAccount(userAccount);
UpdatePwdResponse response = new UpdatePwdResponse();
response.setResult(Result.SUCCESS_RESULT);
log.debug("response:{}", response);
return new ResponseEntity<UpdatePwdResponse>(response, HttpStatus.OK);
}
private UserAccount getCurrentUser(ServletRequest request) {
return WebHelper.getCurrentUser(request);
}
}