FlowStorage 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package FlowStorage --version 1.0.0
                    
NuGet\Install-Package FlowStorage -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FlowStorage" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FlowStorage" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="FlowStorage" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FlowStorage --version 1.0.0
                    
#r "nuget: FlowStorage, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FlowStorage@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FlowStorage&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=FlowStorage&version=1.0.0
                    
Install as a Cake Tool

<h1 align="center"> FlowStorage Library </h1>

<p align="center"> <a href="https://www.nuget.org/packages/FlowStorage"><img src="https://img.shields.io/nuget/vpre/FlowStorage.svg" alt="Version" /></a> <a href="https://www.nuget.org/packages/FlowStorage"><img src="https://img.shields.io/nuget/dt/FlowStorage.svg" alt="Downloads" /></a> <a href="https://github.com/robinrodricks/FlowStorage/graphs/contributors"><img src="https://img.shields.io/github/contributors/robinrodricks/FlowStorage.svg" alt="GitHub contributors" /></a> <a href="https://www.codacy.com/gh/robinrodricks/FlowStorage/dashboard"><img src="https://app.codacy.com/project/badge/Grade/691e960f4e1a45e58e3556acaf3adf5c" alt="Codacy Badge" /></a> <a href="https://github.com/robinrodricks/FlowStorage/blob/develop/LICENSE"><img src="https://img.shields.io/github/license/robinrodricks/FluentStorage.svg" alt="License" /></a> </p>

<p align="center"> <b>FluentStorage is free, but powered by</b> <a href="https://github.com/sponsors/robinrodricks"><b>your donations</b></a> </p>

FlowStorage es una librería desarrollada en .NET 8 que proporciona una abstracción para gestionar el almacenamiento de datos en flujos ("flow storage").
La librería permite trabajar tanto con almacenamiento local (sistema de ficheros) como con Azure Blob Storage, ofreciendo una solución flexible y escalable para aplicaciones distribuidas.

Características

  • Abstracciones y Contratos
    Define interfaces que permiten interactuar con el almacenamiento sin depender de implementaciones específicas.

  • Soporte para Múltiples Almacenamientos

    • LocalFlowStorage: Implementación basada en el sistema de ficheros local.
    • AzureBlobFlowStorage: Implementación que utiliza Azure Blob Storage (integración con wrappers para facilitar testing y abstraer el SDK).
  • Patrón Factory
    La clase FlowStorageFactory permite crear la implementación correcta de IFlowStorage en función de la configuración (mediante enumerados y variables de entorno).

  • Integración con Dependency Injection (DI)
    Extensión AddFlowStorage para registrar en el contenedor de dependencias solo las implementaciones necesarias según el tipo de almacenamiento configurado.

  • Tests Unitarios y de Integración Cobertura completa con tests unitarios, tests de integración (usando TestContainers y Azurite para Azure, y directorios temporales para almacenamiento local), tests de casos extremos y pruebas de concurrencia.

Requisitos

  • .NET 8 o superior
  • Docker (para ejecutar los tests de integración con Azurite a través de TestContainers)

Instalación

La librería está disponible en NuGet.org. Para instalarla, simplemente añade el paquete a tu proyecto usando el siguiente comando:

Abre la solución en Visual Studio o ejecuta:

dotnet add package FlowStorage

O, si prefieres utilizar el Administrador de paquetes NuGet en Visual Studio, busca "FlowStorage" y selecciona la última versión disponible.

Configuración

La librería se configura a través de IConfiguration y/o variables de entorno.
Se requiere definir al menos los siguientes valores:

  • FlowStorage:type o la variable de entorno FLOWSTORAGE_TYPE
    Define el tipo de almacenamiento a utilizar. Valores posibles:

    • LocalStorage
    • AzureBlobStorage
  • FlowStorage:connectionString o la variable de entorno FLOWSTORAGE_CONNECTION_STRING
    Cadena de conexión para el almacenamiento:

    • Para LocalStorage: Ruta base para los archivos.
    • Para AzureBlobStorage: Cadena de conexión de Azure Storage o "UseDevelopmentStorage=true" para desarrollo con Azurite.

Ejemplo de appsettings.json:

{
  "FlowStorage": {
    "type": "AzureBlobStorage",
    "connectionString": "UseDevelopmentStorage=true"
  }
}

Uso

Configuración de DI

Para registrar la librería en el contenedor de dependencias, utiliza el método de extensión AddFlowStorage. Por ejemplo:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using TuLibreria.Extensions;

var configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();

var services = new ServiceCollection();
services.AddFlowStorage(configuration);

// Ahora puedes inyectar IFlowStorage en tus servicios.
var serviceProvider = services.BuildServiceProvider();
var flowStorage = serviceProvider.GetRequiredService<IFlowStorage>();

Ejemplo de Uso en Código

public class MyStorageService
{
    private readonly IFlowStorage _flowStorage;

    public MyStorageService(IFlowStorage flowStorage)
    {
        _flowStorage = flowStorage;
    }

    public async Task UploadAndDownloadFile(string container, string fileName, string content)
    {
        await _flowStorage.CreateContainerIfNotExistsAsync(container);
        await _flowStorage.UploadFileAsync(container, fileName, content);
        var downloadedContent = await _flowStorage.ReadFileAsync(container, fileName);
        Console.WriteLine($"Downloaded content: {downloadedContent}");
    }
}

Tests

La solución incluye una suite de tests completa:

  • Tests Unitarios:
    Validan la lógica de negocio, manejo de excepciones y validaciones de parámetros tanto en LocalFlowStorage como en AzureBlobFlowStorage.

  • Tests de Integración:

    • LocalFlowStorage: Utiliza directorios temporales para probar la lectura/escritura en el sistema de ficheros.
    • AzureBlobFlowStorage: Se realizan tests de integración contra Azurite, levantado dinámicamente con TestContainers.
  • Tests de Concurrencia y Casos Extremos:
    Se simulan escenarios con operaciones concurrentes, datos muy grandes y caracteres especiales para asegurar la robustez de la librería.

Para ejecutar todos los tests:

dotnet test

Contribuciones

Las contribuciones son bienvenidas. Por favor, sigue las pautas de contribución del repositorio y asegúrate de que todos los tests pasen antes de enviar un pull request.

Licencia

MIT License

¡Gracias por usar FlowStorage! Si tienes alguna pregunta o sugerencia, no dudes en abrir un issue o contactarnos.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.5.0 823 11/4/2025
1.4.0 302 9/23/2025
1.2.2 340 9/17/2025
1.2.1 329 9/17/2025
1.1.1 565 4/10/2025
1.1.0 257 3/17/2025
1.0.1 137 3/15/2025
1.0.0 137 3/15/2025