更新一键登录
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package com.vetti.hotake.domain;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 社交登录日志对象 hotake_social_login_log
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
@Data
|
||||
public class HotakeSocialLoginLog implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("系统用户ID")
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("第三方平台类型")
|
||||
private String provider;
|
||||
|
||||
@ApiModelProperty("第三方平台用户ID")
|
||||
private String providerUserId;
|
||||
|
||||
@ApiModelProperty("登录类型:login/register/bind")
|
||||
private String loginType;
|
||||
|
||||
@ApiModelProperty("登录IP")
|
||||
private String loginIp;
|
||||
|
||||
@ApiModelProperty("登录地点")
|
||||
private String loginLocation;
|
||||
|
||||
@ApiModelProperty("浏览器类型")
|
||||
private String browser;
|
||||
|
||||
@ApiModelProperty("操作系统")
|
||||
private String os;
|
||||
|
||||
@ApiModelProperty("登录状态(0成功 1失败)")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("提示消息")
|
||||
private String msg;
|
||||
|
||||
@ApiModelProperty("登录时间")
|
||||
private Date loginTime;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.vetti.hotake.domain;
|
||||
|
||||
import com.vetti.common.core.domain.BaseEntity;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 用户社交账号绑定对象 hotake_social_user
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class HotakeSocialUser extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("系统用户ID")
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("第三方平台类型:google/microsoft/linkedin")
|
||||
private String provider;
|
||||
|
||||
@ApiModelProperty("第三方平台用户唯一标识")
|
||||
private String providerUserId;
|
||||
|
||||
@ApiModelProperty("第三方平台邮箱")
|
||||
private String email;
|
||||
|
||||
@ApiModelProperty("第三方平台用户名")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("第三方平台头像URL")
|
||||
private String avatar;
|
||||
|
||||
@ApiModelProperty("访问令牌")
|
||||
private String accessToken;
|
||||
|
||||
@ApiModelProperty("刷新令牌")
|
||||
private String refreshToken;
|
||||
|
||||
@ApiModelProperty("令牌过期时间")
|
||||
private Date tokenExpireTime;
|
||||
|
||||
@ApiModelProperty("第三方平台原始用户信息JSON")
|
||||
private String rawUserInfo;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.vetti.hotake.domain.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* 社交登录请求DTO
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
@Data
|
||||
public class HotakeSocialLoginRequestDto {
|
||||
|
||||
@NotBlank(message = "平台类型不能为空")
|
||||
@ApiModelProperty(value = "第三方平台类型:google/microsoft/linkedin", required = true)
|
||||
private String provider;
|
||||
|
||||
@NotBlank(message = "授权码不能为空")
|
||||
@ApiModelProperty(value = "OAuth授权码", required = true)
|
||||
private String code;
|
||||
|
||||
@NotBlank(message = "用户类型不能为空")
|
||||
@ApiModelProperty(value = "用户类型(interviewer:面试官,candidate:候选者)", required = true)
|
||||
private String sysUserType;
|
||||
|
||||
@ApiModelProperty("state参数(用于防止CSRF攻击)")
|
||||
private String state;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.vetti.hotake.domain.dto;
|
||||
|
||||
import com.vetti.common.core.domain.entity.SysUser;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 社交登录返回结果DTO
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
@Data
|
||||
public class HotakeSocialLoginResultDto {
|
||||
|
||||
@ApiModelProperty("令牌")
|
||||
private String token;
|
||||
|
||||
@ApiModelProperty("用户ID")
|
||||
private Long userId;
|
||||
|
||||
@ApiModelProperty("用户类型(interviewer:面试官,candidate:候选者)")
|
||||
private String sysUserType;
|
||||
|
||||
@ApiModelProperty("是否新注册用户(true:新注册,false:已存在用户登录)")
|
||||
private Boolean isNewUser;
|
||||
|
||||
@ApiModelProperty("第三方平台类型")
|
||||
private String provider;
|
||||
|
||||
@ApiModelProperty("用户信息对象")
|
||||
private SysUser user;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.vetti.hotake.domain.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 第三方平台用户信息DTO(统一格式)
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
@Data
|
||||
public class HotakeSocialUserInfoDto {
|
||||
|
||||
@ApiModelProperty("第三方平台类型")
|
||||
private String provider;
|
||||
|
||||
@ApiModelProperty("第三方平台用户唯一标识")
|
||||
private String providerUserId;
|
||||
|
||||
@ApiModelProperty("邮箱")
|
||||
private String email;
|
||||
|
||||
@ApiModelProperty("用户名/昵称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("头像URL")
|
||||
private String avatar;
|
||||
|
||||
@ApiModelProperty("访问令牌")
|
||||
private String accessToken;
|
||||
|
||||
@ApiModelProperty("刷新令牌")
|
||||
private String refreshToken;
|
||||
|
||||
@ApiModelProperty("令牌有效期(秒)")
|
||||
private Long expiresIn;
|
||||
|
||||
@ApiModelProperty("原始用户信息JSON")
|
||||
private String rawUserInfo;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.vetti.hotake.mapper;
|
||||
|
||||
import com.vetti.hotake.domain.HotakeSocialLoginLog;
|
||||
|
||||
/**
|
||||
* 社交登录日志Mapper接口
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
public interface HotakeSocialLoginLogMapper {
|
||||
|
||||
/**
|
||||
* 新增社交登录日志
|
||||
*/
|
||||
int insert(HotakeSocialLoginLog log);
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.vetti.hotake.mapper;
|
||||
|
||||
import com.vetti.hotake.domain.HotakeSocialUser;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户社交账号绑定Mapper接口
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
public interface HotakeSocialUserMapper {
|
||||
|
||||
/**
|
||||
* 根据provider和providerUserId查询社交用户
|
||||
*/
|
||||
HotakeSocialUser selectByProviderAndProviderUserId(@Param("provider") String provider,
|
||||
@Param("providerUserId") String providerUserId);
|
||||
|
||||
/**
|
||||
* 根据用户ID和provider查询社交绑定
|
||||
*/
|
||||
HotakeSocialUser selectByUserIdAndProvider(@Param("userId") Long userId, @Param("provider") String provider);
|
||||
|
||||
/**
|
||||
* 根据用户ID查询所有社交绑定
|
||||
*/
|
||||
List<HotakeSocialUser> selectByUserId(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 新增社交用户绑定
|
||||
*/
|
||||
int insert(HotakeSocialUser socialUser);
|
||||
|
||||
/**
|
||||
* 更新社交用户绑定
|
||||
*/
|
||||
int update(HotakeSocialUser socialUser);
|
||||
|
||||
/**
|
||||
* 删除社交用户绑定(逻辑删除)
|
||||
*/
|
||||
int deleteById(@Param("id") Long id);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.vetti.hotake.service;
|
||||
|
||||
import com.vetti.common.core.domain.entity.SysUser;
|
||||
import com.vetti.hotake.domain.HotakeSocialUser;
|
||||
import com.vetti.hotake.domain.dto.HotakeSocialLoginRequestDto;
|
||||
import com.vetti.hotake.domain.dto.HotakeSocialLoginResultDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 社交用户服务接口
|
||||
*
|
||||
* @author vetti
|
||||
*/
|
||||
public interface IHotakeSocialUserService {
|
||||
|
||||
/**
|
||||
* 社交登录(登录或自动注册)
|
||||
*
|
||||
* @param requestDto 社交登录请求
|
||||
* @return 登录结果
|
||||
*/
|
||||
HotakeSocialLoginResultDto socialLogin(HotakeSocialLoginRequestDto requestDto);
|
||||
|
||||
/**
|
||||
* 获取OAuth授权URL
|
||||
*
|
||||
* @param provider 平台类型
|
||||
* @param state state参数
|
||||
* @return 授权URL
|
||||
*/
|
||||
String getAuthorizationUrl(String provider, String state);
|
||||
|
||||
/**
|
||||
* 根据用户ID查询绑定的社交账号
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 社交账号列表
|
||||
*/
|
||||
List<HotakeSocialUser> listByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 解绑社交账号
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @param provider 平台类型
|
||||
*/
|
||||
void unbind(Long userId, String provider);
|
||||
}
|
||||
@@ -129,8 +129,8 @@ public class HotakeReferenceCheckServiceImpl extends BaseServiceImpl implements
|
||||
|
||||
if (CollectionUtil.isNotEmpty(cvInfoList)) {
|
||||
HotakeCvInfo cvInfo = cvInfoList.get(0);
|
||||
if (StrUtil.isNotEmpty(cvInfo.getAnalyzedCvJson())) {
|
||||
HotakeCvInfoDto cvInfoDto = JSONUtil.toBean(cvInfo.getAnalyzedCvJson(), HotakeCvInfoDto.class);
|
||||
if (StrUtil.isNotEmpty(cvInfo.getCvTemplateJson())) {
|
||||
HotakeCvInfoDto cvInfoDto = JSONUtil.toBean(cvInfo.getCvTemplateJson(), HotakeCvInfoDto.class);
|
||||
if (cvInfoDto != null && CollectionUtil.isNotEmpty(cvInfoDto.getExperience())) {
|
||||
experienceList = cvInfoDto.getExperience();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user