using FlexJobApi.Core;
|
using FlexJobApi.Core.Entities.Common;
|
using Furion.DatabaseAccessor;
|
using Furion.FriendlyException;
|
using MediatR;
|
using Microsoft.EntityFrameworkCore;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace FlexJobApi.CommonServer.Application
|
{
|
/// <summary>
|
/// 重新发送资源
|
/// </summary>
|
public class ResendResourceCommandHandler(
|
IRepository<ResourceLog, LogDbContextLocator> repResourceLog,
|
IRepository<Resource> repResource
|
) :
|
IRequestHandler<ResendResourceCommand, string>
|
{
|
private readonly IRepository<ResourceLog, LogDbContextLocator> repResourceLog = repResourceLog;
|
private readonly IRepository<Resource> repResource = repResource;
|
|
/// <summary>
|
/// 重新发送资源
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<string> Handle(ResendResourceCommand request, CancellationToken cancellationToken)
|
{
|
var log = await repResourceLog.AsQueryable().AsNoTracking()
|
.Where(it => it.Id == request.Id)
|
.Select(it => new
|
{
|
it.Method,
|
it.Path,
|
it.Request,
|
it.CreatedUserId
|
})
|
.FirstOrDefaultAsync();
|
if (log == null) throw Oops.Oh(EnumErrorCodeType.s404, "日志");
|
var resource = await repResource.AsQueryable().AsNoTracking()
|
.Where(it => it.Method == log.Method && it.Route == log.Path)
|
.Select(it => new
|
{
|
it.ServiceName,
|
it.Route,
|
it.Method
|
})
|
.FirstOrDefaultAsync();
|
if (resource == null) throw Oops.Oh(EnumErrorCodeType.s404, "资源");
|
var paramters = log.Request
|
.JsonTo(new
|
{
|
request = new object()
|
})
|
.request
|
.ToJson();
|
var result = await paramters.SendHttpAsync(resource.ServiceName, resource.Route, resource.Method);
|
return result;
|
}
|
}
|
}
|