From 1458c76c8d09f5027812e55413c8978673565391 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Wed, 8 Nov 2023 17:12:53 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=BE=D0=BD=D0=BE=D0=B2=D0=BE=D0=B5=20?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=BE=D0=B2=20(=D1=82=D0=B5=D1=85,=20=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85=20=D1=81=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=20=D0=B1=D0=BE?= =?UTF-8?q?=D0=BB=D0=B5=D0=B5=2030=20=D0=B4=D0=BD=D0=B5=D0=B9=20=D0=BE?= =?UTF-8?q?=D1=82=20=D1=82=D0=B5=D0=BA=D1=83=D1=89=D0=B5=D0=B9=20=D0=B4?= =?UTF-8?q?=D0=B0=D1=82=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Services/IReportService.cs | 8 ++++ .../Repository/FileRepository.cs | 14 +++---- .../Services/ReportService.cs | 41 +++++++++++++++++-- AsbCloudInfrastructure/Startup.cs | 1 + 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/AsbCloudApp/Services/IReportService.cs b/AsbCloudApp/Services/IReportService.cs index 1f4a7d35..de8896b9 100644 --- a/AsbCloudApp/Services/IReportService.cs +++ b/AsbCloudApp/Services/IReportService.cs @@ -57,5 +57,13 @@ namespace AsbCloudApp.Services /// /// Task> GetAllReportsByWellAsync(int idWell, CancellationToken token); + + /// + /// Удаление отчетов, с момента загрузки которых прошло n дней + /// + /// период, за который отчеты хранятся на сервере и при превышении которого удаляются + /// + /// + Task DeleteAllOldReportsAsync(int days, CancellationToken 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..ce9e57c9 100644 --- a/AsbCloudInfrastructure/Services/ReportService.cs +++ b/AsbCloudInfrastructure/Services/ReportService.cs @@ -18,22 +18,39 @@ namespace AsbCloudInfrastructure.Services public class ReportService : IReportService { + public class WorkToDeleteOldReports : Work + { + public WorkToDeleteOldReports() + : base("work to delete reports older than 30 days") + { + Timeout = TimeSpan.FromMinutes(10); + } + + protected override async Task Action(string id, IServiceProvider services, Action onProgressCallback, CancellationToken token) + { + var reportService = services.GetRequiredService(); + await reportService.DeleteAllOldReportsAsync(-30, token); + } + } 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 +86,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 +203,24 @@ namespace AsbCloudInfrastructure.Services return generator; } + + public async Task DeleteAllOldReportsAsync(int days, CancellationToken token) + { + var reports = db.ReportProperties + .Include(r => r.File) + .Where(r => r.File.UploadDate.Date < DateTime.UtcNow.Date.AddDays(days)) + .AsNoTracking(); + + var files = await reports.Select(r => r.IdFile).ToListAsync(token); + if (files.Any()) + { + await fileService.DeleteAsync(files, token); + } + + db.ReportProperties.RemoveRange(reports); + + return await db.SaveChangesAsync(token); + } } } diff --git a/AsbCloudInfrastructure/Startup.cs b/AsbCloudInfrastructure/Startup.cs index 8661c651..be1c461b 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));