forked from ddrilling/AsbCloudServer
62 lines
2.2 KiB
C#
62 lines
2.2 KiB
C#
using AsbCloudApp.Requests;
|
||
using AsbCloudApp.Services;
|
||
using AsbCloudInfrastructure.Background;
|
||
using AsbCloudWebApi.SignalR.Clients;
|
||
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace AsbCloudWebApi.SignalR
|
||
{
|
||
// SignalR manual:
|
||
// https://docs.microsoft.com/ru-ru/aspnet/core/signalr/introduction?view=aspnetcore-5.0
|
||
//[SignalRHub]
|
||
/// <summary>
|
||
/// ReportsHub
|
||
/// </summary>
|
||
[Authorize]
|
||
public class ReportsHub : BaseHub<IReportHubClient>
|
||
{
|
||
private readonly IWellService wellService;
|
||
private readonly IReportService reportService;
|
||
|
||
public ReportsHub(IWellService wellService, IReportService reportService)
|
||
{
|
||
this.wellService = wellService;
|
||
this.reportService = reportService;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Добавление в группу, отправка данных о формировании отчета
|
||
/// </summary>
|
||
/// <param name="groupName">группа</param>
|
||
/// <param name="idWell">ключ скважины</param>
|
||
/// <param name="request">параметры запроса</param>
|
||
/// <returns></returns>
|
||
public async Task CreateReport(string groupName, int idWell, ReportParametersRequest request)
|
||
{
|
||
var idUser = Context.User?.GetUserId();
|
||
var idCompany = Context.User?.GetCompanyId();
|
||
|
||
if ((idCompany is null) || (idUser is null))
|
||
return;
|
||
|
||
if (!await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, idWell, CancellationToken.None))
|
||
return;
|
||
|
||
await base.AddToGroup(groupName);
|
||
|
||
void HandleReportProgressAsync(object progress, string id) =>
|
||
Task.Run(async () =>
|
||
{
|
||
await Clients.Group(groupName)
|
||
.GetReportProgress(progress, CancellationToken.None);
|
||
}, CancellationToken.None);
|
||
|
||
var id = reportService.EnqueueCreateReportWork(idWell, (int)idUser,
|
||
request.StepSeconds, request.Format, request.Begin, request.End, HandleReportProgressAsync);
|
||
}
|
||
}
|
||
}
|