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
{
///
/// 重新发送资源
///
public class ResendResourceCommandHandler(
IRepository repResourceLog,
IRepository repResource
) :
IRequestHandler
{
private readonly IRepository repResourceLog = repResourceLog;
private readonly IRepository repResource = repResource;
///
/// 重新发送资源
///
///
///
///
public async Task 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;
}
}
}