用户注册
请参
private String account;
private String pwd;
private String name;
private String wxId;
@ApiModelProperty(notes="1=买家注册,2=卖家注册")
private Integer type;
思路: 根据account 查询是否存在;
不存在就注册.
存在就返回登录;
这里要注意的是:pwd 加密;
用户登录
请参
/**
* Description 用户登录
* @author zhaozheng
* @Date 2018年12月10日
* @param request
* @param httpServletRequest
* @return ApiResponse
*/
@ApiOperation(value = "user_login")
@RequestMapping(value = "/user/login", method = RequestMethod.POST)
public ApiResponse user(@RequestBody HashMap<String, Object> request,
HttpServletRequest httpServletRequest) {
String account=(String) request.get("account");
String password=(String) request.get("password");
return userService.user(account,password);
}
/**
service 层
*/
@Override
public ApiResponse user(String account, String password) {
if (UserFacade.checkUserExist(account, password)) {
return new ApiResponse(CodeEnum.SUCCESS);
}
return new ApiResponse(CodeEnum.FAILED);
}
/**
facade 层
*/
@Override
public Boolean checkUserExist(String account, String pwd) {
Query query=new Query();
query.addCriteria(Criteria.where("account").is(account).and("pwd").is(pwd));
//mongoTemplate exists方法判断是否存在查询条件的值.存在返回 true 不存在返回false. 此处利用枚举值来管理table名称;
return mongoTemplate.exists(query, CollectionNameEnum.USER_TABLE.getName());
}
思路: 根据传入 账号和密码 去数据库查询验证.
成功-->返回token,
不存在-->发挥code码提示
用户修改个人资料
请参
/*controller 层 */
@ApiOperation(value = "user_update pwd or name")
@RequestMapping(value = "/user/{user_id}/update", method = RequestMethod.POST)
public ApiResponse user(@PathVariable(value = "user_id") String userId, @RequestBody RegisterParam request,
HttpServletRequest httpServletRequest) {
return userService.user(userId, request);
}
/*service 层 */
@Override
public ApiResponse user(String userId, RegisterParam request) {
Optional<RegisterParam> optional = Optional.ofNullable(request);
//jdk1.8新特性 Optional 优化的避免空指针异常.
Optional<String> name = optional.map(user -> user.getName());
Optional<String> pwd = optional.map(user -> user.getPwd());
Query query = new Query();
query.addCriteria(new Criteria().where("_id").is(userId));
Update update = new Update();
//根据判断 传入name 是否为null 判断是否要更新.
if (name.isPresent()) {
update.set("name", request.getName());
}
//根据判断 传入pwd 是否为null 判断是否要更新.
if (pwd.isPresent()) {
update.set("pwd", request.getPwd());
}
String collectionName = "wx_user";
//mongoTemplate 的update 方法有很多. 这里使用updateFirst 来更新第一个(如果存在多个的话.)
UpdateResult result = mongoTemplate.updateFirst(query, update, collectionName);
//UpdateResult 是更新后的返回对象, 其中参数modifyCount 表示更新了几个. 如果大于0 表示更新成功.
return new ApiResponse(CodeEnum.SUCCESS, result);
}
/*facade 层 */
思路: 根据 user_id 来判断是否存在用户.
存在-->更新资料
不存在--->返回code码提示信息
这里需要注意的是: 验证用户是否存在,数据量过大(百万/千万)的情况下,再去查询数据库是比较非常耗时的. 所以这里后期会用到
redis缓存中间件,还有Bloom Filter(布隆过滤器).bloom filter文章链接:
(判断一个元素在亿级数据中是否存在 )
来优化这里用户登录;