diff --git a/AsbCloudApp/Data/DataSaubStatDto.cs b/AsbCloudApp/Data/DataSaubStatDto.cs
index ceae4f9d..30a09081 100644
--- a/AsbCloudApp/Data/DataSaubStatDto.cs
+++ b/AsbCloudApp/Data/DataSaubStatDto.cs
@@ -3,6 +3,9 @@ using AsbCloudApp.Data.WellOperation;
namespace AsbCloudApp.Data
{
+ ///
+ /// dto для хранения данных статистики сауб
+ ///
public class DataSaubStatDto:IId
{
///
diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs
index 9d6438dc..853a7fcd 100644
--- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs
+++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs
@@ -72,7 +72,7 @@ public class ProcessMapPlanReamDto : ProcessMapPlanBaseDto, IValidatableObject
public double Torque { get; set; }
///
- public IEnumerable Validate(ValidationContext validationContext)
+ public override IEnumerable Validate(ValidationContext validationContext)
{
if (DepthEnd < DepthStart)
yield return new ValidationResult(
diff --git a/AsbCloudApp/Data/Progress/ProgressExceptionDto.cs b/AsbCloudApp/Data/Progress/ProgressExceptionDto.cs
index cb264178..a8eb4fdd 100644
--- a/AsbCloudApp/Data/Progress/ProgressExceptionDto.cs
+++ b/AsbCloudApp/Data/Progress/ProgressExceptionDto.cs
@@ -5,18 +5,8 @@ namespace AsbCloudApp.Data.Progress;
///
/// DTO прогресса с ошибкой
///
-public class ProgressExceptionDto
+public class ProgressExceptionDto : ProgressDto
{
- ///
- /// прогресс 0 - 100%
- ///
- public float Progress { get; set; }
-
- ///
- /// название текущей операции генерации
- ///
- public string? Operation { get; set; }
-
///
/// Отображаемый текст ошибки
///
diff --git a/AsbCloudApp/Data/Progress/ReportProgressDto.cs b/AsbCloudApp/Data/Progress/ReportProgressDto.cs
index b14166e9..8bfb07d2 100644
--- a/AsbCloudApp/Data/Progress/ReportProgressDto.cs
+++ b/AsbCloudApp/Data/Progress/ReportProgressDto.cs
@@ -8,5 +8,5 @@ public class ReportProgressFinalDto : ReportProgressDto
///
/// файл
///
- public FileInfoDto file { get; set; }
+ public FileInfoDto file { get; set; } = null!;
}
diff --git a/AsbCloudApp/Data/WellOperation/WellOperationDto.cs b/AsbCloudApp/Data/WellOperation/WellOperationDto.cs
index 17015451..6a0a473e 100644
--- a/AsbCloudApp/Data/WellOperation/WellOperationDto.cs
+++ b/AsbCloudApp/Data/WellOperation/WellOperationDto.cs
@@ -4,6 +4,9 @@ using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data.WellOperation;
+///
+/// Операция по скважине
+///
public class WellOperationDto : ItemInfoDto,
IId,
IWellRelated,
diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs
index 576086e6..a981be33 100644
--- a/AsbCloudApp/Services/ITelemetryService.cs
+++ b/AsbCloudApp/Services/ITelemetryService.cs
@@ -70,6 +70,13 @@ namespace AsbCloudApp.Services
///
///
Task MergeAsync(int from, int to, CancellationToken token);
+
+ ///
+ /// Получить телеметрию по последней дате
+ ///
+ ///
+ ///
+ ///
Task GetTelemetriesInfoByLastData(DateTimeOffset from, CancellationToken token);
}
}
\ No newline at end of file
diff --git a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj
index 6bdaf411..873bdfb4 100644
--- a/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj
+++ b/AsbCloudInfrastructure/AsbCloudInfrastructure.csproj
@@ -62,6 +62,7 @@
+
diff --git a/AsbCloudInfrastructure/MemoryCacheExtentions.cs b/AsbCloudInfrastructure/MemoryCacheExtentions.cs
index 0153778a..85956230 100644
--- a/AsbCloudInfrastructure/MemoryCacheExtentions.cs
+++ b/AsbCloudInfrastructure/MemoryCacheExtentions.cs
@@ -46,14 +46,15 @@ namespace AsbCloudInfrastructure
///
public static Task> GetOrCreateBasicAsync(this IMemoryCache memoryCache, Func>> getterAsync, CancellationToken token)
{
- var key = typeof(T).FullName;
- var cache = memoryCache.GetOrCreateAsync(key, async (cacheEntry) => {
+ var key = typeof(T).FullName!;
+ var cache = memoryCache.GetOrCreateAsync(key, async (cacheEntry) =>
+ {
cacheEntry.AbsoluteExpirationRelativeToNow = CacheOlescence;
cacheEntry.SlidingExpiration = CacheOlescence;
var entities = await getterAsync(token);
return entities;
});
- return cache;
+ return cache!;
}
///
@@ -83,13 +84,14 @@ namespace AsbCloudInfrastructure
///
public static IEnumerable GetOrCreateBasic(this IMemoryCache memoryCache, Func> getter)
{
- var key = typeof(T).FullName;
- var cache = memoryCache.GetOrCreate(key, cacheEntry => {
+ var key = typeof(T).FullName!;
+ var cache = memoryCache.GetOrCreate(key, cacheEntry =>
+ {
cacheEntry.AbsoluteExpirationRelativeToNow = CacheOlescence;
cacheEntry.SlidingExpiration = CacheOlescence;
return getter();
});
- return cache;
+ return cache!;
}
///
@@ -101,7 +103,8 @@ namespace AsbCloudInfrastructure
public static void DropBasic(this IMemoryCache memoryCache)
where T : class
{
- var key = typeof(T).FullName;
+ var key = typeof(T).FullName!;
+
memoryCache.Remove(key);
}
}
diff --git a/AsbCloudInfrastructure/Repository/CacheBase.cs b/AsbCloudInfrastructure/Repository/CacheBase.cs
index 84f702df..53ac0b93 100644
--- a/AsbCloudInfrastructure/Repository/CacheBase.cs
+++ b/AsbCloudInfrastructure/Repository/CacheBase.cs
@@ -43,7 +43,7 @@ namespace AsbCloudInfrastructure.Repository
cacheEntry.Value = entities;
return entities;
});
- return cache;
+ return cache!;
}
protected virtual Task> GetCacheAsync(CancellationToken token)
diff --git a/AsbCloudInfrastructure/Repository/NotificationRepository.cs b/AsbCloudInfrastructure/Repository/NotificationRepository.cs
index 7e184f02..ae2ec649 100644
--- a/AsbCloudInfrastructure/Repository/NotificationRepository.cs
+++ b/AsbCloudInfrastructure/Repository/NotificationRepository.cs
@@ -77,7 +77,7 @@ public class NotificationRepository : CrudRepositoryBase UpdateRangeAsync(IEnumerable notifications, CancellationToken cancellationToken)
+ public override async Task UpdateRangeAsync(IEnumerable notifications, CancellationToken cancellationToken)
{
if (!notifications.Any())
return 0;
diff --git a/AsbCloudInfrastructure/Services/Email/BaseFactory.cs b/AsbCloudInfrastructure/Services/Email/BaseFactory.cs
index 11c8feaa..b48d77ed 100644
--- a/AsbCloudInfrastructure/Services/Email/BaseFactory.cs
+++ b/AsbCloudInfrastructure/Services/Email/BaseFactory.cs
@@ -2,6 +2,7 @@
using AsbCloudApp.Exceptions;
using Microsoft.Extensions.Configuration;
using System;
+using System.Configuration;
using System.IO;
namespace AsbCloudInfrastructure.Services.Email
@@ -9,17 +10,24 @@ namespace AsbCloudInfrastructure.Services.Email
public class BaseFactory
{
- private readonly string platformName;
- private readonly string platformUrl;
- private readonly string companyName;
- private readonly string supportMail;
+ protected readonly string platformName;
+ protected readonly string platformUrl;
+ protected readonly string companyName;
+ protected readonly string supportMail;
public BaseFactory(IConfiguration configuration)
{
- platformName = configuration.GetValue("email:platformName", "Цифровое бурение");
- platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/");
- companyName = configuration.GetValue("email:companyName", "ООО \"Цифровое бурение\"");
- supportMail = configuration.GetValue("email:supportMail", "support@digitaldrilling.ru");
+ platformName = configuration.GetValue("email:platformName")
+ ?? throw new ConfigurationErrorsException("email:platformName не определен");
+
+ platformUrl = configuration.GetValue("email:platformUrl")
+ ?? throw new ConfigurationErrorsException("email:platformUrl не определен");
+
+ companyName = configuration.GetValue("email:companyName")
+ ?? throw new ConfigurationErrorsException("email:companyName не определен");
+
+ supportMail = configuration.GetValue("email:supportMail")
+ ?? throw new ConfigurationErrorsException("email:supportMail не определен");
}
public static string GetOrEmptyImageBase64(string resourceFileName)
@@ -37,7 +45,7 @@ namespace AsbCloudInfrastructure.Services.Email
{
System.Diagnostics.Trace.TraceWarning($"GetOrEmptyImageBase64(). File {logoFilePath} not found.");
return string.Empty;
- }
+ }
var imageBytes = File.ReadAllBytes(logoFilePath);
var format = Path.GetExtension(resourceFileName).Trim('.');
diff --git a/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs b/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs
index ba0da560..ac1d4771 100644
--- a/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs
+++ b/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs
@@ -4,83 +4,79 @@ using Microsoft.Extensions.Configuration;
namespace AsbCloudInfrastructure.Services.Email
{
- class DrillingMailBodyFactory : BaseFactory
+ class DrillingMailBodyFactory : BaseFactory
{
- private readonly string platformName;
- private readonly string platformUrl;
public DrillingMailBodyFactory(IConfiguration configuration)
- : base(configuration)
+ : base(configuration)
{
- platformName = configuration.GetValue("email:platformName", "Цифровое бурение");
- platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/");
- }
+ }
- public override string MakeSubject(WellDto well, string action)
+ public override string MakeSubject(WellDto well, string action)
{
- var subj = $"{well.Deposit}, {well.Cluster}, {well.Caption}. Программа бурения. {action}";
- return subj;
- }
+ var subj = $"{well.Deposit}, {well.Cluster}, {well.Caption}. Программа бурения. {action}";
+ return subj;
+ }
- public string MakeMailBodyForNewPublisher(WellDto well, string publisherName, string documentCategory)
- {
- var drillingProgramHref = MakeDrillingProgramHref(well);
-
- var body = $"Здравствуйте, {publisherName}.
" +
- $"На портале {platformName} началось создание программы бурения скважины {drillingProgramHref}," +
- $" куст {well.Cluster}, месторождение {well.Deposit}." +
- $"
От вас ожидается загрузка на портал документа «{documentCategory}» в формате excel (*.xlsx)." +
- MakeSignatue() +
- $"";
- return body;
- }
-
- public string MakeMailBodyForApproverNewFile(WellDto well, string approverName, int idFile, string fileName)
+ public string MakeMailBodyForNewPublisher(WellDto well, string publisherName, string documentCategory)
{
- var drillingProgramHref = MakeDrillingProgramHref(well);
+ var drillingProgramHref = MakeDrillingProgramHref(well);
- var body = $"Здравствуйте, {approverName}.
" +
- $"На портал {platformName} загружен документ {fileName}" +
- $" для согласования при создании программы бурения скважины {drillingProgramHref}, куст ({well.Cluster})" +
- $", месторождение ({well.Deposit}).
" +
+ var body = $"Здравствуйте, {publisherName}.
" +
+ $"На портале {platformName} началось создание программы бурения скважины {drillingProgramHref}," +
+ $" куст {well.Cluster}, месторождение {well.Deposit}." +
+ $"
От вас ожидается загрузка на портал документа «{documentCategory}» в формате excel (*.xlsx)." +
MakeSignatue() +
$"";
- return body;
- }
+ return body;
+ }
- public string MakeMailBodyForPublisherOnReject(WellDto well, string publisherName, int idFile, string fileName, FileMarkDto fileMark)
- {
- var drillingProgramHref = MakeDrillingProgramHref(well);
-
- var body = $"Здравствуйте, {publisherName}.
" +
- $"На портале {platformName} отклонен загруженный вами документ {fileName} " +
- $" по программе бурения скважины {drillingProgramHref}," +
- $" куст {well.Cluster}, месторождение {well.Deposit}." +
- $" Комментарий согласующего ({fileMark.User?.Name} {fileMark.User?.Surname}):
{fileMark.Comment}" +
- MakeSignatue() +
- $"";
- return body;
- }
-
- public string MakeMailBodyForPublisherOnFullAccept(WellDto well, string publisherName, int idFile, string fileName)
- {
- var drillingProgramHref = MakeDrillingProgramHref(well);
-
- var body = $"Здравствуйте, {publisherName}.
" +
- $"На портале {platformName} полностью согласован документ {fileName} " +
- $" по программе бурения скважины {drillingProgramHref}," +
- $" куст {well.Cluster}, месторождение {well.Deposit}." +
- MakeSignatue() +
- $"";
- return body;
- }
-
- private string MakeDrillingProgramHref(WellDto well)
+ public string MakeMailBodyForApproverNewFile(WellDto well, string approverName, int idFile, string fileName)
{
- var drillingProgramUrl = $"{platformUrl}/well/{well.Id}/drillingProgram";
- var drillingProgramHref = MakeHref(drillingProgramUrl, well.Caption);
- return drillingProgramHref;
- }
- }
+ var drillingProgramHref = MakeDrillingProgramHref(well);
+
+ var body = $"Здравствуйте, {approverName}.
" +
+ $"На портал {platformName} загружен документ {fileName}" +
+ $" для согласования при создании программы бурения скважины {drillingProgramHref}, куст ({well.Cluster})" +
+ $", месторождение ({well.Deposit}).
" +
+ MakeSignatue() +
+ $"";
+ return body;
+ }
+
+ public string MakeMailBodyForPublisherOnReject(WellDto well, string publisherName, int idFile, string fileName, FileMarkDto fileMark)
+ {
+ var drillingProgramHref = MakeDrillingProgramHref(well);
+
+ var body = $"Здравствуйте, {publisherName}.
" +
+ $"На портале {platformName} отклонен загруженный вами документ {fileName} " +
+ $" по программе бурения скважины {drillingProgramHref}," +
+ $" куст {well.Cluster}, месторождение {well.Deposit}." +
+ $" Комментарий согласующего ({fileMark.User?.Name} {fileMark.User?.Surname}):
{fileMark.Comment}" +
+ MakeSignatue() +
+ $"";
+ return body;
+ }
+
+ public string MakeMailBodyForPublisherOnFullAccept(WellDto well, string publisherName, int idFile, string fileName)
+ {
+ var drillingProgramHref = MakeDrillingProgramHref(well);
+
+ var body = $"Здравствуйте, {publisherName}.
" +
+ $"На портале {platformName} полностью согласован документ {fileName} " +
+ $" по программе бурения скважины {drillingProgramHref}," +
+ $" куст {well.Cluster}, месторождение {well.Deposit}." +
+ MakeSignatue() +
+ $"";
+ return body;
+ }
+
+ private string MakeDrillingProgramHref(WellDto well)
+ {
+ var drillingProgramUrl = $"{platformUrl}/well/{well.Id}/drillingProgram";
+ var drillingProgramHref = MakeHref(drillingProgramUrl, well.Caption);
+ return drillingProgramHref;
+ }
+ }
}
diff --git a/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs b/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs
index 2eec7b27..6812e068 100644
--- a/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs
+++ b/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs
@@ -4,6 +4,7 @@ using AsbCloudApp.Repositories;
using AsbCloudApp.Services.Notifications;
using Microsoft.Extensions.Configuration;
using System.Collections.Generic;
+using System.Configuration;
using System.Diagnostics;
using System.Linq;
using System.Net.Mail;
@@ -29,9 +30,14 @@ namespace AsbCloudInfrastructure.Services.Email
{
this.userRepository = userRepository;
- this.sender = configuration.GetValue("email:sender", string.Empty);
- this.smtpPassword = configuration.GetValue("email:password", string.Empty);
- this.smtpServer = configuration.GetValue("email:smtpServer", string.Empty);
+ this.sender = configuration.GetValue("email:sender")
+ ?? throw new ConfigurationErrorsException("email:sender не определен");
+
+ this.smtpPassword = configuration.GetValue("email:password")
+ ?? throw new ConfigurationErrorsException("email:password не определен");
+
+ this.smtpServer = configuration.GetValue("email:smtpServer")
+ ?? throw new ConfigurationErrorsException("email:smtpServer не определен");
var configError = string.IsNullOrEmpty(this.sender) ||
string.IsNullOrEmpty(this.smtpPassword) ||
diff --git a/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs b/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs
index 751ab042..da2876fa 100644
--- a/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs
+++ b/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs
@@ -9,12 +9,11 @@ namespace AsbCloudInfrastructure
class WellFinalDocumentMailBodyFactory : BaseFactory
{
- private readonly string platformName;
public WellFinalDocumentMailBodyFactory(IConfiguration configuration)
: base(configuration)
{
- platformName = configuration.GetValue("email:platformName", "Цифровое бурение");
+
}
public override string MakeSubject(WellDto well, string action)
diff --git a/AsbCloudInfrastructure/Services/HelpPageService.cs b/AsbCloudInfrastructure/Services/HelpPageService.cs
index 396ca595..012ce5bc 100644
--- a/AsbCloudInfrastructure/Services/HelpPageService.cs
+++ b/AsbCloudInfrastructure/Services/HelpPageService.cs
@@ -1,11 +1,11 @@
using AsbCloudApp.Data;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
+using Microsoft.Extensions.Configuration;
using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
-using Microsoft.Extensions.Configuration;
namespace AsbCloudInfrastructure.Services;
@@ -14,7 +14,7 @@ namespace AsbCloudInfrastructure.Services;
///
public class HelpPageService : IHelpPageService
{
- private readonly string directoryNameHelpPageFiles;
+ private readonly string directoryNameHelpPageFiles;
private readonly IHelpPageRepository helpPageRepository;
private readonly IFileStorageRepository fileStorageRepository;
@@ -27,13 +27,10 @@ public class HelpPageService : IHelpPageService
public HelpPageService(IHelpPageRepository helpPageRepository,
IFileStorageRepository fileStorageRepository,
IConfiguration configuration)
- {
+ {
this.helpPageRepository = helpPageRepository;
this.fileStorageRepository = fileStorageRepository;
- directoryNameHelpPageFiles = configuration.GetValue("DirectoryNameHelpPageFiles");
-
- if (string.IsNullOrWhiteSpace(directoryNameHelpPageFiles))
- directoryNameHelpPageFiles = "helpPages";
+ directoryNameHelpPageFiles = configuration.GetValue("DirectoryNameHelpPageFiles", "helpPages")!;
}
///
@@ -45,17 +42,17 @@ public class HelpPageService : IHelpPageService
///
///
///
- public async Task AddOrUpdateAsync(string urlPage,
- int idCategory,
- string fileName,
- Stream fileStream,
+ public async Task AddOrUpdateAsync(string urlPage,
+ int idCategory,
+ string fileName,
+ Stream fileStream,
CancellationToken cancellationToken)
{
var helpPage = await helpPageRepository.GetOrDefaultByUrlPageAndIdCategoryAsync(urlPage,
idCategory,
cancellationToken);
- if(helpPage is not null)
+ if (helpPage is not null)
{
await UpdateFileAsync(helpPage,
idCategory,
@@ -86,12 +83,12 @@ public class HelpPageService : IHelpPageService
CancellationToken cancellationToken)
{
pageKey = WebUtility.UrlDecode(pageKey);
-
+
var helpPage = await helpPageRepository.GetOrDefaultByUrlPageAndIdCategoryAsync(pageKey,
idCategory,
cancellationToken);
-
- if(helpPage is null)
+
+ if (helpPage is null)
return null;
string filePath = fileStorageRepository.GetFilePath(directoryNameHelpPageFiles,
diff --git a/AsbCloudInfrastructure/Services/ManualCatalogService.cs b/AsbCloudInfrastructure/Services/ManualCatalogService.cs
index 8c779bc7..83d24f4b 100644
--- a/AsbCloudInfrastructure/Services/ManualCatalogService.cs
+++ b/AsbCloudInfrastructure/Services/ManualCatalogService.cs
@@ -35,10 +35,7 @@ public class ManualCatalogService : IManualCatalogService
this.fileStorageRepository = fileStorageRepository;
this.manualDirectoryRepository = manualDirectoryRepository;
this.manualRepository = manualRepository;
- directoryFiles = configuration.GetValue("DirectoryManualFiles");
-
- if (string.IsNullOrWhiteSpace(directoryFiles))
- directoryFiles = "manuals";
+ directoryFiles = configuration.GetValue("DirectoryManualFiles", "manuals")!;
}
public async Task SaveFileAsync(int idDirectory, int idAuthor, string name, Stream stream, CancellationToken cancellationToken)
diff --git a/AsbCloudInfrastructure/Services/MeasureService.cs b/AsbCloudInfrastructure/Services/MeasureService.cs
index 7a349450..a291a8c1 100644
--- a/AsbCloudInfrastructure/Services/MeasureService.cs
+++ b/AsbCloudInfrastructure/Services/MeasureService.cs
@@ -38,7 +38,7 @@ namespace AsbCloudInfrastructure.Services
.ToDictionaryAsync(e => e.Id, e => e.Name, token);
return entities;
});
- return cache;
+ return cache!;
}
public async Task GetLastOrDefaultAsync(int idWell, int idCategory, CancellationToken token)
diff --git a/AsbCloudInfrastructure/Services/ReduceSamplingService.cs b/AsbCloudInfrastructure/Services/ReduceSamplingService.cs
index b7581ad9..38d6a03e 100644
--- a/AsbCloudInfrastructure/Services/ReduceSamplingService.cs
+++ b/AsbCloudInfrastructure/Services/ReduceSamplingService.cs
@@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
+using System.Configuration;
using System.Diagnostics;
using System.Linq;
using System.Threading;
@@ -36,7 +37,8 @@ namespace AsbCloudInfrastructure.Services
private ReduceSamplingService(IConfiguration configuration)
{
- connectionString = configuration.GetConnectionString("DefaultConnection");
+ connectionString = configuration.GetConnectionString("DefaultConnection")
+ ?? throw new ConfigurationErrorsException("DefaultConnection не определен");
}
~ReduceSamplingService()
diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs
index 4d321525..cf533310 100644
--- a/AsbCloudInfrastructure/Services/ReportService.cs
+++ b/AsbCloudInfrastructure/Services/ReportService.cs
@@ -54,13 +54,14 @@ public class ReportService : IReportService
progressHandler.Invoke(state, work.Id);
}, token);
- backgroundWorkerService.Enqueue(work);
-
progressHandler.Invoke(new ReportProgressDto
{
Operation = "Ожидает начала в очереди.",
Progress = 0f,
}, work.Id);
+
+ backgroundWorkerService.Enqueue(work);
+
return work.Id;
}
@@ -153,6 +154,20 @@ public class ReportService : IReportService
var fileInfo = (await fileService.MoveAsync(idWell, idUser, ReportCategoryId, reportFileName, reportFileName, token))!;
+ if (fileInfo == null)
+ {
+ var state = new ProgressExceptionDto
+ {
+ Operation = "error",
+ Progress = 100f,
+ Message = "Не удалось сгенерировать файл отчёта",
+ Exception = new FileNotFoundException(),
+ };
+ progressHandler(state, workId);
+
+ return;
+ }
+
progressHandler(new ReportProgressFinalDto()
{
Operation = "done",
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs
index 20b53c43..b9efeb11 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs
@@ -84,7 +84,7 @@ namespace AsbCloudInfrastructure.Services.SAUB
var entities = db.Set().ToArray();
return entities;
});
- return cache;
+ return cache!;
}
private void DropCache()
diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs b/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs
index ba622557..fa1cd81e 100644
--- a/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs
+++ b/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs
@@ -21,7 +21,7 @@ public interface IDrillTestControllerClient
int id,
CancellationToken cancellationToken);
- [HttpGet("/api/well/{idWell}/DrillTest/all")]
+ [Get("/api/well/{idWell}/DrillTest/all")]
Task>> GetListAsync(
int idWell,
FileReportRequest request,
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs b/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs
index 5f518884..7b8a08a9 100644
--- a/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs
+++ b/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs
@@ -55,7 +55,6 @@ public class DetectedOperationControllerTests : BaseIntegrationTest
//assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
- Assert.NotNull(response.Content);
Assert.Equal(1, response.Content);
}
@@ -76,7 +75,6 @@ public class DetectedOperationControllerTests : BaseIntegrationTest
//assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
- Assert.NotNull(response.Content);
Assert.Equal(1, response.Content);
}
@@ -112,7 +110,6 @@ public class DetectedOperationControllerTests : BaseIntegrationTest
//assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
- Assert.NotNull(response.Content);
Assert.Equal(1, response.Content);
}
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs
index 7de0acd5..07685f1e 100644
--- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs
+++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs
@@ -77,7 +77,7 @@ public class ProcessMapReportDrillingControllerTest : BaseIntegrationTest
//assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.NotNull(response.Content);
- Assert.Equal(1, response.Content.Count());
+ Assert.Single(response.Content);
}
[Fact]
diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs
index 117ddae1..bb4c54df 100644
--- a/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs
+++ b/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs
@@ -118,7 +118,7 @@ public class WellOperationControllerTest : BaseIntegrationTest
var response = await client.GetPageOperationsAsync(well.Id, request);
//assert
- Assert.Equal(response.StatusCode, HttpStatusCode.OK);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.NotNull(response.Content);
var totalExpected = response.Content.Count - pageSize * pageIndex;
@@ -230,10 +230,8 @@ public class WellOperationControllerTest : BaseIntegrationTest
Assert.True(notExistedInDb.Count() == 0);
}
- [Theory]
- [InlineData(WellOperation.IdOperationTypePlan)]
- [InlineData(WellOperation.IdOperationTypeFact)]
- public async Task GetPageOperationsAsyncWithDaysAndNpv_returns_success(int idType)
+ [Fact]
+ public async Task GetPageOperationsAsyncWithDaysAndNpv_returns_success()
{
//arrange
const int pageSize = 10;
diff --git a/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs b/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs
index 912b4806..962ac43a 100644
--- a/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs
+++ b/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs
@@ -48,7 +48,7 @@ public class BackgroundWorkerTest
backgroundWorker.Enqueue(work);
}
- await backgroundWorker.ExecuteTask;
+ await backgroundWorker.ExecuteTask!;
//assert
Assert.Equal(workCount, result);
@@ -79,7 +79,7 @@ public class BackgroundWorkerTest
backgroundWorker.Enqueue(badWork);
backgroundWorker.Enqueue(goodWork);
- await backgroundWorker.ExecuteTask;
+ await backgroundWorker.ExecuteTask!;
//assert
Assert.Equal(expectadResult, result);
@@ -109,7 +109,7 @@ public class BackgroundWorkerTest
var removed = backgroundWorker.TryRemoveFromQueue((workCount - 1).ToString());
- await backgroundWorker.ExecuteTask;
+ await backgroundWorker.ExecuteTask!;
//assert
Assert.True(removed);
diff --git a/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs b/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs
index e722fcb9..38fdf8bc 100644
--- a/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs
+++ b/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs
@@ -1,13 +1,13 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Repositories;
using AsbCloudInfrastructure.Services;
using Microsoft.Extensions.Configuration;
using NSubstitute;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
using Xunit;
namespace AsbCloudWebApi.Tests.Services;
@@ -18,7 +18,7 @@ public class HelpPageServiceTest
private const string fileName = "Справка_для_страницы_test.pdf";
private const int idCategory = 20000;
- private static Dictionary configSettings = new()
+ private static Dictionary configSettings = new()
{
{ "DirectoryNameHelpPageFiles", "helpPages" }
};
diff --git a/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs b/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs
index 5b6bcb1d..386de44d 100644
--- a/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs
+++ b/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs
@@ -43,7 +43,7 @@ namespace AsbCloudWebApi.Tests.Services.Notification
Surname = "Test",
};
- private static Dictionary configSettings = new()
+ private static Dictionary configSettings = new()
{
{ "email:sender", "bot@digitaldrilling.ru" },
{ "email:password", "8wZrXSfP" },
diff --git a/AsbCloudWebApi/Controllers/DrillerController.cs b/AsbCloudWebApi/Controllers/DrillerController.cs
index 48efca2c..5e3ff126 100644
--- a/AsbCloudWebApi/Controllers/DrillerController.cs
+++ b/AsbCloudWebApi/Controllers/DrillerController.cs
@@ -46,9 +46,9 @@ namespace AsbCloudWebApi.Controllers
var drillers = schedulePage
.Select(s => s.Driller)
.Where(d => d is not null)
- .GroupBy(d => d.Id)
+ .GroupBy(d => d!.Id)
.Select(group => group.First())
- .OrderBy(d => d.Surname);
+ .OrderBy(d => d!.Surname);
return Ok(drillers);
}
diff --git a/AsbCloudWebApi/Extensions.cs b/AsbCloudWebApi/Extensions.cs
index a19dcc6e..d805eac7 100644
--- a/AsbCloudWebApi/Extensions.cs
+++ b/AsbCloudWebApi/Extensions.cs
@@ -114,7 +114,7 @@ public static class Extensions
///
/// Получение Excel
///
- ///
+ ///
///
///
public static Stream GetExcelFile(this IFormFile file)