using Elasticsearch.Net;
using JiaZhiQuan.Common.ElasticSearch;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Senparc.Weixin.MP.Containers;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Dynamic;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Wicture.DbRESTFul;
using Wicture.DbRESTFul.Cache;
using Wicture.DbRESTFul.Infrastructure.Repository;
namespace JiaZhiQuan.Common
{
public static partial class RepositoryExtension
{
///
/// 检查拉黑情况
/// 如果用户主动拉黑,则 返回 您已拉黑此用户,无法进行此操作
/// 如果被其他用户拉黑,则 返回 由于用户隐私设置,无法进行此操作
/// 如果正常,则返回 null
///
public async static Task CheckInBlacklist(this DbRESTFulRepository repository, long userId, IList blackUserIds, IDbConnection conn = null, string errorMessage = "无法进行此操作")
{
var query = new { userId, blackUserIds };
var id = await repository.QuerySingleOrDefaultAsync("select id from n_user_blacklist where userId=@userId and blackUserId in @blackUserIds limit 1", query, conn);
if (id > 0)
{
throw new LogicalException($"您已拉黑此用户,{errorMessage}");
}
id = await repository.QuerySingleOrDefaultAsync("select id from n_user_blacklist where blackUserId=@userId and userId in @blackUserIds limit 1", query, conn);
if (id > 0)
{
throw new LogicalException($"由于对方隐私设置,{errorMessage}");
}
return null;
}
///
/// 获取当前用户的黑名单
///
public async static Task> GetBlackUserIdList(this DbRESTFulRepository repository, long userId = 0, IDbConnection conn = null)
{
if (userId == 0)
{
userId = long.Parse(repository.Context?.Identity?.Id ?? "0");
}
if (userId > 0)
{
var list = (await repository.QueryAsync("select userId, blackUserId from n_user_blacklist where userId=@userId or blackUserId=@userId", new { userId }, conn)).ToList();
var set = new HashSet();
list.ForEach(e =>
{
if (e.userId != userId) set.Add(e.userId);
if (e.blackUserId != userId) set.Add(e.blackUserId);
});
return set.ToList();
}
return new List();
}
}
}