package com.iotechn.unimall.app.api.user; import com.iotechn.unimall.data.dto.UserDTO; import com.dobbinsoft.fw.core.Const; import com.dobbinsoft.fw.core.annotation.*; import com.dobbinsoft.fw.core.annotation.param.NotNull; import com.dobbinsoft.fw.core.annotation.param.TextFormat; import com.dobbinsoft.fw.core.exception.ServiceException; import com.iotechn.unimall.data.enums.UserLoginType; /** * Created by rize on 2019/6/30. */ @HttpOpenApi(group = "user", description = "用户服务") public interface UserService { @HttpMethod(description = "发送验证码到用户手机", rate = 10, rateLimit = RateLimitType.IP) public String sendVerifyCode( @NotNull(message = "手机号不能为空") @TextFormat(length = 11, message = "手机号长度为11位") @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "用户手机号") String phone) throws ServiceException; @HttpMethod(description = "用户注册") public String register( @NotNull(message = "手机号不能为空") @TextFormat(length = 11, message = "手机号长度为11位") @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "用户手机号") String phone, @NotNull(message = "密码不能为空") @TextFormat(lengthMin = 8, lengthMax = 18, notChinese = true, message = "密码长度为8到18位") @HttpParam(name = "password", type = HttpParamType.COMMON, description = "用户密码") String password, @NotNull(message = "请输入验证码") @HttpParam(name = "verifyCode", type = HttpParamType.COMMON, description = "注册验证码") String verifyCode, @HttpParam(name = "ip", type = HttpParamType.IP, description = "用户Ip") String ip) throws ServiceException; @HttpMethod(description = "用户绑定手机号") public String bindPhone( @NotNull @TextFormat(length = 11) @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "用户手机号") String phone, @NotNull(message = "请输入注册验证码") @HttpParam(name = "verifyCode", type = HttpParamType.COMMON, description = "注册验证码") String verifyCode, @NotNull @HttpParam(name = Const.USER_ACCESS_TOKEN, type = HttpParamType.HEADER, description = "用户访问") String accessToken, @NotNull @HttpParam(name = "userId", type = HttpParamType.USER_ID, description = "用户Id") Long userId) throws ServiceException; @HttpMethod(description = "用户重置密码") public String resetPassword( @NotNull @TextFormat(length = 11) @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "用户手机号") String phone, @NotNull @TextFormat(lengthMin = 8, lengthMax = 18, notChinese = true) @HttpParam(name = "password", type = HttpParamType.COMMON, description = "用户密码") String password, @NotNull @HttpParam(name = "verifyCode", type = HttpParamType.COMMON, description = "注册验证码") String verifyCode) throws ServiceException; @HttpMethod(description = "密码登录") public UserDTO login( @NotNull(message = "请输入手机号") @HttpParam(name = "phone", type = HttpParamType.COMMON, description = "用户手机号") String phone, @NotNull(message = "请输入密码") @TextFormat(lengthMin = 8, lengthMax = 18, notChinese = true, message = "密码长度8到18位") @HttpParam(name = "password", type = HttpParamType.COMMON, description = "用户密码") String password, @NotNull @HttpParam(name = "platform", type = HttpParamType.COMMON, description = "登录平台") Integer platform, @NotNull @HttpParam(name = "ip", type = HttpParamType.IP, description = "登录IP") String ip) throws ServiceException; @HttpMethod(description = "用户注销") public String logout( @NotNull @HttpParam(name = Const.USER_ACCESS_TOKEN, type = HttpParamType.HEADER, description = "用户访问") String accessToken, @NotNull @HttpParam(name = "userId", type = HttpParamType.USER_ID, description = "用户Id") Long userId) throws ServiceException; /** * 首次第三方登录时,系统会记录OPEN_ID。但此时,用户无法产生用户数据 * 当用户完善手机号,或通过微信自动获取、或通过自助绑定手机号获取。 * 绑定完成后,用户可正常使用此系统。 * * 若用户手机已经存在(例如,先从支付宝登录、后用微信登录,使用同一个手机号、系统会将OPEN_ID合并到之前的账号上) * * @param loginType * @param platform 登录平台 与 PayPlatform一致 * @param ip * @param raw * @return * @throws ServiceException */ @HttpMethod(description = "第三方登录") public UserDTO thirdPartLogin( @NotNull @HttpParam(name = "loginType", type = HttpParamType.COMMON, description = "第三方代号", enums = UserLoginType.class) Integer loginType, @NotNull @HttpParam(name = "platform", type = HttpParamType.COMMON, description = "登录平台") Integer platform, @NotNull @HttpParam(name = "ip", type = HttpParamType.IP, description = "用户Ip") String ip, @NotNull @HttpParam(name = "raw", type = HttpParamType.COMMON, description = "第三方平台返回的数据") String raw) throws ServiceException; @HttpMethod(description = "获取手机号") public String getWxPhone( @NotNull @HttpParam(name = "raw", type = HttpParamType.COMMON, description = "小程序登录,wx.login()返回的数据串") String raw, @NotNull @HttpParam(name = "encryptedData", type = HttpParamType.COMMON, description = "包括敏感数据在内的完整用户信息的加密数据") String encryptedData, @NotNull @HttpParam(name = "iv", type = HttpParamType.COMMON, description = "加密算法的初始向量") String iv, @NotNull @HttpParam(name = Const.USER_ACCESS_TOKEN, type = HttpParamType.HEADER, description = "用户访问") String accessToken, @NotNull @HttpParam(name = "userId", type = HttpParamType.USER_ID, description = "用户Id") Long userId) throws ServiceException; @HttpMethod(description = "同步用户信息") public String syncUserInfo( @HttpParam(name = "nickname", type = HttpParamType.COMMON, description = "用户昵称") String nickname, @HttpParam(name = "avatarUrl", type = HttpParamType.COMMON, description = "用户头像url") String avatarUrl, @HttpParam(name = "province", type = HttpParamType.COMMON, description = "省份") String province, @HttpParam(name = "city", type = HttpParamType.COMMON, description = "市") String city, @HttpParam(name = "county", type = HttpParamType.COMMON, description = "区") String county, @HttpParam(name = "gender", type = HttpParamType.COMMON, description = "性别0未知1男2女") Integer gender, @HttpParam(name = "birthday", type = HttpParamType.COMMON, description = "用户生日") Long birthday, @HttpParam(name = Const.USER_ACCESS_TOKEN, type = HttpParamType.HEADER, description = "访问令牌") String accessToken, @NotNull @HttpParam(name = "userId", type = HttpParamType.USER_ID, description = "用户ID") Long userId) throws ServiceException; /** * H5 页面签名 * 当H5页面需要调用微信的API时,微信为防止DNS劫持等情况,他是需要对每个页面进行签名的 * * @param url * @return * @throws ServiceException */ @HttpMethod(description = "获取H5签名") public Object getH5Sign( @NotNull @HttpParam(name = "url", type = HttpParamType.COMMON, description = "url") String url) throws ServiceException; @HttpMethod(description = "检测登录") public Boolean checkLogin( @NotNull @HttpParam(name = Const.USER_ACCESS_TOKEN, type = HttpParamType.HEADER, description = "token") String accessToken) throws ServiceException; @HttpMethod(description = "获取用户信息") public UserDTO info( @NotNull @HttpParam(name = Const.USER_ACCESS_TOKEN, type = HttpParamType.HEADER, description = "token") String accessToken, @NotNull @HttpParam(name = "userId", type = HttpParamType.USER_ID, description = "用户ID") Long userId) throws ServiceException; }