Files
StoreWeb/Modules/Store.Users/Services/UserManagementService.TopUp.cs
T

72 lines
3.5 KiB
C#

using MAX.Framework.Validation;
using MAX.Framework.Commons;
using Store.Users.Contracts.Dtos;
using Store.Users.Entities;
namespace Store.Users.Services;
public sealed partial class UserManagementService
{
/// <summary>以本人身份提交充值备注,不能伪造提交账户或昵称。</summary>
public async Task<long> AddTopUpMessage(UserTopUpMessageRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
UserInputChecks.Length(request.Message, 1000, "充值备注");
var actor = await Actor(orm, ct);
return await orm.Insert(new UserTopUpMessageEntity
{
UserName = actor.UserName, NickName = actor.NickName, Message = request.Message.Trim()
}).ExecuteIdentityAsync(ct);
}
/// <summary>管理员记录人工处理结果。备注处理与实际充值是不同用例。</summary>
public async Task UpdateTopUpMessage(UserTopUpResultRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
UserInputChecks.PositiveId(request.Id);
UserInputChecks.Length(request.Result, 1000, "处理结果");
var actor = await Actor(orm, ct);
if (!IsAdmin(actor)) throw new AppException("仅管理员可以处理充值备注", 403);
if (!await orm.Select<UserTopUpMessageEntity>().Where(m => m.Id == request.Id).AnyAsync(ct))
throw new AppException("充值备注不存在");
await orm.Update<UserTopUpMessageEntity>().Set(m => m.Result, request.Result.Trim())
.Where(m => m.Id == request.Id).ExecuteAffrowsAsync(ct);
}
/// <summary>普通用户仅查看自己提交的备注,管理员查看全部。</summary>
public async Task<UserPage<UserTopUpMessageEntity>> TopUpMessages(UserSearchRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
UserInputChecks.Search(request);
var actor = await Actor(orm, ct);
var select = orm.Select<UserTopUpMessageEntity>();
if (!IsAdmin(actor)) select = select.Where(m => m.UserName == actor.UserName);
var total = await select.CountAsync(ct);
var rows = await select.OrderByDescending(m => m.Id).Page(request.Page, request.PageSize).ToListAsync(ct);
return new(total, rows);
}
/// <summary>管理员维护代理充值二维码,使用旧表唯一代理编码原子更新或插入。</summary>
public async Task UpdateTopUpQrcode(UserTopUpQrcodeRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
UserInputChecks.Qrcode(request);
var actor = await Actor(orm, ct);
if (!IsAdmin(actor)) throw new AppException("仅管理员可以维护充值二维码", 403);
await orm.InsertOrUpdate<UserTopUpQrcodeEntity>().SetSource(new UserTopUpQrcodeEntity
{
AgentCode = request.AgentCode.Trim(), QrcodeBase64 = request.QrcodeBase64
}).ExecuteAffrowsAsync(ct);
}
/// <summary>已认证用户按代理编码读取收款二维码。</summary>
public async Task<string?> GetTopUpQrcode(string agentCode, CancellationToken ct)
{
RequestValidator.Validate(new UserTopUpQrcodeQuery { AgentCode = agentCode?.Trim()! });
UserInputChecks.Length(agentCode.Trim(), 50, "代理编码");
await Actor(orm, ct);
var code = agentCode.Trim();
var item = await orm.Select<UserTopUpQrcodeEntity>().Where(q => q.AgentCode == code).FirstAsync(ct);
return item?.QrcodeBase64;
}
}