diff --git a/AsbCloudApp/Services/IReportService.cs b/AsbCloudApp/Services/IReportService.cs
index 1f4a7d35..85d72020 100644
--- a/AsbCloudApp/Services/IReportService.cs
+++ b/AsbCloudApp/Services/IReportService.cs
@@ -57,5 +57,13 @@ namespace AsbCloudApp.Services
///
///
Task> GetAllReportsByWellAsync(int idWell, CancellationToken token);
+
+ ///
+ /// Удаление отчетов, если превышен их период хранения
+ ///
+ /// период хранения отчетов
+ ///
+ ///
+ Task DeleteAllOldReportsAsync(TimeSpan lifetime, CancellationToken token);
}
}
diff --git a/AsbCloudInfrastructure/Background/WorkToDeleteOldReports.cs b/AsbCloudInfrastructure/Background/WorkToDeleteOldReports.cs
new file mode 100644
index 00000000..fb49caab
--- /dev/null
+++ b/AsbCloudInfrastructure/Background/WorkToDeleteOldReports.cs
@@ -0,0 +1,34 @@
+using AsbCloudApp.Services;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace AsbCloudInfrastructure.Background
+{
+ ///
+ /// Задача по удалению загруженных отчетов
+ ///
+ public class WorkToDeleteOldReports : Work
+ {
+ public WorkToDeleteOldReports()
+ : base("work to delete reports older than 30 days")
+ {
+ Timeout = TimeSpan.FromMinutes(10);
+ }
+
+ ///
+ /// Удаление отчетов, загруженных ранее 30 дней от текущей даты
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected override async Task Action(string id, IServiceProvider services, Action onProgressCallback, CancellationToken token)
+ {
+ var reportService = services.GetRequiredService();
+ await reportService.DeleteAllOldReportsAsync(TimeSpan.FromDays(30), token);
+ }
+ }
+}
diff --git a/AsbCloudInfrastructure/Repository/FileRepository.cs b/AsbCloudInfrastructure/Repository/FileRepository.cs
index e75e7691..cafc5649 100644
--- a/AsbCloudInfrastructure/Repository/FileRepository.cs
+++ b/AsbCloudInfrastructure/Repository/FileRepository.cs
@@ -147,17 +147,17 @@ namespace AsbCloudInfrastructure.Repository
public async Task> DeleteAsync(IEnumerable ids, CancellationToken token)
{
var query = dbSetConfigured
- .Where(f => ids.Contains(f.Id) && f.IsDeleted);
+ .Where(f => ids.Contains(f.Id));
- var files = await query.ToListAsync(token);
+ var files = await query.ToListAsync(token);
- var filesDtos = files.Select(x => Convert(x));
+ var filesDtos = files.Select(x => Convert(x));
- db.Files.RemoveRange(query);
- await db.SaveChangesAsync(token).ConfigureAwait(false);
+ db.Files.RemoveRange(query);
+ await db.SaveChangesAsync(token).ConfigureAwait(false);
- return filesDtos;
- }
+ return filesDtos;
+ }
public async Task GetByMarkId(int idMark, CancellationToken token)
{
diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs
index ed24bc3e..a4f659f8 100644
--- a/AsbCloudInfrastructure/Services/ReportService.cs
+++ b/AsbCloudInfrastructure/Services/ReportService.cs
@@ -20,20 +20,23 @@ namespace AsbCloudInfrastructure.Services
{
private readonly IAsbCloudDbContext db;
private readonly ITelemetryService telemetryService;
+ private readonly FileService fileService;
private readonly IWellService wellService;
private readonly BackgroundWorker backgroundWorkerService;
public int ReportCategoryId { get; private set; }
public ReportService(IAsbCloudDbContext db,
- ITelemetryService telemetryService,
- IWellService wellService,
+ ITelemetryService telemetryService,
+ IWellService wellService,
+ FileService fileService,
BackgroundWorker backgroundWorkerService)
{
this.db = db;
this.wellService = wellService;
this.backgroundWorkerService = backgroundWorkerService;
this.telemetryService = telemetryService;
+ this.fileService = fileService;
ReportCategoryId = db.FileCategories
.AsNoTracking()
.First(c => c.Name.Equals("Рапорт"))
@@ -69,7 +72,7 @@ namespace AsbCloudInfrastructure.Services
progressHandler.Invoke(arg, id);
};
generator.Make(reportFileName);
-
+
var fileInfo = (await fileService.MoveAsync(idWell, idUser, ReportCategoryId, reportFileName, reportFileName, token))!;
progressHandler.Invoke(new
@@ -186,6 +189,16 @@ namespace AsbCloudInfrastructure.Services
return generator;
}
- }
+ public async Task DeleteAllOldReportsAsync(TimeSpan lifetime, CancellationToken token)
+ {
+ var lifeTimeStartDate = DateTime.UtcNow.Date - lifetime;
+ var fileIds = await db.ReportProperties
+ .Where(r => r.File.UploadDate.Date < lifeTimeStartDate)
+ .Select(r => r.IdFile)
+ .ToArrayAsync(token);
+
+ return await fileService.DeleteAsync(fileIds, token);
+ }
+ }
}
diff --git a/AsbCloudInfrastructure/Startup.cs b/AsbCloudInfrastructure/Startup.cs
index 8661c651..893a3237 100644
--- a/AsbCloudInfrastructure/Startup.cs
+++ b/AsbCloudInfrastructure/Startup.cs
@@ -29,6 +29,7 @@ namespace AsbCloudInfrastructure
_ = provider.GetRequiredService>();
var backgroundWorker = provider.GetRequiredService();
+ backgroundWorker.Add(TimeSpan.FromDays(1));
backgroundWorker.Add(TimeSpan.FromMinutes(30));
backgroundWorker.Add(TimeSpan.FromMinutes(15));
backgroundWorker.Add(TimeSpan.FromMinutes(30));