diff --git a/AsbCloudApp/Repositories/IFileStorageRepository.cs b/AsbCloudApp/Repositories/IFileStorageRepository.cs
index ce5d693b..b8b7b482 100644
--- a/AsbCloudApp/Repositories/IFileStorageRepository.cs
+++ b/AsbCloudApp/Repositories/IFileStorageRepository.cs
@@ -11,6 +11,7 @@ namespace AsbCloudApp.Repositories
///
public interface IFileStorageRepository
{
+
///
/// Получение длинны фала и проверка его наличия, если отсутствует падает исключение
///
@@ -35,10 +36,16 @@ namespace AsbCloudApp.Repositories
Task SaveFileAsync(string filePathRec, Stream fileStreamSrc, CancellationToken token);
///
- /// Удаление файла
+ /// Удаление пачки файлов
///
///
- void DeleteFile(IEnumerable filesName);
+ void DeleteFiles(IEnumerable filesName);
+
+ ///
+ /// Удаление одного файла
+ ///
+ ///
+ void DeleteFile(string fileName);
///
/// Удаление всех файлов с диска о которых нет информации в базе
@@ -55,7 +62,7 @@ namespace AsbCloudApp.Repositories
IEnumerable GetListFilesNotDisc(IEnumerable files);
///
- /// Получение пути к файлу
+ /// Создание пути для сохранения файла связанного со скважиной
///
///
///
@@ -63,15 +70,34 @@ namespace AsbCloudApp.Repositories
///
///
string MakeFilePath(int idWell, int idCategory, string fileFullName, int fileId);
+
+ ///
+ /// Создание пути для сохранения файла
+ ///
+ ///
+ ///
+ ///
+ ///
+ string MakeFilePath(string path1, string path2, string path3);
///
- /// Получить путь для скачивания
+ /// Получение пути к файлу связанного со скважиной
///
///
///
///
- ///
+ ///
///
- string GetUrl(int idWell, int idCategory, int idFile, string dotExtention);
+ string GetFilePath(int idWell, int idCategory, int idFile, string dotExtenstion);
+
+ ///
+ /// Получение пути файла лежащего на диске
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ string GetFilePath(string path1, string path2, int idFile, string dotExtenstion);
}
}
diff --git a/AsbCloudApp/Services/FileService.cs b/AsbCloudApp/Services/FileService.cs
index 54853b51..0513881b 100644
--- a/AsbCloudApp/Services/FileService.cs
+++ b/AsbCloudApp/Services/FileService.cs
@@ -121,7 +121,7 @@ namespace AsbCloudApp.Services
return 0;
var filesName = files.Select(x => GetUrl(x.IdWell, x.IdCategory, x.Id, Path.GetExtension(x.Name)));
- fileStorageRepository.DeleteFile(filesName);
+ fileStorageRepository.DeleteFiles(filesName);
return files.Any() ? 1 : 0;
}
@@ -143,7 +143,7 @@ namespace AsbCloudApp.Services
///
///
public string GetUrl(int idWell, int idCategory, int idFile, string dotExtention) =>
- fileStorageRepository.GetUrl(idWell, idCategory, idFile, dotExtention);
+ fileStorageRepository.GetFilePath(idWell, idCategory, idFile, dotExtention);
///
/// пометить метку файла как удаленную
diff --git a/AsbCloudInfrastructure/Repository/FileStorageRepository.cs b/AsbCloudInfrastructure/Repository/FileStorageRepository.cs
index 94c932db..4af6aa09 100644
--- a/AsbCloudInfrastructure/Repository/FileStorageRepository.cs
+++ b/AsbCloudInfrastructure/Repository/FileStorageRepository.cs
@@ -6,116 +6,126 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-namespace AsbCloudInfrastructure.Repository
+namespace AsbCloudInfrastructure.Repository;
+
+public class FileStorageRepository : IFileStorageRepository
{
+ ///
+ /// Директория хранения файлов
+ ///
+ private readonly string RootPath = "files";
- public class FileStorageRepository : IFileStorageRepository
+ public FileStorageRepository()
{
- ///
- /// Директория хранения файлов
- ///
- private readonly string RootPath = "files";
+ }
- public FileStorageRepository()
+ public async Task SaveFileAsync(string filePathRec, Stream fileStreamSrc, CancellationToken token)
+ {
+ CreateDirectory(filePathRec);
+ using var newfileStream = new FileStream(filePathRec, FileMode.Create);
+ await fileStreamSrc.CopyToAsync(newfileStream, token).ConfigureAwait(false);
+ }
+
+ public void DeleteFiles(IEnumerable filesName)
+ {
+ foreach (var fileName in filesName)
{
- }
-
- public async Task SaveFileAsync(string filePathRec, Stream fileStreamSrc, CancellationToken token)
- {
- CreateDirectory(filePathRec);
- using var newfileStream = new FileStream(filePathRec, FileMode.Create);
- await fileStreamSrc.CopyToAsync(newfileStream, token).ConfigureAwait(false);
- }
-
- public void DeleteFile(IEnumerable filesName)
- {
- foreach (var fileName in filesName)
- {
- if (File.Exists(fileName))
- File.Delete(fileName);
- }
- }
-
- public long GetFileLength(string srcFilePath)
- {
- var sysFileInfo = new FileInfo(srcFilePath);
- return sysFileInfo.Length;
- }
-
- public void MoveFile(string srcFilePath, string filePath)
- {
- CreateDirectory(filePath);
- File.Move(srcFilePath, filePath);
- }
-
- public string MakeFilePath(int idWell, int idCategory, string fileFullName, int fileId)
- {
- return Path.Combine(RootPath, $"{idWell}",
- $"{idCategory}", $"{fileId}" + $"{Path.GetExtension(fileFullName)}");
- }
-
- public int DeleteFilesNotInList(int idWell, IEnumerable idsFilesList)
- {
- var allFilesPath = GetFilesPath(idWell);
- var result = 0;
-
- foreach (var filePath in allFilesPath)
- {
- if (int.TryParse(Path.GetFileNameWithoutExtension(filePath), out int idFile)
- || !idsFilesList.Any(x => x == idFile))
- {
- File.Delete(filePath);
- result++;
- }
- }
-
- return result;
- }
-
- public IEnumerable GetListFilesNotDisc(IEnumerable files)
- {
- var resutl = new List();
- var groupFiles = files.GroupBy(x => x.IdWell);
-
- foreach (var itemGroupFiles in groupFiles)
- {
- var idsFilesStorage = GetIdsFiles(itemGroupFiles.Key);
- foreach (var file in files)
- {
- if (!idsFilesStorage.Any(x => x == file.Id))
- resutl.Add(file);
- }
- }
-
- return resutl;
- }
-
- public string GetUrl(int idWell, int idCategory, int idFile, string dotExtention) =>
- Path.Combine(RootPath, idWell.ToString(), idCategory.ToString(), $"{idFile}{dotExtention}");
-
- private IEnumerable GetIdsFiles(int idWell)
- {
- var result = new List();
- var allFilesPath = GetFilesPath(idWell);
-
- foreach (var filePath in allFilesPath)
- if(int.TryParse(Path.GetFileNameWithoutExtension(filePath), out int idFile))
- result.Add(idFile);
-
- return result;
- }
-
- private IEnumerable GetFilesPath(int idWell)
- {
- var path = Path.Combine(RootPath, $"{idWell}");
- return Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
- }
-
- private static void CreateDirectory(string filePath)
- {
- var directoryName = Path.GetDirectoryName(filePath)!;
- Directory.CreateDirectory(directoryName);
+ DeleteFile(fileName);
}
}
+ public void DeleteFile(string fileName)
+ {
+ if (File.Exists(fileName))
+ File.Delete(fileName);
+ }
+
+ public long GetFileLength(string srcFilePath)
+ {
+ var sysFileInfo = new FileInfo(srcFilePath);
+ return sysFileInfo.Length;
+ }
+
+ public void MoveFile(string srcFilePath, string filePath)
+ {
+ CreateDirectory(filePath);
+ File.Move(srcFilePath, filePath);
+ }
+
+ public string MakeFilePath(int idWell, int idCategory, string fileFullName, int fileId) =>
+ MakeFilePath($"{idWell}",
+ $"{idCategory}",
+ $"{fileId}" + $"{Path.GetExtension(fileFullName)}");
+
+ public string MakeFilePath(string path1, string path2, string path3) =>
+ Path.Combine(RootPath,
+ path1,
+ path2,
+ path3);
+
+ public int DeleteFilesNotInList(int idWell, IEnumerable idsFilesList)
+ {
+ var allFilesPath = GetFilesPath(idWell);
+ var result = 0;
+
+ foreach (var filePath in allFilesPath)
+ {
+ if (int.TryParse(Path.GetFileNameWithoutExtension(filePath), out int idFile)
+ || !idsFilesList.Any(x => x == idFile))
+ {
+ File.Delete(filePath);
+ result++;
+ }
+ }
+
+ return result;
+ }
+
+ public IEnumerable GetListFilesNotDisc(IEnumerable files)
+ {
+ var resutl = new List();
+ var groupFiles = files.GroupBy(x => x.IdWell);
+
+ foreach (var itemGroupFiles in groupFiles)
+ {
+ var idsFilesStorage = GetIdsFiles(itemGroupFiles.Key);
+ foreach (var file in files)
+ {
+ if (!idsFilesStorage.Any(x => x == file.Id))
+ resutl.Add(file);
+ }
+ }
+
+ return resutl;
+ }
+
+ public string GetFilePath(int idWell, int idCategory, int idFile, string dotExtenstion) =>
+ GetFilePath(idWell.ToString(), idCategory.ToString(), idFile, dotExtenstion);
+
+ public string GetFilePath(string path1, string path2, int idFile, string dotExtenstion) =>
+ Path.Combine(RootPath, path1, path2, $"{idFile}{dotExtenstion}");
+
+ private IEnumerable GetIdsFiles(int idWell)
+ {
+ var result = new List();
+ var allFilesPath = GetFilesPath(idWell);
+
+ foreach (var filePath in allFilesPath)
+ if (int.TryParse(Path.GetFileNameWithoutExtension(filePath), out int idFile))
+ result.Add(idFile);
+
+ return result;
+ }
+
+ private IEnumerable GetFilesPath(int idWell)
+ {
+ var path = Path.Combine(RootPath, $"{idWell}");
+ return Directory.GetFiles(path, "*.*", SearchOption.AllDirectories);
+ }
+
+ private static void CreateDirectory(string filePath)
+ {
+ var directoryName = Path.GetDirectoryName(filePath)!;
+ Directory.CreateDirectory(directoryName);
+ }
}
diff --git a/AsbCloudWebApi.Tests/ServicesTests/FileServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/FileServiceTest.cs
index 9fb13366..707a3b50 100644
--- a/AsbCloudWebApi.Tests/ServicesTests/FileServiceTest.cs
+++ b/AsbCloudWebApi.Tests/ServicesTests/FileServiceTest.cs
@@ -128,7 +128,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
});
var storageRepositoryMock = new Mock();
- storageRepositoryMock.Setup(x => x.GetUrl(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
+ storageRepositoryMock.Setup(x => x.GetFilePath(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
.Returns((int idWell, int idCategory, int idFile, string dotExtention) => {
return Path.Combine("files", idWell.ToString(), idCategory.ToString(), $"{idFile}{dotExtention}");
});