using System.Collections.Generic;
using System.Threading.Tasks;
using MDL.Models;
using DAL.Interfaces;
using DB.Database;
using SqlSugar;
namespace DAL.Repositories
{
///
/// 客户API信息的数据访问实现类
///
public class CustomerApiRepository : ICustomerApiRepository
{
private readonly ISqlSugarProvider _provider;
///
/// 构造函数
///
/// SqlSugar数据库提供程序
public CustomerApiRepository(ISqlSugarProvider provider)
{
_provider = provider;
}
///
/// 创建客户API记录
///
/// 客户API实体
/// 创建的记录ID
public async Task CreateAsync(CustomerApiEntity entity)
{
var db = _provider.GetClient();
// 确保表存在
if (!db.DbMaintenance.IsAnyTable("customer_apis"))
{
db.CodeFirst.InitTables(typeof(CustomerApiEntity));
}
// 设置时间戳
entity.CreatedAt = DateTime.UtcNow;
entity.UpdatedAt = DateTime.UtcNow;
// 插入数据并返回自增ID
return await db.Insertable(entity).ExecuteReturnIdentityAsync();
}
///
/// 根据ID获取客户API记录
///
/// 记录ID
/// 客户API实体
public async Task GetByIdAsync(int id)
{
var db = _provider.GetClient();
return await db.Queryable()
.Where(x => x.Id == id)
.FirstAsync();
}
///
/// 根据客户ID获取客户API记录
///
/// 客户ID
/// 客户API实体列表
public async Task> GetByCustomerIdAsync(int customerId)
{
var db = _provider.GetClient();
return await db.Queryable()
.Where(x => x.CustomerId == customerId)
.ToListAsync();
}
///
/// 根据客户代码获取客户API记录
///
/// 客户代码
/// 客户API实体列表
public async Task> GetByCustomerCodeAsync(string customerCode)
{
var db = _provider.GetClient();
return await db.Queryable()
.Where(x => x.CustomerCode == customerCode)
.ToListAsync();
}
///
/// 根据API密钥获取客户API记录
///
/// API密钥
/// 客户API实体
public async Task GetByApiKeyAsync(string apiKey)
{
var db = _provider.GetClient();
return await db.Queryable()
.Where(x => x.ApiKey == apiKey)
.FirstAsync();
}
///
/// 验证客户API凭证并返回客户API信息
///
/// 客户代码
/// API密钥
/// 客户API实体,如果验证失败则返回null
public async Task ValidateAndGetApiCredentialsAsync(string customerCode, string apiKey)
{
var db = _provider.GetClient();
// 查询有效(启用且未过期)的API密钥
var now = DateTime.UtcNow;
return await db.Queryable()
.Where(x => x.CustomerCode == customerCode && x.ApiKey == apiKey)
.Where(x => x.Status == "Y")
.Where(x => x.ExpireDate == null || x.ExpireDate > now)
.FirstAsync();
}
///
/// 验证客户API凭证
///
/// 客户代码
/// API密钥
/// 是否验证通过
public async Task ValidateApiCredentialsAsync(string customerCode, string apiKey)
{
var result = await ValidateAndGetApiCredentialsAsync(customerCode, apiKey);
return result != null;
}
///
/// 更新客户API记录
///
/// 客户API实体
/// 更新是否成功
public async Task UpdateAsync(CustomerApiEntity entity)
{
var db = _provider.GetClient();
// 更新时间戳
entity.UpdatedAt = DateTime.UtcNow;
// 更新数据并返回影响行数
var rows = await db.Updateable(entity).ExecuteCommandAsync();
return rows > 0;
}
///
/// 删除客户API记录
///
/// 记录ID
/// 删除是否成功
public async Task DeleteAsync(int id)
{
var db = _provider.GetClient();
var rows = await db.Deleteable()
.Where(x => x.Id == id)
.ExecuteCommandAsync();
return rows > 0;
}
///
/// 获取所有客户API记录
///
/// 客户API实体列表
public async Task> GetAllAsync()
{
var db = _provider.GetClient();
return await db.Queryable()
.OrderByDescending(x => x.CreatedAt)
.ToListAsync();
}
}
}