package com.seer.teach.user.service;

import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.anno.Cached;
import com.baomidou.mybatisplus.extension.service.IService;
import com.seer.teach.user.entity.UserAuthEntity;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 用户第三方认证表（状态增强版） 服务类
 * </p>
 *
 * @author Wang
 * @since 2025-08-10 17:42:43
 */
public interface IUserAuthService extends IService<UserAuthEntity> {

    /**
     * 根据openid和unionid查询用户
     *
     * @param openid
     * @param unionid
     * @return UserEntity
     */
    /*@Cached(name = "userAuth:openid:unionid", expire = 86400, cacheType = CacheType.BOTH, key = "#openid + ':' + #unionid")*/
    UserAuthEntity getOneByOpenIdAndUnionId(String openid, String unionid);

    /**
     * 根据openid查询用户
     *
     * @param openid 微信平台对应应用的用户标识
     * @return UserEntity
     */
    /*@Cached(name = "userAuth:openid:", expire = 86400, cacheType = CacheType.BOTH,key = "#openid")*/
    UserAuthEntity getOneByOpenId(String openid);

    /**
     * 根据unionid查询用户
     *
     * @param unionid 微信平台的用户唯一标识
     * @return UserEntity 用户信息
     */
    /*@Cached(name = "userAuth:unionid:", expire = 86400, cacheType = CacheType.BOTH,key = "#unionid")*/
    UserAuthEntity getOneByUnionId(String unionid);

    /**
     * 根据用户ID和appId查询用户第三方信息
     *
     * @param userIds 用户ID
     * @param appId   应用ID
     * @return List<UserAuthEntity> 用户第三方信息
     */
    List<UserAuthEntity> getUserAuthListByUserIdsAndAppId(Collection<Integer> userIds, String appId);

    /**
     * 根据用户ID查询用户第三方信息
     *
     * @param userId 用户ID
     * @return List<UserAuthEntity> 用户第三方信息
     */
    List<UserAuthEntity> getUserAuthListByUserId(Integer userId);

    /**
     * 根据用户ID和appId查询用户第三方信息
     *
     * @param userId 用户ID
     * @param appId  应用ID
     * @return UserAuthEntity 用户第三方信息
     */
    UserAuthEntity getOneByUserIdAndAppId(Integer userId, String appId);
}
