RuculaX.Database 1.2.7

dotnet add package RuculaX.Database --version 1.2.7
                    
NuGet\Install-Package RuculaX.Database -Version 1.2.7
                    
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="RuculaX.Database" Version="1.2.7" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="RuculaX.Database" Version="1.2.7" />
                    
Directory.Packages.props
<PackageReference Include="RuculaX.Database" />
                    
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 RuculaX.Database --version 1.2.7
                    
#r "nuget: RuculaX.Database, 1.2.7"
                    
#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 RuculaX.Database@1.2.7
                    
#: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=RuculaX.Database&version=1.2.7
                    
Install as a Cake Addin
#tool nuget:?package=RuculaX.Database&version=1.2.7
                    
Install as a Cake Tool

<p align="center"> <img src="../../Ruculax.png" style="width:200px"> <h1 align="center"> Ruculax.Database</h1>
</p>

<p align="center"> <a href="https://circleci.com/gh/angular/workflows/angular/tree/main"> <img src="https://img.shields.io/badge/license-MIT-blue" alt="License" /> </a>  <a href="https://www.nuget.org/packages/RuculaX.Database/"> <img src="https://img.shields.io/nuget/v/RuculaX.Database" alt="Version RuculaX Entity Framewrok" /> </a>  <a href="https://github.com/reginaldo-marinho/rucula-x/graphs/contributors"> <img src="https://img.shields.io/github/contributors/reginaldo-marinho/rucula-x" alt="Discord conversation" /> </a> <a href="https://github.com/reginaldo-marinho/rucula-x/commits/main"> <img src="https://img.shields.io/github/last-commit/reginaldo-marinho/rucula-x" alt="Discord conversation" /> </a>

<a href="https://www.nuget.org/packages/RuculaX.Database/"> <img src="https://img.shields.io/nuget/dt/RuculaX.Database" alt="Discord conversation" /> </a> </p>

Query Paginada

Fornece serviço para criação de queries paginadas. Isso garante que diversas consultas criadas, possam ser utilizadas em inumeras localidades dentro de uma aplicação.

Implementação

Crie sua Classe

Crie uma classe que herde de IQuery e passe no seu construtor o tipo de conexão que a fabrica deverá passar como argumento


public class UserQuery : IQuery
{
    ApplicationContext _context;

    public UserQuery(ApplicationContext context)
    {
        _context = context;
    }
    public async Task<IQueryConfigurationOutput> QueryAsync(IQueryConfigurationInput config)
    {
        var output = new QueryConfigurationOutput(){};
        return output;
    }
}

Esse tipo de implementação força o desenvolvedor a gerenciar a paginação com base na sua lógica. Isso não é tão complicado, visto que em IQueryConfigurationInput fornece a propriedade Page, entretando poderia ficar mais simples, vejamos...

Trabalhando com Factory Method

Além de herdar de IQuery, também podemos herdar de PaginationAsync, isso ajuda a separar corretamente a lógica da paginação.

Ao herdar você será obrigado a implemetar os métodos abstratos. Suas opções referem-se à first, last, previous, next e contain.


public class UserQuery : PaginationAsync, IQuery
{
   ApplicationContext _context;

    public UserQuery(ApplicationContext context)
    {
        _context = context;
    }

    public async Task<IQueryConfigurationOutput> QueryAsync(IQueryConfigurationInput config)
    {
        // Deixe exatamente do modo em que está
        var output = await QueryAsync(config.Page,config); 
        return output;
    }

    protected async override Task<IQueryConfigurationOutput> FirstAsync(IQueryConfigurationInput config)
    {
        ...
    }

    protected async override Task<IQueryConfigurationOutput> LastAsync(IQueryConfigurationInput config)
    {
        ...
    }

    protected override async Task<IQueryConfigurationOutput> NextAsync(IQueryConfigurationInput config)
    {
        ...
    }

    protected async override Task<IQueryConfigurationOutput> PreviousAsync(IQueryConfigurationInput config)
    {
        ...
    }
    protected async override Task<IQueryConfigurationOutput> ContainAsync(IQueryConfigurationInput config)
    {
        ...
    }
}
Adicione suas Queries

Queries é uma classe abstrata que disponibiliza um método set e um get, seu objetivo principal é gerenciar as queries e suas identificações.

Por se tratar de classe abstrata, você deve herda-la.

public class QueriesDatabaseTest : Queries
{
    public QueriesDatabaseTest()
    {
        Set(nameof(User), typeof(UserQuery));
        Set("Cliente", typeof(ClienteQuery));
        Set("eq2-3qq", typeof(ProdutosQuery));
    }
}

Notem que aqui estamos amarrando "User" (nameof) com a query UserQuery(typeof)

As Configurações Input e Output

Ao desejar criar uma query, informamos antes algumas configurações de entrada IQueryConfigurationInput, configurações que ajudarão a identificar o tipo desejado.

Apos a criação da query, retornamos o set de dados, juntamente com as configurações de saida IQueryConfigurationOutput

Options

Options é uma propriedade que guarda opções especificas para a query desejada, ela está presente tanto em input IQueryConfigurationInput quanto em output IQueryConfigurationOutput, seu tipo string é útil porque passamos por aqui as configurações especificas de cada query com um tipo que pode ser convertido internamente.

public class UserQueryOptions
{
    public int LastId { get; set } = 0;
}

Acima vemos um objeto de valor UserQueryOptions que guarda o ultimo Id de um Usuário

Essa propriedade é quem da a flexibilidade necessária nas queries criadas, isso ocorre porque cada query tem suas particularidades, logo, isso deve ser o mais flexivel possível.

Vejamos um exemplo

var userPageOne = new QueryConfigurationInput()
{
    Name = nameof(User),
    Options = "{\"LastId\": 0}"
};

Notem que a representação string equivale ao objeto do tipo UserQueryOptions

Adicione o Serviço
builder.Services.AddSingleton<IQueries,RuculaUpQueries>();
builder.Services.AddScoped<FactoryQuery<ApplicationContext>>();

Consumindo a Querie
[ApiController]
[Route("[controller]")]
public class QueryController : ControllerBase
{
    private readonly FactoryQuery<ApplicationContext> _query;
    public QueryController(FactoryQuery<ApplicationContext> query)
    {
        _query = query;
    }

    [HttpPost]
    public Task<IQueryConfigurationOutput> Post(QueryConfigurationInput configuration)
    {
        return _query.QueryAsync(configuration);
    }
}

WhereIf

Use esse método de extensão para logica condicional dentro das Queries.

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.
  • net8.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on RuculaX.Database:

Package Downloads
RuculaX.EntityFramework

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.7 178 12/13/2025
1.2.6 363 6/10/2025
1.2.5 266 10/11/2024
1.2.4 224 9/21/2024
1.2.2 236 9/17/2024
1.2.1 197 9/17/2024
1.2.0 194 7/20/2024
1.1.3 189 7/18/2024
1.1.2 181 7/15/2024
1.1.1 184 7/12/2024
1.0.1 203 6/28/2024
1.0.0 198 6/25/2024