using FreeSql;
using LiveForum.IService.Cdk;
using LiveForum.IService.Others;
using LiveForum.Model;
using LiveForum.Model.Dto.Cdk;
namespace LiveForum.Service.Cdk
{
///
/// CDK服务实现
///
public class CdkService : ICdkService
{
private readonly IBaseRepository _cdkRepository;
private readonly IBaseRepository _userRepository;
private readonly ISystemSettingsService _systemSettingsService;
///
/// CDK功能开关配置键
///
public const string CDK_ENABLED_KEY = "cdk_enabled";
///
/// 构造函数
///
public CdkService(
IBaseRepository cdkRepository,
IBaseRepository userRepository,
ISystemSettingsService systemSettingsService)
{
_cdkRepository = cdkRepository;
_userRepository = userRepository;
_systemSettingsService = systemSettingsService;
}
///
/// 检查CDK状态
///
public async Task CheckCdkStatusAsync(long userId)
{
// 获取CDK功能是否启用
var cdkEnabled = await _systemSettingsService.GetSettingAsync(CDK_ENABLED_KEY);
var isCdkEnabled = string.Equals(cdkEnabled, "true", StringComparison.OrdinalIgnoreCase);
// 获取用户CDK激活状态
var user = await _userRepository.Select
.Where(x => x.Id == userId)
.FirstAsync();
var isActivated = user?.IsCdkActivated ?? false;
return new CdkStatusDto
{
CdkEnabled = isCdkEnabled,
IsActivated = isActivated
};
}
///
/// 激活CDK
///
public async Task ActivateCdkAsync(long userId, string code)
{
if (string.IsNullOrWhiteSpace(code))
{
return "请输入有效 CDK";
}
// 查找CDK
var cdk = await _cdkRepository.Select
.Where(x => x.Code == code.Trim())
.FirstAsync();
// CDK不存在
if (cdk == null)
{
return "请输入有效 CDK";
}
// CDK已被使用
if (cdk.Status == 1)
{
return "该 CDK 已被激活";
}
// 获取用户
var user = await _userRepository.Select
.Where(x => x.Id == userId)
.FirstAsync();
if (user == null)
{
return "用户不存在";
}
// 用户已激活
if (user.IsCdkActivated)
{
return "您已激活过 CDK";
}
var now = DateTime.Now;
// 更新CDK状态
cdk.Status = 1;
cdk.UsedByUserId = userId;
cdk.UsedAt = now;
await _cdkRepository.UpdateAsync(cdk);
// 更新用户CDK激活状态
user.IsCdkActivated = true;
user.CdkActivatedAt = now;
await _userRepository.UpdateAsync(user);
return "CDK 激活成功";
}
///
/// 检查用户是否需要CDK激活才能进行互动操作
///
public async Task RequiresCdkActivationAsync(long userId)
{
// 获取CDK功能是否启用
var cdkEnabled = await _systemSettingsService.GetSettingAsync(CDK_ENABLED_KEY);
var isCdkEnabled = string.Equals(cdkEnabled, "true", StringComparison.OrdinalIgnoreCase);
// 如果CDK功能未启用,不需要激活
if (!isCdkEnabled)
{
return false;
}
// 获取用户CDK激活状态
var user = await _userRepository.Select
.Where(x => x.Id == userId)
.FirstAsync();
// 如果用户已激活,不需要激活
if (user?.IsCdkActivated == true)
{
return false;
}
// 需要激活但未激活
return true;
}
}
}