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,
ResourceHttpUtils resourceHttpUtils
) :
IRequestHandler
{
private readonly IRepository repResourceLog = repResourceLog;
private readonly IRepository repResource = repResource;
private readonly ResourceHttpUtils resourceHttpUtils = resourceHttpUtils;
///
/// 重新发送资源
///
///
///
///
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)
.FirstOrDefaultAsync();
var paramters = log.Request
.JsonTo(new
{
request = new object()
})
.request
.ToJson();
var result = await resourceHttpUtils.SendHttpAsync(resource, paramters);
return result;
}
}
}