From 863749cfe1daf70496afdb3da69c1e2dfbdae0d2 Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Wed, 28 Sep 2022 10:46:12 +0500 Subject: [PATCH 1/6] =?UTF-8?q?##6539681=20=D0=A4=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B9=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Services/IFileService.cs | 72 +---- AsbCloudInfrastructure/DependencyInjection.cs | 1 + .../Repository/FileRepository.cs | 275 +++++++++++++++++ .../Repository/IFileRepository.cs | 120 ++++++++ .../DrillingProgram/DrillingProgramService.cs | 12 +- .../Services/FileService.cs | 276 ++---------------- .../Services/ReportService.cs | 7 +- .../Services/WellFinalDocumentsService.cs | 10 +- AsbCloudWebApi/Controllers/FileController.cs | 39 ++- 9 files changed, 476 insertions(+), 336 deletions(-) create mode 100644 AsbCloudInfrastructure/Repository/FileRepository.cs create mode 100644 AsbCloudInfrastructure/Repository/IFileRepository.cs diff --git a/AsbCloudApp/Services/IFileService.cs b/AsbCloudApp/Services/IFileService.cs index 18d0829d..6b1a171f 100644 --- a/AsbCloudApp/Services/IFileService.cs +++ b/AsbCloudApp/Services/IFileService.cs @@ -31,23 +31,6 @@ namespace AsbCloudApp.Services /// Task SaveAsync(int idWell, int? idUser, int idCategory, string fileFullName, Stream fileStream, CancellationToken token = default); - /// - /// Получить список файлов в контейнере - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - Task> GetInfosAsync(int idWell, - int idCategory, string companyName = default, string fileName = default, DateTime begin = default, DateTime end = default, - int skip = 0, int take = 32, CancellationToken token = default); - /// /// Инфо о файле /// @@ -57,24 +40,6 @@ namespace AsbCloudApp.Services Task GetInfoAsync(int idFile, CancellationToken token); - /// - /// Пометить файл как удаленный - /// - /// - /// - /// - Task MarkAsDeletedAsync(int idFile, - CancellationToken token = default); - - /// - /// Получить файлы определенной категории - /// - /// - /// - /// - /// - Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token = default); - /// /// удалить файл /// @@ -103,7 +68,7 @@ namespace AsbCloudApp.Services /// /// /// - string GetUrl(int idFile); + Task GetUrl(int idFile); /// /// получить путь для скачивания @@ -115,15 +80,6 @@ namespace AsbCloudApp.Services /// string GetUrl(int idWell, int idCategory, int idFile, string dotExtention); - /// - /// добавить метку на файл - /// - /// - /// - /// - /// - Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token); - /// /// пометить метку файла как удаленную /// @@ -143,22 +99,6 @@ namespace AsbCloudApp.Services /// /// Task MoveAsync(int idWell, int? idUser, int idCategory, string destinationFileName, string srcFileFullName, CancellationToken token = default); - - /// - /// получить инфо о файле по метке - /// - /// - /// - /// - Task GetByMarkId(int idMark, CancellationToken token); - - /// - /// пометить метки файлов как удаленные - /// - /// - /// - /// - Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token); /// /// Инфо о файле @@ -166,14 +106,6 @@ namespace AsbCloudApp.Services /// /// /// - Task> GetInfoByIdsAsync(List idsFile, CancellationToken token); - - /// - /// Получение файлов по скважине - /// - /// - /// - /// - Task> GetInfosByWellIdAsync(int idWell, CancellationToken token); + Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token); } } diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index 04e707f6..e86a314b 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -106,6 +106,7 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/AsbCloudInfrastructure/Repository/FileRepository.cs b/AsbCloudInfrastructure/Repository/FileRepository.cs new file mode 100644 index 00000000..efa6296a --- /dev/null +++ b/AsbCloudInfrastructure/Repository/FileRepository.cs @@ -0,0 +1,275 @@ +using AsbCloudApp.Data; +using AsbCloudDb.Model; +using Mapster; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudInfrastructure.Repository +{ + public class FileRepository : IFileRepository + { + private readonly IQueryable dbSetConfigured; + private readonly IAsbCloudDbContext db; + + public FileRepository(IAsbCloudDbContext db) + { + this.db = db; + this.dbSetConfigured = db.Files + .Include(f => f.Author) + .ThenInclude(u => u.Company) + .ThenInclude(c => c.CompanyType) + .Include(f => f.FileMarks) + .ThenInclude(m => m.User) + .Include(f => f.Well); + } + + public async Task AddAsync(int idWell, int? idUser, int idCategory, + string destinationFileName, long fileSize, CancellationToken token = default) + { + var fileInfo = new AsbCloudDb.Model.FileInfo() + { + IdWell = idWell, + IdAuthor = idUser, + IdCategory = idCategory, + Name = destinationFileName, + UploadDate = DateTime.UtcNow, + IsDeleted = false, + Size = fileSize, + }; + + var entry = db.Files.Add(fileInfo); + await db.SaveChangesAsync(token).ConfigureAwait(false); + return entry.Entity.Id; + } + + public async Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token) + { + var entities = await dbSetConfigured + .Where(e => e.IdWell == idWell && e.IdCategory == idCategory && e.IsDeleted == false) + .AsNoTracking() + .ToListAsync(token) + .ConfigureAwait(false); + + var dtos = entities.Select(e => Convert(e)); + return dtos; + } + + public async Task> GetInfosAsync(int idWell, + int idCategory, string companyName = default, string fileName = default, DateTime begin = default, + DateTime end = default, int skip = 0, int take = 32, CancellationToken token = default) + { + var query = dbSetConfigured + .Where(e => e.IdWell == idWell && + e.IdCategory == idCategory && + !e.IsDeleted); + + if (!string.IsNullOrEmpty(companyName)) + query = query.Where(e => (e.Author == null) || + (e.Author.Company == null) || + e.Author.Company.Caption.Contains(companyName)); + + if (!string.IsNullOrEmpty(fileName)) + query = query.Where(e => e.Name.ToLower().Contains(fileName.ToLower())); + + var firstFile = await query.FirstOrDefaultAsync(token); + if (firstFile is null) + return new PaginationContainer() + { + Skip = skip, + Take = take, + Count = 0, + }; + + var timezoneOffset = firstFile.Well.Timezone?.Hours ?? 5; + + if (begin != default) + { + var beginUtc = begin.ToUtcDateTimeOffset(timezoneOffset); + query = query.Where(e => e.UploadDate >= beginUtc); + } + + if (end != default) + { + var endUtc = end.ToUtcDateTimeOffset(timezoneOffset); + query = query.Where(e => e.UploadDate <= endUtc); + } + + var count = await query.CountAsync(token).ConfigureAwait(false); + + var result = new PaginationContainer(count) + { + Skip = skip, + Take = take, + Count = count, + }; + + if (count <= skip) + return result; + + query = query.OrderBy(e => e.UploadDate); + + if (skip > 0) + query = query.Skip(skip); + query = query.Take(take); + + var entities = await query + .Take(take).AsNoTracking().ToListAsync(token) + .ConfigureAwait(false); + + var dtos = entities.Select(e => Convert(e, timezoneOffset)); + result.Items.AddRange(dtos); + return result; + } + + public async Task GetInfoAsync(int idFile, CancellationToken token) + { + var entity = await dbSetConfigured + .AsNoTracking() + .FirstOrDefaultAsync(f => f.Id == idFile, token) + .ConfigureAwait(false); + + if (entity is null) + { + throw new FileNotFoundException($"fileId:{idFile} not found"); + } + + var dto = Convert(entity); + return dto; + } + + public async Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token) + { + var result = new List(); + + var entities = await dbSetConfigured + .AsNoTracking() + .Where(f => idsFile.Contains(f.Id)) + .ToListAsync(token) + .ConfigureAwait(false); + + foreach (var entity in entities) + { + if (entity is null) + { + throw new FileNotFoundException($"fileId:{entity.Id} not found"); + } + result.Add(Convert(entity)); + } + + return result; + } + + public async Task MarkAsDeletedAsync(int idFile, CancellationToken token = default) + { + var fileInfo = await db.Files.FirstOrDefaultAsync(f => f.Id == idFile, token).ConfigureAwait(false); + + if (fileInfo is null) + return 0; + + fileInfo.IsDeleted = true; + + return await db.SaveChangesAsync(token).ConfigureAwait(false); + } + + public async Task> DeleteAsync(IEnumerable ids, CancellationToken token) + { + var filesQuery = db.Files + .Where(f => ids.Contains(f.Id)); + + var files = await filesQuery.ToListAsync(token); + + var filesDtos = files.Select(x => new FileInfoDto { + Id = x.Id, + IdWell = x.Id, + IdCategory = x.IdCategory, + Name = x.Name + }); + + db.Files.RemoveRange(filesQuery); + await db.SaveChangesAsync(token).ConfigureAwait(false); + + return filesDtos; + } + + public async Task GetByMarkId(int idMark, + CancellationToken token) + { + var entity = await dbSetConfigured + .FirstOrDefaultAsync(f => f.FileMarks.Any(m => m.Id == idMark), token) + .ConfigureAwait(false); + + FileInfoDto dto = Convert(entity); + return dto; + } + + public async Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token) + { + var fileMark = await db.FileMarks + .FirstOrDefaultAsync(m => m.IdFile == fileMarkDto.IdFile && + m.IdMarkType == fileMarkDto.IdMarkType && + m.IdUser == idUser && + m.IsDeleted == false, + token) + .ConfigureAwait(false); + + if (fileMark is not null) + return 0; + + var newFileMark = fileMarkDto.Adapt(); + newFileMark.Id = default; + newFileMark.DateCreated = DateTime.UtcNow; + newFileMark.IdUser = idUser; + newFileMark.User = null; + + db.FileMarks.Add(newFileMark); + return await db.SaveChangesAsync(token); + } + + public async Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token) + { + var fileMarkQuery = db.FileMarks + .Where(m => idsMarks.Contains(m.Id)); + + foreach (var fileMark in fileMarkQuery) + fileMark.IsDeleted = true; + + return await db.SaveChangesAsync(token); + } + + public async Task> GetInfosByWellIdAsync(int idWell, CancellationToken token) + { + var entities = await dbSetConfigured + .Where(e => e.IdWell == idWell && e.IsDeleted == false) + .AsNoTracking() + .ToListAsync(token) + .ConfigureAwait(false); + + var dtos = entities.Select(e => Convert(e)); + return dtos; + } + + private static FileInfoDto Convert(AsbCloudDb.Model.FileInfo entity) + { + var timezoneOffset = entity.Well.Timezone?.Hours ?? 5; + return Convert(entity, timezoneOffset); + } + + private static FileInfoDto Convert(AsbCloudDb.Model.FileInfo entity, double timezoneOffset) + { + var dto = entity.Adapt(); + dto.UploadDate = entity.UploadDate.ToRemoteDateTime(timezoneOffset); + dto.FileMarks = entity.FileMarks.Select(m => + { + var mark = m.Adapt(); + mark.DateCreated = m.DateCreated.ToRemoteDateTime(timezoneOffset); + return mark; + }); + return dto; + } + } +} diff --git a/AsbCloudInfrastructure/Repository/IFileRepository.cs b/AsbCloudInfrastructure/Repository/IFileRepository.cs new file mode 100644 index 00000000..73ae9b86 --- /dev/null +++ b/AsbCloudInfrastructure/Repository/IFileRepository.cs @@ -0,0 +1,120 @@ +using AsbCloudApp.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudInfrastructure.Repository +{ + /// + /// Сервис доступа к файлам + /// + public interface IFileRepository + { + /// + /// Добавление, в БД, информации о файле + /// + /// + /// + /// + /// + /// + /// + /// + Task AddAsync(int idWell, int? idUser, int idCategory, + string destinationFileName, long fileSize, CancellationToken token = default); + + /// + /// Получить файлы определенной категории + /// + /// + /// + /// + /// + Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token); + + /// + /// Получить список файлов в контейнере + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + Task> GetInfosAsync(int idWell, + int idCategory, string companyName = default, string fileName = default, DateTime begin = default, + DateTime end = default, int skip = 0, int take = 32, CancellationToken token = default); + + /// + /// Инфо о файле + /// + /// + /// + /// + Task GetInfoAsync(int idFile, CancellationToken token); + + /// + /// Пометить файл как удаленный + /// + /// + /// + /// + Task MarkAsDeletedAsync(int idFile, CancellationToken token = default); + + /// + /// удалить файлы + /// + /// + /// + /// + Task> DeleteAsync(IEnumerable ids, CancellationToken token); + + /// + /// получить инфо о файле по метке + /// + /// + /// + /// + Task GetByMarkId(int idMark, CancellationToken token); + + /// + /// добавить метку на файл + /// + /// + /// + /// + /// + Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token); + + /// + /// Инфо о файлах + /// + /// + /// + /// + Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token); + + /// + /// пометить метки файлов как удаленные + /// + /// + /// + /// + Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token); + + /// + /// Получение файлов по скважине + /// + /// + /// + /// + Task> GetInfosByWellIdAsync(int idWell, CancellationToken token); + } +} diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index 5fbc7301..c1973c11 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -2,6 +2,7 @@ using AsbCloudApp.Exceptions; using AsbCloudApp.Services; using AsbCloudDb.Model; +using AsbCloudInfrastructure.Repository; using Mapster; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -22,6 +23,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram private readonly IFileService fileService; private readonly IUserService userService; private readonly IWellService wellService; + private readonly IFileRepository fileRepository; private readonly IConfiguration configuration; private readonly IBackgroundWorkerService backgroundWorker; private readonly IEmailService emailService; @@ -52,6 +54,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram IFileService fileService, IUserService userService, IWellService wellService, + IFileRepository fileRepository, IConfiguration configuration, IBackgroundWorkerService backgroundWorker, IEmailService emailService) @@ -60,6 +63,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram this.fileService = fileService; this.userService = userService; this.wellService = wellService; + this.fileRepository = fileRepository; this.configuration = configuration; this.backgroundWorker = backgroundWorker; this.connectionString = configuration.GetConnectionString("DefaultConnection"); @@ -308,9 +312,9 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram .Select(m => m.Id); if (oldMarksIds?.Any() == true) - await fileService.MarkFileMarkAsDeletedAsync(oldMarksIds, token); + await fileRepository.MarkFileMarkAsDeletedAsync(oldMarksIds, token); - var result = await fileService.CreateFileMarkAsync(fileMarkDto, idUser, token) + var result = await fileRepository.CreateFileMarkAsync(fileMarkDto, idUser, token) .ConfigureAwait(false); if (fileMarkDto.IdMarkType == idMarkTypeReject) @@ -340,7 +344,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram public async Task MarkAsDeletedFileMarkAsync(int idMark, CancellationToken token) { - var fileInfo = await fileService.GetByMarkId(idMark, token) + var fileInfo = await fileRepository.GetByMarkId(idMark, token) .ConfigureAwait(false); if (fileInfo.IdCategory < idFileCategoryDrillingProgramPartsStart || @@ -479,7 +483,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram .UseNpgsql(connectionString) .Options; using var context = new AsbCloudDbContext(contextOptions); - var fileService = new FileService(context); + var fileService = new FileService(fileRepository); var files = state.Parts.Select(p => fileService.GetUrl(p.File)); DrillingProgramMaker.UniteExcelFiles(files, tempResultFilePath, state.Parts, well); await fileService.MoveAsync(idWell, null, idFileCategoryDrillingProgram, resultFileName, tempResultFilePath, token); diff --git a/AsbCloudInfrastructure/Services/FileService.cs b/AsbCloudInfrastructure/Services/FileService.cs index 947fd853..c30fd23b 100644 --- a/AsbCloudInfrastructure/Services/FileService.cs +++ b/AsbCloudInfrastructure/Services/FileService.cs @@ -2,6 +2,7 @@ using AsbCloudApp.Exceptions; using AsbCloudApp.Services; using AsbCloudDb.Model; +using AsbCloudInfrastructure.Repository; using Mapster; using Microsoft.EntityFrameworkCore; using System; @@ -16,21 +17,12 @@ namespace AsbCloudInfrastructure.Services public class FileService : IFileService { public string RootPath { get; private set; } + private readonly IFileRepository fileRepository; - private readonly IQueryable dbSetConfigured; - private readonly IAsbCloudDbContext db; - - public FileService(IAsbCloudDbContext db) + public FileService(IFileRepository fileRepository) { RootPath = "files"; - this.db = db; - dbSetConfigured = db.Files - .Include(f => f.Author) - .ThenInclude(u => u.Company) - .ThenInclude(c => c.CompanyType) - .Include(f => f.FileMarks) - .ThenInclude(m => m.User) - .Include(f => f.Well); + this.fileRepository = fileRepository; } public async Task MoveAsync(int idWell, int? idUser, int idCategory, @@ -44,45 +36,23 @@ namespace AsbCloudInfrastructure.Services var sysFileInfo = new System.IO.FileInfo(srcFilePath); //save info to db - var fileInfo = new AsbCloudDb.Model.FileInfo() - { - IdWell = idWell, - IdAuthor = idUser, - IdCategory = idCategory, - Name = destinationFileName, - UploadDate = DateTime.UtcNow, - IsDeleted = false, - Size = sysFileInfo.Length, - }; - - var entry = db.Files.Add(fileInfo); - await db.SaveChangesAsync(token).ConfigureAwait(false); - var fileId = entry.Entity.Id; + var fileId = await fileRepository.AddAsync(idWell, idUser, idCategory, destinationFileName, sysFileInfo.Length, token) + .ConfigureAwait(false); + string filePath = MakeFilePath(idWell, idCategory, destinationFileName, fileId); Directory.CreateDirectory(Path.GetDirectoryName(filePath)); File.Move(srcFilePath, filePath); - return await GetInfoAsync(entry.Entity.Id, token); + return await GetInfoAsync(fileId, token); } public async Task SaveAsync(int idWell, int? idUser, int idCategory, string fileFullName, Stream fileStream, CancellationToken token) { //save info to db - var fileInfo = new AsbCloudDb.Model.FileInfo() - { - IdWell = idWell, - IdAuthor = idUser, - IdCategory = idCategory, - Name = Path.GetFileName(fileFullName), - UploadDate = DateTime.UtcNow, - IsDeleted = false, - Size = fileStream?.Length ?? 0 - }; + var fileId = await fileRepository.AddAsync(idWell, idUser, idCategory, Path.GetFileName(fileFullName), fileStream?.Length ?? 0, token) + .ConfigureAwait(false); - var entry = db.Files.Add(fileInfo); - await db.SaveChangesAsync(token).ConfigureAwait(false); - var fileId = entry.Entity.Id; //save stream to disk string filePath = MakeFilePath(idWell, idCategory, fileFullName, fileId); @@ -91,7 +61,7 @@ namespace AsbCloudInfrastructure.Services using var newfileStream = new FileStream(filePath, FileMode.Create); await fileStream.CopyToAsync(newfileStream, token).ConfigureAwait(false); - return await GetInfoAsync(entry.Entity.Id, token); + return await GetInfoAsync(fileId, token); } private string MakeFilePath(int idWell, int idCategory, string fileFullName, int fileId) @@ -100,125 +70,23 @@ namespace AsbCloudInfrastructure.Services $"{idCategory}", $"{fileId}" + $"{Path.GetExtension(fileFullName)}"); } - public async Task> GetInfosByCategoryAsync(int idWell, - int idCategory, CancellationToken token) - { - var entities = await dbSetConfigured - .Where(e => e.IdWell == idWell && e.IdCategory == idCategory && e.IsDeleted == false) - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); - - var dtos = entities.Select(e => Convert(e)); - return dtos; - } - - public async Task> GetInfosAsync(int idWell, - int idCategory, string companyName = default, string fileName = default, DateTime begin = default, - DateTime end = default, int skip = 0, int take = 32, CancellationToken token = default) - { - var query = dbSetConfigured - .Where(e => e.IdWell == idWell && - e.IdCategory == idCategory && - !e.IsDeleted); - - if (!string.IsNullOrEmpty(companyName)) - query = query.Where(e => (e.Author == null) || - (e.Author.Company == null) || - e.Author.Company.Caption.Contains(companyName)); - - if (!string.IsNullOrEmpty(fileName)) - query = query.Where(e => e.Name.ToLower().Contains(fileName.ToLower())); - - var firstFile = await query.FirstOrDefaultAsync(token); - if (firstFile is null) - return new PaginationContainer() - { - Skip = skip, - Take = take, - Count = 0, - }; - - var timezoneOffset = firstFile.Well.Timezone?.Hours ?? 5; - - if (begin != default) - { - var beginUtc = begin.ToUtcDateTimeOffset(timezoneOffset); - query = query.Where(e => e.UploadDate >= beginUtc); - } - - if (end != default) - { - var endUtc = end.ToUtcDateTimeOffset(timezoneOffset); - query = query.Where(e => e.UploadDate <= endUtc); - } - - var count = await query.CountAsync(token).ConfigureAwait(false); - - var result = new PaginationContainer(count) - { - Skip = skip, - Take = take, - Count = count, - }; - - if (count <= skip) - return result; - - query = query.OrderBy(e => e.UploadDate); - - if (skip > 0) - query = query.Skip(skip); - query = query.Take(take); - - var entities = await query - .Take(take).AsNoTracking().ToListAsync(token) - .ConfigureAwait(false); - - var dtos = entities.Select(e => Convert(e, timezoneOffset)); - result.Items.AddRange(dtos); - return result; - } - public async Task GetInfoAsync(int idFile, CancellationToken token) { - var entity = await dbSetConfigured - .AsNoTracking() - .FirstOrDefaultAsync(f => f.Id == idFile, token) - .ConfigureAwait(false); + var dto = await fileRepository.GetInfoAsync(idFile, token).ConfigureAwait(false); - if (entity is null) - { - throw new FileNotFoundException($"fileId:{idFile} not found"); - } + var ext = Path.GetExtension(dto.Name); - var ext = Path.GetExtension(entity.Name); - - var relativePath = GetUrl(entity.IdWell, entity.IdCategory, entity.Id, ext); + var relativePath = GetUrl(dto.IdWell, dto.IdCategory, dto.Id, ext); var fullPath = Path.GetFullPath(relativePath); if (!File.Exists(fullPath)) { throw new FileNotFoundException("not found", relativePath); } - var dto = Convert(entity); return dto; } - public async Task MarkAsDeletedAsync(int idFile, - CancellationToken token = default) - { - var fileInfo = await db.Files.FirstOrDefaultAsync(f => f.Id == idFile, token).ConfigureAwait(false); - - if (fileInfo is null) - return 0; - - fileInfo.IsDeleted = true; - - return await db.SaveChangesAsync(token).ConfigureAwait(false); - } - public Task DeleteAsync(int idFile, CancellationToken token) => DeleteAsync(new int[] { idFile }, token); @@ -227,10 +95,7 @@ namespace AsbCloudInfrastructure.Services if (ids is null || !ids.Any()) return 0; - var filesQuery = db.Files - .Where(f => ids.Contains(f.Id)); - - var files = await filesQuery.ToListAsync(token); + var files = await fileRepository.DeleteAsync(ids, token).ConfigureAwait(false); if (files is null || !files.Any()) return 0; @@ -242,18 +107,12 @@ namespace AsbCloudInfrastructure.Services File.Delete(fileName); } - db.Files.RemoveRange(filesQuery); - - return await db.SaveChangesAsync(token).ConfigureAwait(false); + return files.Any() ? 1 : 0; } - public string GetUrl(int idFile) + public async Task GetUrl(int idFile) { - var fileInfo = db.Files - .FirstOrDefault(f => f.Id == idFile); - - if (fileInfo is null) - return null; + var fileInfo = await fileRepository.GetInfoAsync(idFile, CancellationToken.None).ConfigureAwait(false); return GetUrl(fileInfo.IdWell, fileInfo.IdCategory, fileInfo.Id, Path.GetExtension(fileInfo.Name)); } @@ -264,116 +123,27 @@ namespace AsbCloudInfrastructure.Services public string GetUrl(int idWell, int idCategory, int idFile, string dotExtention) => Path.Combine(RootPath, idWell.ToString(), idCategory.ToString(), $"{idFile}{dotExtention}"); - public async Task GetByMarkId(int idMark, - CancellationToken token) - { - var entity = await dbSetConfigured - .FirstOrDefaultAsync(f => f.FileMarks.Any(m => m.Id == idMark), token) - .ConfigureAwait(false); - - FileInfoDto dto = Convert(entity); - return dto; - } - - private static FileInfoDto Convert(AsbCloudDb.Model.FileInfo entity) - { - var timezoneOffset = entity.Well.Timezone?.Hours ?? 5; - return Convert(entity, timezoneOffset); - } - - private static FileInfoDto Convert(AsbCloudDb.Model.FileInfo entity, double timezoneOffset) - { - var dto = entity.Adapt(); - dto.UploadDate = entity.UploadDate.ToRemoteDateTime(timezoneOffset); - dto.FileMarks = entity.FileMarks.Select(m => - { - var mark = m.Adapt(); - mark.DateCreated = m.DateCreated.ToRemoteDateTime(timezoneOffset); - return mark; - }); - return dto; - } - public async Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token) - { - var fileMark = await db.FileMarks - .FirstOrDefaultAsync(m => m.IdFile == fileMarkDto.IdFile && - m.IdMarkType == fileMarkDto.IdMarkType && - m.IdUser == idUser && - m.IsDeleted == false, - token) - .ConfigureAwait(false); - - if (fileMark is not null) - return 0; - - var newFileMark = fileMarkDto.Adapt(); - newFileMark.Id = default; - newFileMark.DateCreated = DateTime.UtcNow; - newFileMark.IdUser = idUser; - newFileMark.User = null; - - db.FileMarks.Add(newFileMark); - return await db.SaveChangesAsync(token); - } - public Task MarkFileMarkAsDeletedAsync(int idMark, CancellationToken token) - => MarkFileMarkAsDeletedAsync(new int[] { idMark }, token); + => fileRepository.MarkFileMarkAsDeletedAsync(new int[] { idMark }, token); - public async Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, - CancellationToken token) + public async Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token) { - var fileMarkQuery = db.FileMarks - .Where(m => idsMarks.Contains(m.Id)); + var result = await fileRepository.GetInfoByIdsAsync(idsFile, token).ConfigureAwait(false); - foreach (var fileMark in fileMarkQuery) - fileMark.IsDeleted = true; - - return await db.SaveChangesAsync(token); - } - - public async Task> GetInfoByIdsAsync(List idsFile, CancellationToken token) - { - var result = new List(); - - var entities = await dbSetConfigured - .AsNoTracking() - .Where(f => idsFile.Contains(f.Id)) - .ToListAsync(token) - .ConfigureAwait(false); - - foreach (var entity in entities) + foreach (var entity in result) { - if (entity is null) - { - throw new FileNotFoundException($"fileId:{entity.Id} not found"); - } - + var ext = Path.GetExtension(entity.Name); - var relativePath = GetUrl(entity.IdWell, entity.IdCategory, entity.Id, ext); var fullPath = Path.GetFullPath(relativePath); if (!File.Exists(fullPath)) { throw new FileNotFoundException("not found", relativePath); } - - result.Add(Convert(entity)); } return result; } - - public async Task> GetInfosByWellIdAsync(int idWell, CancellationToken token) - { - var entities = await dbSetConfigured - .Where(e => e.IdWell == idWell && e.IsDeleted == false) - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); - - var dtos = entities.Select(e => Convert(e)); - return dtos; - } } } diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs index 3c70915b..6265f6c6 100644 --- a/AsbCloudInfrastructure/Services/ReportService.cs +++ b/AsbCloudInfrastructure/Services/ReportService.cs @@ -1,6 +1,7 @@ using AsbCloudApp.Data; using AsbCloudApp.Services; using AsbCloudDb.Model; +using AsbCloudInfrastructure.Repository; using AsbSaubReport; using Mapster; using Microsoft.EntityFrameworkCore; @@ -21,15 +22,17 @@ namespace AsbCloudInfrastructure.Services private readonly ITelemetryService telemetryService; private readonly IWellService wellService; private readonly IBackgroundWorkerService backgroundWorkerService; + private readonly IFileRepository fileRepository; public ReportService(IAsbCloudDbContext db, IConfiguration configuration, - ITelemetryService telemetryService, IWellService wellService, IBackgroundWorkerService backgroundWorkerService) + ITelemetryService telemetryService, IWellService wellService, IBackgroundWorkerService backgroundWorkerService, IFileRepository fileRepository) { this.db = db; this.connectionString = configuration.GetConnectionString("DefaultConnection"); this.wellService = wellService; this.backgroundWorkerService = backgroundWorkerService; this.telemetryService = telemetryService; + this.fileRepository = fileRepository; ReportCategoryId = db.FileCategories.AsNoTracking() .FirstOrDefault(c => c.Name.Equals("Рапорт")).Id; @@ -65,7 +68,7 @@ namespace AsbCloudInfrastructure.Services }; generator.Make(reportFileName); - var fileService = new FileService(context); + var fileService = new FileService(fileRepository); var fileInfo = await fileService.MoveAsync(idWell, idUser, ReportCategoryId, reportFileName, reportFileName, token); progressHandler.Invoke(new diff --git a/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs b/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs index 3885d0e3..dc90128c 100644 --- a/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs +++ b/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs @@ -2,6 +2,7 @@ using AsbCloudApp.Exceptions; using AsbCloudApp.Services; using AsbCloudDb.Model; +using AsbCloudInfrastructure.Repository; using Mapster; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -27,6 +28,7 @@ namespace AsbCloudInfrastructure.Services private readonly IConfiguration configuration; private readonly IEmailService emailService; private readonly IFileCategoryService fileCategoryService; + private readonly IFileRepository fileRepository; private const int FileServiceThrewException = -1; @@ -36,7 +38,8 @@ namespace AsbCloudInfrastructure.Services IWellService wellService, IConfiguration configuration, IEmailService emailService, - IFileCategoryService fileCategoryService) + IFileCategoryService fileCategoryService, + IFileRepository fileRepository) { this.context = context; this.fileService = fileService; @@ -45,6 +48,7 @@ namespace AsbCloudInfrastructure.Services this.configuration = configuration; this.emailService = emailService; this.fileCategoryService = fileCategoryService; + this.fileRepository = fileRepository; } public async Task UpdateRangeAsync(int idWell, IEnumerable? dtos, CancellationToken token) @@ -94,7 +98,7 @@ namespace AsbCloudInfrastructure.Services var categoriesIds = entitiesGroups .Select(g => g.Key); - var files = (await fileService + var files = (await fileRepository .GetInfosByWellIdAsync(idWell, token) .ConfigureAwait(false)) .Where(f => categoriesIds.Contains(f.IdCategory)) @@ -161,7 +165,7 @@ namespace AsbCloudInfrastructure.Services public async Task GetFilesHistoryByIdCategory(int idWell, int idCategory, CancellationToken token) { - var files = await fileService.GetInfosByCategoryAsync(idWell, idCategory, token).ConfigureAwait(false); + var files = await fileRepository.GetInfosByCategoryAsync(idWell, idCategory, token).ConfigureAwait(false); return new WellFinalDocumentsHistoryDto { IdWell = idWell, diff --git a/AsbCloudWebApi/Controllers/FileController.cs b/AsbCloudWebApi/Controllers/FileController.cs index 46f9d589..52b314f3 100644 --- a/AsbCloudWebApi/Controllers/FileController.cs +++ b/AsbCloudWebApi/Controllers/FileController.cs @@ -1,5 +1,6 @@ using AsbCloudApp.Data; using AsbCloudApp.Services; +using AsbCloudInfrastructure.Repository; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -20,11 +21,13 @@ namespace AsbCloudWebApi.Controllers { private readonly IFileService fileService; private readonly IWellService wellService; + private readonly IFileRepository fileRepository; - public FileController(IFileService fileService, IWellService wellService) + public FileController(IFileService fileService, IWellService wellService, IFileRepository fileRepository) { this.fileService = fileService; this.wellService = wellService; + this.fileRepository = fileRepository; } /// @@ -98,7 +101,7 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false)) return Forbid(); - var filesInfo = await fileService.GetInfosAsync(idWell, idCategory, + var filesInfo = await fileRepository.GetInfosAsync(idWell, idCategory, companyName, fileName, begin, end, skip, take, token).ConfigureAwait(false); return Ok(filesInfo); @@ -168,7 +171,7 @@ namespace AsbCloudWebApi.Controllers if (!userService.HasPermission((int)idUser, $"File.edit{file.IdCategory}")) return Forbid(); - var result = await fileService.MarkAsDeletedAsync(idFile, token); + var result = await fileRepository.MarkAsDeletedAsync(idFile, token); return Ok(result); } @@ -193,7 +196,7 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false)) return Forbid(); - var result = await fileService.CreateFileMarkAsync(markDto, (int)idUser, token) + var result = await fileRepository.CreateFileMarkAsync(markDto, (int)idUser, token) .ConfigureAwait(false); return Ok(result); @@ -223,5 +226,33 @@ namespace AsbCloudWebApi.Controllers return Ok(result); } + + /// + /// Возвращает информацию о файле + /// + /// id запрашиваемого файла + /// Токен отмены задачи + /// Запрашиваемый файл + [HttpGet] + [Route("/api/files/{idFile}")] + [Permission] + [ProducesResponseType(typeof(PhysicalFileResult), (int)System.Net.HttpStatusCode.OK)] + public async Task GetFileInfoByIdAsync([FromRoute] int idFile, CancellationToken token = default) + { + int? idCompany = User.GetCompanyId(); + + if (idCompany is null) + return Forbid(); + + try + { + var fileInfo = await fileRepository.GetInfoAsync(idFile, token).ConfigureAwait(false); + return Ok(fileInfo); + } + catch (FileNotFoundException ex) + { + return NotFound(ex.FileName); + } + } } } From ead3e860bae92386d5bb8d3eeb058093f2d350ba Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Wed, 28 Sep 2022 11:17:33 +0500 Subject: [PATCH 2/6] =?UTF-8?q?#6539681=20=D0=A4=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B9=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudWebApi/Controllers/FileController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AsbCloudWebApi/Controllers/FileController.cs b/AsbCloudWebApi/Controllers/FileController.cs index 52b314f3..b75f71f4 100644 --- a/AsbCloudWebApi/Controllers/FileController.cs +++ b/AsbCloudWebApi/Controllers/FileController.cs @@ -236,7 +236,7 @@ namespace AsbCloudWebApi.Controllers [HttpGet] [Route("/api/files/{idFile}")] [Permission] - [ProducesResponseType(typeof(PhysicalFileResult), (int)System.Net.HttpStatusCode.OK)] + [ProducesResponseType(typeof(FileInfoDto), (int)System.Net.HttpStatusCode.OK)] public async Task GetFileInfoByIdAsync([FromRoute] int idFile, CancellationToken token = default) { int? idCompany = User.GetCompanyId(); From f9e566cfef77f772813448f6c41427df9f5ccaa5 Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Fri, 30 Sep 2022 10:49:40 +0500 Subject: [PATCH 3/6] =?UTF-8?q?#6539681=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services}/IFileRepository.cs | 27 +--- AsbCloudApp/Services/IFileService.cs | 42 ++++++ .../Repository/FileRepository.cs | 124 +++++++++++------- .../Services/FileService.cs | 44 ++++++- AsbCloudWebApi/Controllers/FileController.cs | 15 +-- 5 files changed, 167 insertions(+), 85 deletions(-) rename {AsbCloudInfrastructure/Repository => AsbCloudApp/Services}/IFileRepository.cs (79%) diff --git a/AsbCloudInfrastructure/Repository/IFileRepository.cs b/AsbCloudApp/Services/IFileRepository.cs similarity index 79% rename from AsbCloudInfrastructure/Repository/IFileRepository.cs rename to AsbCloudApp/Services/IFileRepository.cs index 73ae9b86..e01891cc 100644 --- a/AsbCloudInfrastructure/Repository/IFileRepository.cs +++ b/AsbCloudApp/Services/IFileRepository.cs @@ -1,31 +1,16 @@ using AsbCloudApp.Data; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading; using System.Threading.Tasks; -namespace AsbCloudInfrastructure.Repository +namespace AsbCloudApp.Services { /// /// Сервис доступа к файлам /// - public interface IFileRepository + public interface IFileRepository : ICrudService { - /// - /// Добавление, в БД, информации о файле - /// - /// - /// - /// - /// - /// - /// - /// - Task AddAsync(int idWell, int? idUser, int idCategory, - string destinationFileName, long fileSize, CancellationToken token = default); - /// /// Получить файлы определенной категории /// @@ -52,14 +37,6 @@ namespace AsbCloudInfrastructure.Repository int idCategory, string companyName = default, string fileName = default, DateTime begin = default, DateTime end = default, int skip = 0, int take = 32, CancellationToken token = default); - /// - /// Инфо о файле - /// - /// - /// - /// - Task GetInfoAsync(int idFile, CancellationToken token); - /// /// Пометить файл как удаленный /// diff --git a/AsbCloudApp/Services/IFileService.cs b/AsbCloudApp/Services/IFileService.cs index 6b1a171f..89b89f00 100644 --- a/AsbCloudApp/Services/IFileService.cs +++ b/AsbCloudApp/Services/IFileService.cs @@ -107,5 +107,47 @@ namespace AsbCloudApp.Services /// /// Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token); + + /// + /// Получить список файлов в контейнере + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + Task> GetInfosAsync(int idWell, + int idCategory, string companyName = default, string fileName = default, DateTime begin = default, + DateTime end = default, int skip = 0, int take = 32, CancellationToken token = default); + + /// + /// Пометить файл как удаленный + /// + /// + /// + /// + Task MarkAsDeletedAsync(int idFile, CancellationToken token = default); + + /// + /// добавить метку на файл + /// + /// + /// + /// + /// + Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token); + + /// + /// Получить запись по id + /// + /// + /// + /// + Task GetOrDefaultAsync(int id, CancellationToken token); } } diff --git a/AsbCloudInfrastructure/Repository/FileRepository.cs b/AsbCloudInfrastructure/Repository/FileRepository.cs index efa6296a..2726c2b7 100644 --- a/AsbCloudInfrastructure/Repository/FileRepository.cs +++ b/AsbCloudInfrastructure/Repository/FileRepository.cs @@ -1,4 +1,5 @@ using AsbCloudApp.Data; +using AsbCloudApp.Services; using AsbCloudDb.Model; using Mapster; using Microsoft.EntityFrameworkCore; @@ -28,25 +29,6 @@ namespace AsbCloudInfrastructure.Repository .Include(f => f.Well); } - public async Task AddAsync(int idWell, int? idUser, int idCategory, - string destinationFileName, long fileSize, CancellationToken token = default) - { - var fileInfo = new AsbCloudDb.Model.FileInfo() - { - IdWell = idWell, - IdAuthor = idUser, - IdCategory = idCategory, - Name = destinationFileName, - UploadDate = DateTime.UtcNow, - IsDeleted = false, - Size = fileSize, - }; - - var entry = db.Files.Add(fileInfo); - await db.SaveChangesAsync(token).ConfigureAwait(false); - return entry.Entity.Id; - } - public async Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token) { var entities = await dbSetConfigured @@ -126,22 +108,6 @@ namespace AsbCloudInfrastructure.Repository return result; } - public async Task GetInfoAsync(int idFile, CancellationToken token) - { - var entity = await dbSetConfigured - .AsNoTracking() - .FirstOrDefaultAsync(f => f.Id == idFile, token) - .ConfigureAwait(false); - - if (entity is null) - { - throw new FileNotFoundException($"fileId:{idFile} not found"); - } - - var dto = Convert(entity); - return dto; - } - public async Task> GetInfoByIdsAsync(IEnumerable idsFile, CancellationToken token) { var result = new List(); @@ -178,26 +144,20 @@ namespace AsbCloudInfrastructure.Repository public async Task> DeleteAsync(IEnumerable ids, CancellationToken token) { - var filesQuery = db.Files - .Where(f => ids.Contains(f.Id)); + var query = dbSetConfigured + .Where(f => ids.Contains(f.Id) && f.IsDeleted); - var files = await filesQuery.ToListAsync(token); + var files = await query.ToListAsync(token); - var filesDtos = files.Select(x => new FileInfoDto { - Id = x.Id, - IdWell = x.Id, - IdCategory = x.IdCategory, - Name = x.Name - }); + var filesDtos = files.Select(x => Convert(x)); - db.Files.RemoveRange(filesQuery); + db.Files.RemoveRange(query); await db.SaveChangesAsync(token).ConfigureAwait(false); return filesDtos; } - public async Task GetByMarkId(int idMark, - CancellationToken token) + public async Task GetByMarkId(int idMark, CancellationToken token) { var entity = await dbSetConfigured .FirstOrDefaultAsync(f => f.FileMarks.Any(m => m.Id == idMark), token) @@ -271,5 +231,75 @@ namespace AsbCloudInfrastructure.Repository }); return dto; } + + public async Task> GetAllAsync(CancellationToken token) + => await dbSetConfigured.AsNoTracking() + .Select(x => Convert(x)) + .ToListAsync(token) + .ConfigureAwait(false); + + public async Task GetOrDefaultAsync(int id, CancellationToken token) + { + var entity = await dbSetConfigured + .AsNoTracking() + .FirstOrDefaultAsync(f => f.Id == id, token) + .ConfigureAwait(false); + + if (entity is null) + { + throw new FileNotFoundException($"fileId:{id} not found"); + } + + var dto = Convert(entity); + return dto; + } + + public FileInfoDto GetOrDefault(int id) + { + var entity = dbSetConfigured + .AsNoTracking() + .FirstOrDefault(f => f.Id == id); + + if (entity is null) + { + throw new FileNotFoundException($"fileId:{id} not found"); + } + + var dto = Convert(entity); + return dto; + } + + public async Task InsertAsync(FileInfoDto newItem, CancellationToken token) + { + var fileInfo = new AsbCloudDb.Model.FileInfo() + { + IdWell = newItem.IdWell, + IdAuthor = newItem.IdAuthor, + IdCategory = newItem.IdCategory, + Name = newItem.Name, + UploadDate = DateTime.UtcNow, + IsDeleted = false, + Size = newItem.Size, + }; + + var entry = db.Files.Add(fileInfo); + await db.SaveChangesAsync(token).ConfigureAwait(false); + return entry.Entity.Id; + } + + public Task InsertRangeAsync(IEnumerable newItems, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task UpdateAsync(FileInfoDto item, CancellationToken token) + { + throw new NotImplementedException(); + } + + public Task DeleteAsync(int id, CancellationToken token) + { + throw new NotImplementedException(); + } } } diff --git a/AsbCloudInfrastructure/Services/FileService.cs b/AsbCloudInfrastructure/Services/FileService.cs index c30fd23b..6970d9b9 100644 --- a/AsbCloudInfrastructure/Services/FileService.cs +++ b/AsbCloudInfrastructure/Services/FileService.cs @@ -36,7 +36,14 @@ namespace AsbCloudInfrastructure.Services var sysFileInfo = new System.IO.FileInfo(srcFilePath); //save info to db - var fileId = await fileRepository.AddAsync(idWell, idUser, idCategory, destinationFileName, sysFileInfo.Length, token) + var dto = new FileInfoDto { + IdWell = idWell, + IdAuthor = idUser, + IdCategory = idCategory, + Name = destinationFileName, + Size = sysFileInfo.Length + }; + var fileId = await fileRepository.InsertAsync(dto, token) .ConfigureAwait(false); string filePath = MakeFilePath(idWell, idCategory, destinationFileName, fileId); @@ -50,7 +57,16 @@ namespace AsbCloudInfrastructure.Services string fileFullName, Stream fileStream, CancellationToken token) { //save info to db - var fileId = await fileRepository.AddAsync(idWell, idUser, idCategory, Path.GetFileName(fileFullName), fileStream?.Length ?? 0, token) + var dto = new FileInfoDto + { + IdWell = idWell, + IdAuthor = idUser, + IdCategory = idCategory, + Name = Path.GetFileName(fileFullName), + Size = fileStream?.Length ?? 0 + }; + + var fileId = await fileRepository.InsertAsync(dto, token) .ConfigureAwait(false); //save stream to disk @@ -73,7 +89,7 @@ namespace AsbCloudInfrastructure.Services public async Task GetInfoAsync(int idFile, CancellationToken token) { - var dto = await fileRepository.GetInfoAsync(idFile, token).ConfigureAwait(false); + var dto = await fileRepository.GetOrDefaultAsync(idFile, token).ConfigureAwait(false); var ext = Path.GetExtension(dto.Name); @@ -88,7 +104,7 @@ namespace AsbCloudInfrastructure.Services } public Task DeleteAsync(int idFile, CancellationToken token) - => DeleteAsync(new int[] { idFile }, token); + => DeleteAsync(new int[] { idFile }, token); public async Task DeleteAsync(IEnumerable ids, CancellationToken token) { @@ -112,7 +128,7 @@ namespace AsbCloudInfrastructure.Services public async Task GetUrl(int idFile) { - var fileInfo = await fileRepository.GetInfoAsync(idFile, CancellationToken.None).ConfigureAwait(false); + var fileInfo = await fileRepository.GetOrDefaultAsync(idFile, CancellationToken.None).ConfigureAwait(false); return GetUrl(fileInfo.IdWell, fileInfo.IdCategory, fileInfo.Id, Path.GetExtension(fileInfo.Name)); } @@ -145,5 +161,23 @@ namespace AsbCloudInfrastructure.Services return result; } + + public async Task> GetInfosAsync(int idWell, + int idCategory, string companyName = default, string fileName = default, DateTime begin = default, + DateTime end = default, int skip = 0, int take = 32, CancellationToken token = default) + => await fileRepository.GetInfosAsync(idWell, idCategory, companyName, fileName, begin, end, skip, take, token) + .ConfigureAwait(false); + + public async Task MarkAsDeletedAsync(int idFile, CancellationToken token = default) + => await fileRepository.MarkAsDeletedAsync(idFile, token) + .ConfigureAwait(false); + + public async Task CreateFileMarkAsync(FileMarkDto fileMarkDto, int idUser, CancellationToken token) + => await fileRepository.CreateFileMarkAsync(fileMarkDto, idUser, token) + .ConfigureAwait(false); + + public async Task GetOrDefaultAsync(int id, CancellationToken token) + => await fileRepository.GetOrDefaultAsync(id, token) + .ConfigureAwait(false); } } diff --git a/AsbCloudWebApi/Controllers/FileController.cs b/AsbCloudWebApi/Controllers/FileController.cs index b75f71f4..f598bc34 100644 --- a/AsbCloudWebApi/Controllers/FileController.cs +++ b/AsbCloudWebApi/Controllers/FileController.cs @@ -1,10 +1,11 @@ using AsbCloudApp.Data; using AsbCloudApp.Services; -using AsbCloudInfrastructure.Repository; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; +using System.Collections; +using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -21,13 +22,11 @@ namespace AsbCloudWebApi.Controllers { private readonly IFileService fileService; private readonly IWellService wellService; - private readonly IFileRepository fileRepository; - public FileController(IFileService fileService, IWellService wellService, IFileRepository fileRepository) + public FileController(IFileService fileService, IWellService wellService) { this.fileService = fileService; this.wellService = wellService; - this.fileRepository = fileRepository; } /// @@ -101,7 +100,7 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false)) return Forbid(); - var filesInfo = await fileRepository.GetInfosAsync(idWell, idCategory, + var filesInfo = await fileService.GetInfosAsync(idWell, idCategory, companyName, fileName, begin, end, skip, take, token).ConfigureAwait(false); return Ok(filesInfo); @@ -171,7 +170,7 @@ namespace AsbCloudWebApi.Controllers if (!userService.HasPermission((int)idUser, $"File.edit{file.IdCategory}")) return Forbid(); - var result = await fileRepository.MarkAsDeletedAsync(idFile, token); + var result = await fileService.MarkAsDeletedAsync(idFile, token); return Ok(result); } @@ -196,7 +195,7 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false)) return Forbid(); - var result = await fileRepository.CreateFileMarkAsync(markDto, (int)idUser, token) + var result = await fileService.CreateFileMarkAsync(markDto, (int)idUser, token) .ConfigureAwait(false); return Ok(result); @@ -246,7 +245,7 @@ namespace AsbCloudWebApi.Controllers try { - var fileInfo = await fileRepository.GetInfoAsync(idFile, token).ConfigureAwait(false); + var fileInfo = await fileService.GetOrDefaultAsync(idFile, token).ConfigureAwait(false); return Ok(fileInfo); } catch (FileNotFoundException ex) From 6ab6da961aff74d84c09105df2788fb799474678 Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Fri, 30 Sep 2022 11:05:09 +0500 Subject: [PATCH 4/6] #6539681 --- AsbCloudApp/Services/IFileService.cs | 8 ++++++++ AsbCloudInfrastructure/Services/FileService.cs | 4 ++++ .../ServicesTests/DrillingProgramServiceTest.cs | 14 ++++++++++++++ .../ServicesTests/WellFinalDocumentsServiceTest.cs | 5 ++++- 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/AsbCloudApp/Services/IFileService.cs b/AsbCloudApp/Services/IFileService.cs index 89b89f00..c6f299c3 100644 --- a/AsbCloudApp/Services/IFileService.cs +++ b/AsbCloudApp/Services/IFileService.cs @@ -149,5 +149,13 @@ namespace AsbCloudApp.Services /// /// Task GetOrDefaultAsync(int id, CancellationToken token); + + /// + /// получить инфо о файле по метке + /// + /// + /// + /// + Task GetByMarkId(int idMark, CancellationToken token); } } diff --git a/AsbCloudInfrastructure/Services/FileService.cs b/AsbCloudInfrastructure/Services/FileService.cs index 6970d9b9..5f01fc22 100644 --- a/AsbCloudInfrastructure/Services/FileService.cs +++ b/AsbCloudInfrastructure/Services/FileService.cs @@ -179,5 +179,9 @@ namespace AsbCloudInfrastructure.Services public async Task GetOrDefaultAsync(int id, CancellationToken token) => await fileRepository.GetOrDefaultAsync(id, token) .ConfigureAwait(false); + + public async Task GetByMarkId(int idMark, CancellationToken token) + => await fileRepository.GetByMarkId(idMark, token) + .ConfigureAwait(false); } } diff --git a/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs index 7cea8d32..dfe19eaa 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs @@ -1,6 +1,7 @@ using AsbCloudApp.Data; using AsbCloudApp.Services; using AsbCloudDb.Model; +using AsbCloudInfrastructure.Repository; using AsbCloudInfrastructure.Services.DrillingProgram; using Mapster; using Microsoft.Extensions.Configuration; @@ -80,6 +81,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests private readonly Mock fileServiceMock; private readonly Mock userServiceMock; private readonly Mock wellServiceMock; + private readonly Mock fileRepository; private readonly Mock configurationMock; private readonly Mock backgroundWorkerMock; private readonly Mock emailService; @@ -99,6 +101,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock = new Mock(); userServiceMock = new Mock(); wellServiceMock = new Mock(); + fileRepository = new Mock(); configurationMock = new Mock(); backgroundWorkerMock = new Mock(); } @@ -111,6 +114,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -128,6 +132,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -147,6 +152,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -170,6 +176,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -205,6 +212,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -231,6 +239,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -262,6 +271,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -300,6 +310,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -327,6 +338,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -354,6 +366,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -384,6 +397,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, + fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); diff --git a/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs index ac53a5b9..1957091d 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs @@ -23,6 +23,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests private readonly Mock configurationMock; private readonly Mock emailServiceMock; private readonly Mock fileCategoryService; + private readonly Mock fileRepository; private readonly IEnumerable users = new List { new UserDto { @@ -52,6 +53,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests configurationMock = new Mock(); emailServiceMock = new Mock(); fileCategoryService = new Mock(); + fileRepository = new Mock(); service = new WellFinalDocumentsService( context: context, @@ -60,7 +62,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests wellService: wellServiceMock.Object, configuration: configurationMock.Object, emailService: emailServiceMock.Object, - fileCategoryService: fileCategoryService.Object); + fileCategoryService: fileCategoryService.Object, + fileRepository.Object); } ~WellFinalDocumentsServiceTest() From 9644f730906746e67a0904b660edefeac1f5a50c Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Fri, 30 Sep 2022 13:34:50 +0500 Subject: [PATCH 5/6] =?UTF-8?q?#6539681=20=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5?= =?UTF-8?q?=D1=84=D0=B5=D1=80=D0=B5=D0=BD=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Services/IFileService.cs | 25 +++++++++++++++++++ AsbCloudInfrastructure/DependencyInjection.cs | 2 +- .../DrillingProgram/DrillingProgramService.cs | 10 +++----- .../Services/FileService.cs | 12 +++++++++ .../Services/ReportService.cs | 5 ++-- .../Services/WellFinalDocumentsService.cs | 9 +++---- .../DrillingProgramServiceTest.cs | 13 ---------- .../WellFinalDocumentsServiceTest.cs | 5 +--- 8 files changed, 48 insertions(+), 33 deletions(-) diff --git a/AsbCloudApp/Services/IFileService.cs b/AsbCloudApp/Services/IFileService.cs index c6f299c3..a83d6d5c 100644 --- a/AsbCloudApp/Services/IFileService.cs +++ b/AsbCloudApp/Services/IFileService.cs @@ -157,5 +157,30 @@ namespace AsbCloudApp.Services /// /// Task GetByMarkId(int idMark, CancellationToken token); + + /// + /// пометить метки файлов как удаленные + /// + /// + /// + /// + Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token); + + /// + /// Получение файлов по скважине + /// + /// + /// + /// + Task> GetInfosByWellIdAsync(int idWell, CancellationToken token); + + /// + /// Получить файлы определенной категории + /// + /// + /// + /// + /// + Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token); } } diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index e86a314b..f178b648 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -106,7 +106,6 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -155,6 +154,7 @@ namespace AsbCloudInfrastructure dbSet => dbSet .Include(c => c.Wells) .Include(c => c.Deposit))); // может быть включен в сервис ClusterService + services.AddTransient(); // Subsystem service services.AddTransient, CrudCacheServiceBase>(); services.AddTransient(); diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index c1973c11..0e840524 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -23,7 +23,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram private readonly IFileService fileService; private readonly IUserService userService; private readonly IWellService wellService; - private readonly IFileRepository fileRepository; private readonly IConfiguration configuration; private readonly IBackgroundWorkerService backgroundWorker; private readonly IEmailService emailService; @@ -54,7 +53,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram IFileService fileService, IUserService userService, IWellService wellService, - IFileRepository fileRepository, IConfiguration configuration, IBackgroundWorkerService backgroundWorker, IEmailService emailService) @@ -63,7 +61,6 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram this.fileService = fileService; this.userService = userService; this.wellService = wellService; - this.fileRepository = fileRepository; this.configuration = configuration; this.backgroundWorker = backgroundWorker; this.connectionString = configuration.GetConnectionString("DefaultConnection"); @@ -312,9 +309,9 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram .Select(m => m.Id); if (oldMarksIds?.Any() == true) - await fileRepository.MarkFileMarkAsDeletedAsync(oldMarksIds, token); + await fileService.MarkFileMarkAsDeletedAsync(oldMarksIds, token); - var result = await fileRepository.CreateFileMarkAsync(fileMarkDto, idUser, token) + var result = await fileService.CreateFileMarkAsync(fileMarkDto, idUser, token) .ConfigureAwait(false); if (fileMarkDto.IdMarkType == idMarkTypeReject) @@ -344,7 +341,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram public async Task MarkAsDeletedFileMarkAsync(int idMark, CancellationToken token) { - var fileInfo = await fileRepository.GetByMarkId(idMark, token) + var fileInfo = await fileService.GetByMarkId(idMark, token) .ConfigureAwait(false); if (fileInfo.IdCategory < idFileCategoryDrillingProgramPartsStart || @@ -483,6 +480,7 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram .UseNpgsql(connectionString) .Options; using var context = new AsbCloudDbContext(contextOptions); + var fileRepository = new FileRepository(context); var fileService = new FileService(fileRepository); var files = state.Parts.Select(p => fileService.GetUrl(p.File)); DrillingProgramMaker.UniteExcelFiles(files, tempResultFilePath, state.Parts, well); diff --git a/AsbCloudInfrastructure/Services/FileService.cs b/AsbCloudInfrastructure/Services/FileService.cs index 5f01fc22..cdfed260 100644 --- a/AsbCloudInfrastructure/Services/FileService.cs +++ b/AsbCloudInfrastructure/Services/FileService.cs @@ -183,5 +183,17 @@ namespace AsbCloudInfrastructure.Services public async Task GetByMarkId(int idMark, CancellationToken token) => await fileRepository.GetByMarkId(idMark, token) .ConfigureAwait(false); + + public async Task MarkFileMarkAsDeletedAsync(IEnumerable idsMarks, CancellationToken token) + => await fileRepository.MarkFileMarkAsDeletedAsync(idsMarks, token) + .ConfigureAwait(false); + + public async Task> GetInfosByWellIdAsync(int idWell, CancellationToken token) + => await fileRepository.GetInfosByWellIdAsync(idWell, token) + .ConfigureAwait(false); + + public async Task> GetInfosByCategoryAsync(int idWell, int idCategory, CancellationToken token) + => await fileRepository.GetInfosByCategoryAsync(idWell, idCategory, token) + .ConfigureAwait(false); } } diff --git a/AsbCloudInfrastructure/Services/ReportService.cs b/AsbCloudInfrastructure/Services/ReportService.cs index 6265f6c6..53d8653a 100644 --- a/AsbCloudInfrastructure/Services/ReportService.cs +++ b/AsbCloudInfrastructure/Services/ReportService.cs @@ -22,17 +22,15 @@ namespace AsbCloudInfrastructure.Services private readonly ITelemetryService telemetryService; private readonly IWellService wellService; private readonly IBackgroundWorkerService backgroundWorkerService; - private readonly IFileRepository fileRepository; public ReportService(IAsbCloudDbContext db, IConfiguration configuration, - ITelemetryService telemetryService, IWellService wellService, IBackgroundWorkerService backgroundWorkerService, IFileRepository fileRepository) + ITelemetryService telemetryService, IWellService wellService, IBackgroundWorkerService backgroundWorkerService) { this.db = db; this.connectionString = configuration.GetConnectionString("DefaultConnection"); this.wellService = wellService; this.backgroundWorkerService = backgroundWorkerService; this.telemetryService = telemetryService; - this.fileRepository = fileRepository; ReportCategoryId = db.FileCategories.AsNoTracking() .FirstOrDefault(c => c.Name.Equals("Рапорт")).Id; @@ -68,6 +66,7 @@ namespace AsbCloudInfrastructure.Services }; generator.Make(reportFileName); + var fileRepository = new FileRepository(context); var fileService = new FileService(fileRepository); var fileInfo = await fileService.MoveAsync(idWell, idUser, ReportCategoryId, reportFileName, reportFileName, token); diff --git a/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs b/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs index dc90128c..4d5f6427 100644 --- a/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs +++ b/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs @@ -28,7 +28,6 @@ namespace AsbCloudInfrastructure.Services private readonly IConfiguration configuration; private readonly IEmailService emailService; private readonly IFileCategoryService fileCategoryService; - private readonly IFileRepository fileRepository; private const int FileServiceThrewException = -1; @@ -38,8 +37,7 @@ namespace AsbCloudInfrastructure.Services IWellService wellService, IConfiguration configuration, IEmailService emailService, - IFileCategoryService fileCategoryService, - IFileRepository fileRepository) + IFileCategoryService fileCategoryService) { this.context = context; this.fileService = fileService; @@ -48,7 +46,6 @@ namespace AsbCloudInfrastructure.Services this.configuration = configuration; this.emailService = emailService; this.fileCategoryService = fileCategoryService; - this.fileRepository = fileRepository; } public async Task UpdateRangeAsync(int idWell, IEnumerable? dtos, CancellationToken token) @@ -98,7 +95,7 @@ namespace AsbCloudInfrastructure.Services var categoriesIds = entitiesGroups .Select(g => g.Key); - var files = (await fileRepository + var files = (await fileService .GetInfosByWellIdAsync(idWell, token) .ConfigureAwait(false)) .Where(f => categoriesIds.Contains(f.IdCategory)) @@ -165,7 +162,7 @@ namespace AsbCloudInfrastructure.Services public async Task GetFilesHistoryByIdCategory(int idWell, int idCategory, CancellationToken token) { - var files = await fileRepository.GetInfosByCategoryAsync(idWell, idCategory, token).ConfigureAwait(false); + var files = await fileService.GetInfosByCategoryAsync(idWell, idCategory, token).ConfigureAwait(false); return new WellFinalDocumentsHistoryDto { IdWell = idWell, diff --git a/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs index dfe19eaa..949c8c46 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs @@ -81,7 +81,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests private readonly Mock fileServiceMock; private readonly Mock userServiceMock; private readonly Mock wellServiceMock; - private readonly Mock fileRepository; private readonly Mock configurationMock; private readonly Mock backgroundWorkerMock; private readonly Mock emailService; @@ -101,7 +100,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock = new Mock(); userServiceMock = new Mock(); wellServiceMock = new Mock(); - fileRepository = new Mock(); configurationMock = new Mock(); backgroundWorkerMock = new Mock(); } @@ -114,7 +112,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -132,7 +129,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -152,7 +148,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -176,7 +171,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -212,7 +206,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -239,7 +232,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -271,7 +263,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -310,7 +301,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -338,7 +328,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -366,7 +355,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); @@ -397,7 +385,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests fileServiceMock.Object, userServiceMock.Object, wellServiceMock.Object, - fileRepository.Object, configurationMock.Object, backgroundWorkerMock.Object, emailService.Object); diff --git a/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs index 1957091d..ac53a5b9 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs @@ -23,7 +23,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests private readonly Mock configurationMock; private readonly Mock emailServiceMock; private readonly Mock fileCategoryService; - private readonly Mock fileRepository; private readonly IEnumerable users = new List { new UserDto { @@ -53,7 +52,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests configurationMock = new Mock(); emailServiceMock = new Mock(); fileCategoryService = new Mock(); - fileRepository = new Mock(); service = new WellFinalDocumentsService( context: context, @@ -62,8 +60,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests wellService: wellServiceMock.Object, configuration: configurationMock.Object, emailService: emailServiceMock.Object, - fileCategoryService: fileCategoryService.Object, - fileRepository.Object); + fileCategoryService: fileCategoryService.Object); } ~WellFinalDocumentsServiceTest() From 1e34f137cf2adb6d34ab1a71385e54692ae67dd4 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Mon, 3 Oct 2022 16:04:25 +0500 Subject: [PATCH 6/6] rename method --- AsbCloudWebApi/Controllers/FileController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AsbCloudWebApi/Controllers/FileController.cs b/AsbCloudWebApi/Controllers/FileController.cs index f598bc34..a7711247 100644 --- a/AsbCloudWebApi/Controllers/FileController.cs +++ b/AsbCloudWebApi/Controllers/FileController.cs @@ -236,7 +236,7 @@ namespace AsbCloudWebApi.Controllers [Route("/api/files/{idFile}")] [Permission] [ProducesResponseType(typeof(FileInfoDto), (int)System.Net.HttpStatusCode.OK)] - public async Task GetFileInfoByIdAsync([FromRoute] int idFile, CancellationToken token = default) + public async Task GetFileInfoAsync([FromRoute] int idFile, CancellationToken token = default) { int? idCompany = User.GetCompanyId();