
package com.tmerclub.cloud.auth.mapper;

import com.tmerclub.cloud.api.auth.vo.AuthSocialVO;
import com.tmerclub.cloud.auth.model.AuthSocial;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户社交登陆信息
 *
 * @author lhd
 * @date 2021-01-06 10:26:53
 */
public interface AuthSocialMapper {

    /**
     * 保存用户社交登陆信息
     *
     * @param authSocial 用户社交登陆信息
     */
    void save(@Param("authSocial") AuthSocial authSocial);

    /**
     * 更新用户社交登陆信息
     *
     * @param authSocial 用户社交登陆信息
     */
    void update(@Param("authSocial") AuthSocial authSocial);

    /**
     * 根据社交账号userId和类型获取用户社交账号信息
     *
     * @param bizUserId  第三方系统userId
     * @param socialType 第三方系统类型
     * @return 用户社交账号信息
     */
    AuthSocial getByBizUserIdAndType(@Param("bizUserId") String bizUserId, @Param("socialType") Integer socialType);

    /**
     * 获取根据尝试社交登录时，保存的临时的uid获取社交
     *
     * @param tempUid tempUid
     * @return 用户社交账号信息
     */
    AuthSocial getByTempUid(@Param("tempUid") String tempUid);

    /**
     * 绑定社交账号，通过tempuid
     *
     * @param uid     uid
     * @param tempUid tempUid
     */
    void bindUidByTempUid(@Param("uid") Long uid, @Param("tempUid") String tempUid);

    /**
     * 获取在微信公众号/小程序 绑定的账号数量
     *
     * @param uid        uid
     * @param socialType 社交帐号类型
     * @return 绑定账号的数量
     */
    int countByUidAndSocialType(@Param("uid") Long uid, @Param("socialType") Integer socialType);


    /**
     * 解除用户绑定
     *
     * @param bizUserId  openid
     * @param socialType 社交账号类型
     */
    void unBindUser(@Param("bizUserId") String bizUserId, @Param("socialType") Integer socialType);

    /**
     * 解除用户绑定
     *
     * @param uid 用户id
     */
    void unBindUserByUid(@Param("uid") Long uid);

    /**
     * 获取可用的社交账号
     * @return
     */
    List<AuthSocialVO> listAvailableSocial();

    /**
     * 根据平台唯一id uid 和类型获取用户社交账号信息
     *
     * @param uid  平台唯一id
     * @param socialType 第三方系统类型
     * @return 用户社交账号信息
     */
    AuthSocial getByUidAndType(@Param("uid") Long uid, @Param("socialType") Integer socialType);
}
