146 lines
6.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
namespace gehGassi.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der die Verwaltung von Dateien ermöglicht
/// </summary>
public interface IFileService
{
/// <summary>
/// Speichern einer Datei in einen Container
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="filename">Dateiname (inkl. Pfad, wenn gewünscht)</param>
/// <param name="file">Datei als Byte-Array</param>
/// <param name="overwrite">Überschreiben vorhandener Daten</param>
/// <returns>Absoluter Dateiname</returns>
Task<string> StoreAsync(string containerName, string filename, byte[] file, bool overwrite = true);
/// <summary>
/// Speichern einer Datei in einen Container
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="filename">Dateiname (inkl. Pfad, wenn gewünscht)</param>
/// <param name="fileStream">Datei als Stream</param>
/// <param name="overwrite">Überschreiben vorhandener Daten</param>
/// <returns>Absoluter Dateiname</returns>
Task<string> StoreAsync(string containerName, string filename, Stream fileStream, bool overwrite = true);
/// <summary>
/// Umbenennen einer Datei in einem Container
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="filename">Dateiname (inkl. Pfad, wenn gewünscht)</param>
/// <param name="newFilename">Neuer Dateiname</param>
Task RenameAsync(string containerName, string filename, string newFilename);
/// <summary>
/// Gibt eine Datei zurück
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="filename">Dateiname (inkl. Pfad, wenn gewünscht)</param>
/// <returns>Datei als Byte-Array</returns>
Task<byte[]> GetAsync(string containerName, string filename);
/// <summary>
/// Gibt eine Datei zurück
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="filename">Dateiname (inkl. Pfad, wenn gewünscht)</param>
/// <returns>Datei als Stream</returns>
Task<Stream> GetAsStreamAsync(string containerName, string filename);
/// <summary>
/// Löschen einer Datei in einem Container
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="filename">Dateiname (inkl. Pfad, wenn gewünscht)</param>
Task DeleteAsync(string containerName, string filename);
/// <summary>
/// Gibt eine Liste aller Dateien eines Containers zurück die sich in einem Directory befinden
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="directory">Verzeichnis.</param>
/// <param name="fileNamePart">Teil eines Dateinamens für die suche</param>
/// <returns>Liste von Dateien</returns>
Task<List<string>> ListFilesAsync(string containerName, string directory = "", string fileNamePart = "");
/// <summary>
/// Gibt eine Liste aller Verzeichnise zurück die sich im Container befindne
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="root">wenn angegeben, wird von dem Verzeihnis als root ausgegangen</param>
/// <returns></returns>
Task<List<string>> ListDirectoriesAsync(string containerName, string root = "");
/// <summary>
/// Koperien von Dateinen eines Containers in einen anderen
/// </summary>
/// <param name="sourceContainer">Quellcontainer</param>
/// <param name="sourceDirectory">Quellpfad</param>
/// <param name="targetContainer">ZielContainer</param>
/// <param name="targetDirectory">ZielPfad</param>
Task CopyFilesAsync(string sourceContainer, string sourceDirectory, string targetContainer, string targetDirectory);
/// <summary>
/// Koperien von Dateien eines Pfades in einen anderen
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="sourceDirectory">Quellpfad</param>
/// <param name="targetDirectory">ZielPfad</param>
Task CopyFilesAsync(string containerName, string sourceDirectory, string targetDirectory);
/// <summary>
/// Verschieben von Dateien eines Containers in einen anderen
/// </summary>
/// <param name="sourceContainer">Quellcontainer</param>
/// <param name="sourceDirectory">Quellpfad</param>
/// <param name="targetContainer">ZielContainer</param>
/// <param name="targetDirectory">ZielPfad</param>
Task MoveFilesAsync(string sourceContainer, string sourceDirectory, string targetContainer, string targetDirectory);
/// <summary>
/// Verschieben von Dateien eines Pfades in einen anderen
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="sourceDirectory">Quellpfad</param>
/// <param name="targetDirectory">ZielPfad</param>
Task MoveFilesAsync(string containerName, string sourceDirectory, string targetDirectory);
/// <summary>
/// Löschen des Inhalts eines Verzeichnises
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="directory">Verzeichnis</param>
/// <param name="fileNamePart">Optional: Dateinamen Wildcard</param>
Task ClearDirectoryAsync(string containerName, string directory, string fileNamePart = "");
/// <summary>
/// Löscht einen Container und den Inhalt
/// </summary>
/// <param name="containerName">Name des Containers</param>
Task DeleteContainerAsync(string containerName);
/// <summary>
/// Löscht Dateien aus einem Ordner auf welche
/// vor dem Datum das letzte mal zugegriffen wurde
/// </summary>
/// <param name="containerName">Name des Containers</param>
/// <param name="directory">Verzeichnis</param>
/// <param name="date">Datum</param>
Task DeleteOldFilesAsync(string containerName, string directory, DateTimeOffset date);
/// <summary>
/// Gibt den reinen Dateinamen eines Files zurück (Ohne Directories usw)
/// </summary>
/// <param name="fileName">Dateiname</param>
/// <returns>Reiner Dateiname</returns>
string GetFlatFilename(string fileName);
}
}