Headsoft.Core 0.21.0

The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package Headsoft.Core --version 0.21.0                
NuGet\Install-Package Headsoft.Core -Version 0.21.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="Headsoft.Core" Version="0.21.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Headsoft.Core --version 0.21.0                
#r "nuget: Headsoft.Core, 0.21.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.
// Install Headsoft.Core as a Cake Addin
#addin nuget:?package=Headsoft.Core&version=0.21.0

// Install Headsoft.Core as a Cake Tool
#tool nuget:?package=Headsoft.Core&version=0.21.0                

Headsoft.Core

Nuget

    <PackageReference Include="Headsoft.Core" Version="0.21.0" />
  • Dependências
    • AutoMapper.Extensions.Microsoft.DependencyInjection Version=12.0.1
    • FluentValidation.DependencyInjectionExtensions Version=11.7.1
    • Microsoft.Extensions.Caching.Abstractions Version=7.0.0
    • Microsoft.Extensions.Configuration.Binder Version=7.0.4
    • Microsoft.Extensions.DependencyInjection.Abstractions Version=7.0.0
    • Microsoft.Extensions.Hosting.Abstractions Version=7.0.0
    • Microsoft.Extensions.Logging.Abstractions Version=7.0.1
    • Microsoft.Extensions.Options.ConfigurationExtensions Version=7.0.0

Attributes

DependencyInjectionIgnoreAttribute

  • Indica que o objeto não será registrado no ServiceProvider pelos métodos de extensão em IServiceCollectionExtensions.

Exceptions

  • ExternalAPIException
    • Representa um erro que ocorre ao tentar chamar uma API externa (Workspace por exemplo).
  • InvalidServiceProviderException
    • Representa um erro que ocorre ao tentar validar um ServiceProvider.
  • NotAllowedOperationException
    • Representa um erro que ocorre ao se tentar realizar uma operação não permitida.

Extensions (Principais)

JsonExtensions

  • .FromJson() <details> <summary>Exemplo de uso</summary>

    
      string json = """"{"id":123,"name":"Giuseppe Kadura"}"""";
    
      Person person = json.FromJson<Person>();
      Person person = json.FromJson<Person>(Person.Default); // caso json==null, retorna default
      Person person = json.FromJson(typeof(Person));
    

    </details>

  • .ToJson() <details> <summary>Exemplo de uso</summary>

      Person person = new()
      {
      	Id = 123,
      	Name = "Giuseppe Kadura"
      };
    
      string json = person.ToJson();
    
      // json = {"id":123,"name":"Giuseppe Kadura"}
    

    </details>

EnumExtensions

  • .ToFriendlyName() <details> <summary>Exemplo de uso</summary>

      public enum SampleEnum : byte
      {
          [Description("Este é o tipo A")]
          TipoA = 1,
    
          [Description("Este é o tipo B")]
          TipoB,
    
          // Sem description
          TipoC = 99
      }
    
      var enumA = SampleEnum.TipoA;
      var enumC = SampleEnum.TipoC;
      var enumNull = default(SampleEnum?);
      var notEnum = (SampleEnum)77;
    
      Console.WriteLine(enumA.ToFriendlyName());            // "Este é o tipo A"
      Console.WriteLine(enumC.ToFriendlyName());            // "TipoC"
      Console.WriteLine(enumNull.ToFriendlyName(""));       // ""
      Console.WriteLine(enumNull.ToFriendlyName());         // null
      Console.WriteLine(enumNull.ToFriendlyName("Nenhum")); // "Nenhum"
      Console.WriteLine(notEnum.ToFriendlyName());          // "77"
    

    </details>

  • .ToEnum() <details> <summary>Exemplo de uso</summary>

      var enumA = "TipoA".ToEnum<SampleEnum>();
      var enumB = "Este é o tipo B".ToEnum<SampleEnum>();
      var notEnum = "TipoD".ToEnum<SampleEnum>();
    
      Console.WriteLine((byte?)enumA);   // 1
      Console.WriteLine((byte?)enumB);   // 2
      Console.WriteLine((byte?)notEnum); // null
    

    </details>

DateTimeExtensions

  • IsBetween <details> <summary>Exemplo de uso</summary> <p> Checa se uma data está entre duas datas (modo inclusivo). </p>

      // Natal de 2023
      var dateToCheck = new DateTime(2023, 12, 25);
    
      var year2023 = new Period(
      	new DateTime(2023, 01, 01),
      	new DateTime(2023, 12, 31));
    
      var decade90 = new Period(
      	new DateTime(1990, 01, 01),
      	new DateTime(1999, 12, 31));
    
      var after2000 = new Period(
      	new DateTime(2000, 01, 01),
      	null);
    
      var before2000 = new Period(
      	null,
      	new DateTime(1999, 12, 31));
    
    
      var isYear2023 = dateToCheck.IsBetween(year2023);
      var isDecade90 = dateToCheck.IsBetween(decade90);
      var isAfter2000 = dateToCheck.IsBetween(after2000);
      var isBefore2000 = dateToCheck.IsBetween(before2000);
    
      Console.WriteLine(isYear2023);    // true
      Console.WriteLine(isDecade90);    // false
      Console.WriteLine(isAfter2000);   // true
      Console.WriteLine(isBefore2000);  // false
    

    Além desse método, existem mais overloads. </details>

IServiceCollectionExtensions

  • AddImplementations <details> <summary>Exemplo de uso</summary> <p> No exemplo abaixo, busca-se as interfaces do assembly de CoreEntry cujo nome termina em "Provider" e que herdam de IService (ex.: IDataProvider : IService), e então busca para cada uma, sua implementação no assembly de DataEntry. Em seguida, adiciona os objetos ao ServiceCollection (interface x implementação). </p>

      services.AddImplementations<IService, CoreEntry, DataEntry>("Provider");
    

    Além desse método, existem mais overloads. </details>

Release Notes

0.21.0

  • Refatoração em JsonExtensions;
    • JSON_DEFAULT_OPTIONS agora também tem como padrão as seguintes propriedades:

        Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase
      
  • Refatoração de IFilter<TEntity> e FilterBase<TKey, TEntity>:
    • Alteração de Prop ExtendedExpressions para Expressions;
    • Remoção de método ToExpression();
    • Adição de método AddExpression(Expression<Func<TEntity, bool>>);
  • Refatoração total de IRepository, IService e ServiceBase;
    • IEntityReadServiceBase e EntityReadServiceBase removidos.
    • IReadService e ReadService removidos.
    • IWriteService removido.
  • Adicionadas props string? Tag e string ResultTypeDescription em ApiResult;
  • Adicionado HttpClientBase para se utilizar como service que faz requisições HTTP.
⚠️ Breaking Changes:
  • IEntityReadServiceBase, IReadService, e IWriteService e suas implementações removidas. Devem ser substituídas pelos respectivos IService<(...)>.
  • Houveram algumas alterações na ordem dos tipos genéricos nos IServices em relação à IEntityReadServiceBase, IReadService, e IWriteService.

<details> <summary>Releases Anteriores</summary>

0.20.0

  • Refatoração em Notification;
    • Adicionada Propriedade object? Tag para que possa conter algum dado referente à Notification;
    • CTOR Notification(Exception, ResultTypes) agora assinala Message com Exception.Message ao invés de Exception.ToString() (que agora está em Tag). Antes, Detail recebia a Exception.InnerException.ToString(), e agora, recebe null.
  • Adicionado RangeFilter;
  • PeriodFilter agora herda de RangeFilter;
⚠️ Breaking Changes:
  • Notification.Detail renomeada para Notification.Details;
  • Em PeriodFilter, as propriedades InitialDate e EndDate foram renomeadas para MinValue e MaxValue respectivamente;

0.19.2

  • Adicionado SetExpressions() em IFilter;
  • Adicionado ToExpression() em KeyList;
  • Adicionado ToExpression() em SearchTerm;

0.19.0

  • Novos CTORs para:
    • Notification;
    • InfoDTO<T>;
    • ListDTO<T>;
    • KeyList<TKey>;
    • PeriodFilter;
    • SearchKey<TKey>;
    • SearchTerm;
    • Pagination;
  • Refatoração de CTORs para OperationResult;
  • Adicionado atributo DependencyInjectionIgnoreAttribute.
  • Adicionado método AddItems(IEnumerable<TKey>, SearchKeyModes) em KeyList<TKey>;
  • Adicionado property ExtendedExpressions em IFilter<TEntity>;
  • Adicionada classe de extensão DateTimeExtensions;
  • Adicionadas classes CustomColumnSelector e NoneColumnSelector;
⚠️ Breaking Changes:
  • SearchTerm refatorado de struct para class;
  • Refatoração completa de Services (interfaces e classes) alterando seus tipos genéricos:
    • IReadService renomeado para IEntityReadService e genéricos alterados:
      • Adicionado TKey;
      • Revovido TInfoDTO (Método GetInfoAsync usa o InfoDTO<TKey>;
    • Novo IReadService ficou mais indenpendente e agora só possui TFilter como genérico;
    • IWriteService teve genéricos alterados:
      • Adicionado TKey;
      • Alterado TUpdateDTO que agora precisa herdar de IKey<TKey>;
    • Devido às alterações acima, IService e IServiceBase tiveram seus genéricos e CTOR modificados para se adequar;

0.18.1

  • Adicionado em IOperationResult.SetDataToNull();
  • Adicionado CTOR OperationResult(string, string);
  • OperationResult.IsValid agora checa apenas notificações igual ou acima de Warning;
  • Correção de métodos em DateTimeHelper;
  • Atualização de pacote FluentValidations (de 11.5.2 para 11.6.0);

0.18.0

  • Adicionada mensagem em CommonMessages.

  • Método EnumExtensions.ToFriendlyName refatorado.

  • Método JsonExtensions.StringDeserialize removido.

  • ISubDomainProvider removido. A interface agora está em Workspace.

  • Adicionados DateTimeHelper e ValidationResultHelper.

  • Adicionada documentação em README

  • Breaking Changes:

    • ISubDomainProvider movido para Workspace.

</details>

Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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. 
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

0.21.0
 + Refatoração em JsonExtensions.JSON_DEFAULT_OPTIONS;
 + Refatoração de IFilter<TEntity>
 + Refatoração total de IRepository, IService e ServiceBase;
 + Adicionadas props Tag ResultTypeDescription em ApiResult;
 + Adicionado service HttpClientBase para requisições HTTP.
 
 
 BREAKING CHANGES:
 + IFilter<TEntity>:
- ExtendedExpressions renomeado para Expressions;
- Remoção de método ToExpression();
 + IEntityReadService, IReadService e IWriteService substituídos por versões de IService;