using AsbCloudApp.Data.Progress; using AsbCloudApp.Requests; using AsbCloudApp.Services; using Microsoft.Extensions.DependencyInjection; using System; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Background { /// /// Класс для создания отчета /// internal class WorkToCreateReport : Work { private int idWell; private int idUser; private ReportParametersRequest request; private Action progressHandler; public WorkToCreateReport(int idWell, int idUser, ReportParametersRequest request, Action progressHandler) : base("") { this.idWell = idWell; this.idUser = idUser; this.request = request; this.progressHandler = progressHandler; Id = $"create report by wellid:{idWell} for userid:{idUser} requested at {DateTime.Now}"; } protected override async Task Action(string id, IServiceProvider services, Action onProgress, CancellationToken token) { var reportService = services.GetRequiredService(); Action handler = (state, workId) => { onProgress?.Invoke(state.Operation ?? string.Empty, state.Progress); progressHandler?.Invoke(state, workId); }; await reportService.CreateReportAsync(Id, idWell, idUser, request, handler, token); } } }