From 9026050953f70cd9c89dd81da760021926ebed6d Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Tue, 25 Nov 2025 21:10:25 +0100 Subject: [PATCH 1/9] feat: add letter salutation extension to person --- src/Persons/Extensions/PersonExtensions.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Persons/Extensions/PersonExtensions.cs b/src/Persons/Extensions/PersonExtensions.cs index fea1df3..a0bd446 100644 --- a/src/Persons/Extensions/PersonExtensions.cs +++ b/src/Persons/Extensions/PersonExtensions.cs @@ -8,4 +8,13 @@ public static string FullName(this IPerson person) { return $"{person.AcademicTitle?.Value} {person.FirstName} {person.LastName}".Trim(); } + + public static string LetterSalutation(this IPerson person) + { + var salutation = person.Salutation?.LetterSalutation; + var title = person.AcademicTitle?.Value; + var lastName = person.LastName; + + return !string.IsNullOrWhiteSpace(title) ? $"{salutation} {title} {lastName}".Trim() : $"{salutation} {lastName}".Trim(); + } } \ No newline at end of file From 3b11e20b096d7584cc43f0bff1f2b27cc34bc3fb Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Thu, 27 Nov 2025 11:14:47 +0100 Subject: [PATCH 2/9] feat: add precision to article price --- src/Articles/Configurations/ArticleConfiguration.cs | 6 ++++++ src/Articles/Models/Article.cs | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Articles/Configurations/ArticleConfiguration.cs b/src/Articles/Configurations/ArticleConfiguration.cs index a293d21..65aedb8 100644 --- a/src/Articles/Configurations/ArticleConfiguration.cs +++ b/src/Articles/Configurations/ArticleConfiguration.cs @@ -16,5 +16,11 @@ public void Configure(EntityTypeBuilder
builder) builder.Property(a => a.Type) .HasConversion(); + + builder.Property(e => e.Price) + .HasPrecision(18, 2); + + builder.Property(e => e.TaxRate) + .HasPrecision(5, 2); } } \ No newline at end of file diff --git a/src/Articles/Models/Article.cs b/src/Articles/Models/Article.cs index fef1e5f..2255ba6 100644 --- a/src/Articles/Models/Article.cs +++ b/src/Articles/Models/Article.cs @@ -13,8 +13,6 @@ public class Article : EntityBase public string Title { get; set; } = string.Empty; public string? Description { get; set; } public decimal Price { get; set; } - [Range(0, 100)] - [Precision(5, 2)] public decimal TaxRate { get; set; } public Guid QuantityUnitId { get; set; } public QuantityUnit QuantityUnit { get; set; } = null!; From 9a0f7552e281cbe6caceba2cf10dcb9363a918c1 Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Thu, 27 Nov 2025 19:33:39 +0100 Subject: [PATCH 3/9] refactor: async to method name of GetByArticleNo --- src/Articles/Services/ArticleService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Articles/Services/ArticleService.cs b/src/Articles/Services/ArticleService.cs index a5cb0ab..44fbdb9 100644 --- a/src/Articles/Services/ArticleService.cs +++ b/src/Articles/Services/ArticleService.cs @@ -39,7 +39,7 @@ public override async Task
CreateAsync(Article article, CancellationTok return await base.CreateAsync(article, cancellationToken); } - public async Task
GetByArticleNo(string articleNo, CancellationToken cancellationToken = default) + public async Task
GetByArticleNoAsync(string articleNo, CancellationToken cancellationToken = default) { var article = await DbSet.AsNoTracking().SingleOrDefaultAsync(l => l.ArticleNo == articleNo, cancellationToken); if (article == null) From 31654224599e5776414cd89b7dedcce6921017c4 Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Tue, 9 Dec 2025 17:16:29 +0100 Subject: [PATCH 4/9] refactor: academic titles to new lookups --- src/AcademicTitles/AcademicTitles.cs | 14 ++++++++++++++ src/AcademicTitles/Models/AcademicTitle.cs | 4 ++-- .../Models/AcademicTitleTranslation.cs | 4 ++-- .../Services/AcademicTitleService.cs | 17 ----------------- 4 files changed, 18 insertions(+), 21 deletions(-) create mode 100644 src/AcademicTitles/AcademicTitles.cs delete mode 100644 src/AcademicTitles/Services/AcademicTitleService.cs diff --git a/src/AcademicTitles/AcademicTitles.cs b/src/AcademicTitles/AcademicTitles.cs new file mode 100644 index 0000000..0a0ef37 --- /dev/null +++ b/src/AcademicTitles/AcademicTitles.cs @@ -0,0 +1,14 @@ +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Module.Abstractions; +using Avolutions.Baf.Domain.AcademicTitles.Models; +using Microsoft.Extensions.DependencyInjection; + +namespace Avolutions.Baf.Domain.AcademicTitles; + +public class AcademicTitles : IFeatureModule +{ + public void Register(IServiceCollection services) + { + services.AddLookup(); + } +} \ No newline at end of file diff --git a/src/AcademicTitles/Models/AcademicTitle.cs b/src/AcademicTitles/Models/AcademicTitle.cs index aed3489..b3d34e6 100644 --- a/src/AcademicTitles/Models/AcademicTitle.cs +++ b/src/AcademicTitles/Models/AcademicTitle.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.AcademicTitles.Models; -public class AcademicTitle : TranslatableEntity +public class AcademicTitle : Lookup { public AcademicTitle() : base() { } public AcademicTitle(bool createMissingTranslations) : base(createMissingTranslations) { } diff --git a/src/AcademicTitles/Models/AcademicTitleTranslation.cs b/src/AcademicTitles/Models/AcademicTitleTranslation.cs index 2a340f4..366e29a 100644 --- a/src/AcademicTitles/Models/AcademicTitleTranslation.cs +++ b/src/AcademicTitles/Models/AcademicTitleTranslation.cs @@ -1,7 +1,7 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.AcademicTitles.Models; -public class AcademicTitleTranslation : TranslationEntity +public class AcademicTitleTranslation : LookupTranslation { } \ No newline at end of file diff --git a/src/AcademicTitles/Services/AcademicTitleService.cs b/src/AcademicTitles/Services/AcademicTitleService.cs deleted file mode 100644 index 126db66..0000000 --- a/src/AcademicTitles/Services/AcademicTitleService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.AcademicTitles.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.AcademicTitles.Services; - -public class AcademicTitleService : TranslatableEntityService -{ - public AcademicTitleService(DbContext context) : base(context) - { - } - - public AcademicTitleService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file From 7d716ee96c98ea0a862a8ea2e984529908fc224c Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Tue, 9 Dec 2025 17:16:56 +0100 Subject: [PATCH 5/9] refactor: quantity units to new lookups --- src/Articles/Models/Article.cs | 4 +--- src/Articles/Services/ArticleService.cs | 15 ++------------- src/QuantityUnits/Models/QuantityUnit.cs | 6 +++--- .../Models/QuantityUnitTranslation.cs | 4 ++-- src/QuantityUnits/QuantityUnitsModule.cs | 7 ++----- .../Services/QuantityUnitService.cs | 17 ----------------- 6 files changed, 10 insertions(+), 43 deletions(-) delete mode 100644 src/QuantityUnits/Services/QuantityUnitService.cs diff --git a/src/Articles/Models/Article.cs b/src/Articles/Models/Article.cs index 2255ba6..bac10b6 100644 --- a/src/Articles/Models/Article.cs +++ b/src/Articles/Models/Article.cs @@ -1,8 +1,6 @@ -using System.ComponentModel.DataAnnotations; -using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations.Schema; using Avolutions.Baf.Core.Entity.Models; using Avolutions.Baf.Domain.QuantityUnits.Models; -using Microsoft.EntityFrameworkCore; namespace Avolutions.Baf.Domain.Articles.Models; diff --git a/src/Articles/Services/ArticleService.cs b/src/Articles/Services/ArticleService.cs index 44fbdb9..468ffc4 100644 --- a/src/Articles/Services/ArticleService.cs +++ b/src/Articles/Services/ArticleService.cs @@ -1,8 +1,6 @@ -using Avolutions.Baf.Core.Entity.Abstractions; -using Avolutions.Baf.Core.Entity.Services; +using Avolutions.Baf.Core.Entity.Services; using Avolutions.Baf.Core.NumberSequences.Services; using Avolutions.Baf.Domain.Articles.Models; -using Avolutions.Baf.Domain.QuantityUnits.Models; using FluentValidation; using Microsoft.EntityFrameworkCore; @@ -11,16 +9,13 @@ namespace Avolutions.Baf.Domain.Articles.Services; public class ArticleService : EntityService
{ private readonly INumberSequenceService _numberSequence; - private readonly ITranslatableEntityService _quantityUnitService; public ArticleService( DbContext context, IValidator
? validator, - INumberSequenceService numberSequence, - ITranslatableEntityService quantityUnitService) : base(context, validator) + INumberSequenceService numberSequence) : base(context, validator) { _numberSequence = numberSequence; - _quantityUnitService = quantityUnitService; } public override async Task
CreateAsync(Article article, CancellationToken cancellationToken = default) @@ -30,12 +25,6 @@ public override async Task
CreateAsync(Article article, CancellationTok article.ArticleNo = await _numberSequence.GetNextAsync(); } - if (article.QuantityUnitId == Guid.Empty) - { - var defaultQuantityUnit = await _quantityUnitService.GetDefaultAsync(cancellationToken); - article.QuantityUnitId = defaultQuantityUnit.Id; - } - return await base.CreateAsync(article, cancellationToken); } diff --git a/src/QuantityUnits/Models/QuantityUnit.cs b/src/QuantityUnits/Models/QuantityUnit.cs index c82449f..3f5f96d 100644 --- a/src/QuantityUnits/Models/QuantityUnit.cs +++ b/src/QuantityUnits/Models/QuantityUnit.cs @@ -1,10 +1,10 @@ using System.ComponentModel.DataAnnotations.Schema; -using Avolutions.Baf.Core.Entity.Extensions; -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.QuantityUnits.Models; -public class QuantityUnit : TranslatableEntity +public class QuantityUnit : Lookup { public QuantityUnit() : base() { } diff --git a/src/QuantityUnits/Models/QuantityUnitTranslation.cs b/src/QuantityUnits/Models/QuantityUnitTranslation.cs index c537f55..63fbd61 100644 --- a/src/QuantityUnits/Models/QuantityUnitTranslation.cs +++ b/src/QuantityUnits/Models/QuantityUnitTranslation.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.QuantityUnits.Models; -public class QuantityUnitTranslation : TranslationEntity +public class QuantityUnitTranslation : LookupTranslation { public string Abbreviation { get; set; } = string.Empty; } \ No newline at end of file diff --git a/src/QuantityUnits/QuantityUnitsModule.cs b/src/QuantityUnits/QuantityUnitsModule.cs index c72c0fc..748d296 100644 --- a/src/QuantityUnits/QuantityUnitsModule.cs +++ b/src/QuantityUnits/QuantityUnitsModule.cs @@ -1,7 +1,6 @@ -using Avolutions.Baf.Core.Entity.Abstractions; +using Avolutions.Baf.Core.Lookups.Extensions; using Avolutions.Baf.Core.Module.Abstractions; using Avolutions.Baf.Domain.QuantityUnits.Models; -using Avolutions.Baf.Domain.QuantityUnits.Services; using Microsoft.Extensions.DependencyInjection; namespace Avolutions.Baf.Domain.QuantityUnits; @@ -10,8 +9,6 @@ public class QuantityUnitsModule : IFeatureModule { public void Register(IServiceCollection services) { - services.AddScoped(); - services.AddScoped, QuantityUnitService>(); - services.AddScoped, QuantityUnitService>(); + services.AddLookup(); } } \ No newline at end of file diff --git a/src/QuantityUnits/Services/QuantityUnitService.cs b/src/QuantityUnits/Services/QuantityUnitService.cs deleted file mode 100644 index 7ac2c68..0000000 --- a/src/QuantityUnits/Services/QuantityUnitService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.QuantityUnits.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.QuantityUnits.Services; - -public class QuantityUnitService : TranslatableEntityService -{ - public QuantityUnitService(DbContext context) : base(context) - { - } - - public QuantityUnitService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file From 4153269c82fc77fb354d71ea8012214af79eb8e6 Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Tue, 9 Dec 2025 17:17:20 +0100 Subject: [PATCH 6/9] refactor: countries to new lookups --- src/Countries/CountriesModule.cs | 7 ++----- src/Countries/Models/Country.cs | 4 ++-- src/Countries/Models/CountryTranslation.cs | 4 ++-- src/Countries/Services/CountryService.cs | 17 ----------------- 4 files changed, 6 insertions(+), 26 deletions(-) delete mode 100644 src/Countries/Services/CountryService.cs diff --git a/src/Countries/CountriesModule.cs b/src/Countries/CountriesModule.cs index 7e584fa..74567af 100644 --- a/src/Countries/CountriesModule.cs +++ b/src/Countries/CountriesModule.cs @@ -1,7 +1,6 @@ -using Avolutions.Baf.Core.Entity.Abstractions; +using Avolutions.Baf.Core.Lookups.Extensions; using Avolutions.Baf.Core.Module.Abstractions; using Avolutions.Baf.Domain.Countries.Models; -using Avolutions.Baf.Domain.Countries.Services; using Microsoft.Extensions.DependencyInjection; namespace Avolutions.Baf.Domain.Countries; @@ -10,8 +9,6 @@ public class CountriesModule : IFeatureModule { public void Register(IServiceCollection services) { - services.AddScoped(); - services.AddScoped, CountryService>(); - services.AddScoped, CountryService>(); + services.AddLookup(); } } \ No newline at end of file diff --git a/src/Countries/Models/Country.cs b/src/Countries/Models/Country.cs index 5b849f4..fc51800 100644 --- a/src/Countries/Models/Country.cs +++ b/src/Countries/Models/Country.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Countries.Models; -public class Country : TranslatableEntity +public class Country : Lookup { public Country() : base() { } public Country(bool createMissingTranslations) : base(createMissingTranslations) { } diff --git a/src/Countries/Models/CountryTranslation.cs b/src/Countries/Models/CountryTranslation.cs index c406495..f9a5086 100644 --- a/src/Countries/Models/CountryTranslation.cs +++ b/src/Countries/Models/CountryTranslation.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Countries.Models; -public class CountryTranslation : TranslationEntity +public class CountryTranslation : LookupTranslation { } \ No newline at end of file diff --git a/src/Countries/Services/CountryService.cs b/src/Countries/Services/CountryService.cs deleted file mode 100644 index 72b3a3b..0000000 --- a/src/Countries/Services/CountryService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.Countries.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.Countries.Services; - -public class CountryService : TranslatableEntityService -{ - public CountryService(DbContext context) : base(context) - { - } - - public CountryService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file From 34a2dfc8e10e28b3f274c5d7802ff752502a7284 Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Tue, 9 Dec 2025 17:17:36 +0100 Subject: [PATCH 7/9] refactor: salutations to new lookups --- src/Salutations/Models/Salutation.cs | 6 +++--- src/Salutations/Models/SalutationTranslation.cs | 4 ++-- src/Salutations/SalutationModule.cs | 14 ++++++++++++++ src/Salutations/Services/SalutationService.cs | 17 ----------------- 4 files changed, 19 insertions(+), 22 deletions(-) create mode 100644 src/Salutations/SalutationModule.cs delete mode 100644 src/Salutations/Services/SalutationService.cs diff --git a/src/Salutations/Models/Salutation.cs b/src/Salutations/Models/Salutation.cs index 130ed61..e1fff18 100644 --- a/src/Salutations/Models/Salutation.cs +++ b/src/Salutations/Models/Salutation.cs @@ -1,10 +1,10 @@ using System.ComponentModel.DataAnnotations.Schema; -using Avolutions.Baf.Core.Entity.Extensions; -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Salutations.Models; -public class Salutation : TranslatableEntity +public class Salutation : Lookup { public Salutation() : base() { } public Salutation(bool createMissingTranslations) : base(createMissingTranslations) { } diff --git a/src/Salutations/Models/SalutationTranslation.cs b/src/Salutations/Models/SalutationTranslation.cs index 168a89f..06875a6 100644 --- a/src/Salutations/Models/SalutationTranslation.cs +++ b/src/Salutations/Models/SalutationTranslation.cs @@ -1,8 +1,8 @@ -using Avolutions.Baf.Core.Entity.Models; +using Avolutions.Baf.Core.Lookups.Models; namespace Avolutions.Baf.Domain.Salutations.Models; -public class SalutationTranslation : TranslationEntity +public class SalutationTranslation : LookupTranslation { public string LetterSalutation { get; set; } = string.Empty; } \ No newline at end of file diff --git a/src/Salutations/SalutationModule.cs b/src/Salutations/SalutationModule.cs new file mode 100644 index 0000000..87cd260 --- /dev/null +++ b/src/Salutations/SalutationModule.cs @@ -0,0 +1,14 @@ +using Avolutions.Baf.Core.Lookups.Extensions; +using Avolutions.Baf.Core.Module.Abstractions; +using Avolutions.Baf.Domain.Salutations.Models; +using Microsoft.Extensions.DependencyInjection; + +namespace Avolutions.Baf.Domain.Salutations; + +public class SalutationModule : IFeatureModule +{ + public void Register(IServiceCollection services) + { + services.AddLookup(); + } +} \ No newline at end of file diff --git a/src/Salutations/Services/SalutationService.cs b/src/Salutations/Services/SalutationService.cs deleted file mode 100644 index 7206838..0000000 --- a/src/Salutations/Services/SalutationService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Avolutions.Baf.Core.Entity.Services; -using Avolutions.Baf.Domain.Salutations.Models; -using FluentValidation; -using Microsoft.EntityFrameworkCore; - -namespace Avolutions.Baf.Domain.Salutations.Services; - -public class SalutationService : TranslatableEntityService -{ - public SalutationService(DbContext context) : base(context) - { - } - - public SalutationService(DbContext context, IValidator? validator) : base(context, validator) - { - } -} \ No newline at end of file From 26d7658c01626cbc1d4e705891d0f9c2e52fe715 Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Wed, 10 Dec 2025 13:30:04 +0100 Subject: [PATCH 8/9] feat: make article navigable --- src/Articles/Models/Article.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Articles/Models/Article.cs b/src/Articles/Models/Article.cs index bac10b6..3ce1375 100644 --- a/src/Articles/Models/Article.cs +++ b/src/Articles/Models/Article.cs @@ -1,12 +1,15 @@ using System.ComponentModel.DataAnnotations.Schema; +using Avolutions.Baf.Core.Entity.Abstractions; +using Avolutions.Baf.Core.Entity.Attributes; using Avolutions.Baf.Core.Entity.Models; using Avolutions.Baf.Domain.QuantityUnits.Models; namespace Avolutions.Baf.Domain.Articles.Models; -public class Article : EntityBase +public class Article : EntityBase, INavigable { public ArticleType Type { get; set; } = ArticleType.Product; + [EntityNavigationKey] public string ArticleNo { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? Description { get; set; } From ee9088800913caf0ddaaf449938056f777c539f1 Mon Sep 17 00:00:00 2001 From: AlxndrVgt Date: Wed, 10 Dec 2025 13:33:39 +0100 Subject: [PATCH 9/9] chore: set version to 0.17.0 --- src/Avolutions.Baf.Domain.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avolutions.Baf.Domain.csproj b/src/Avolutions.Baf.Domain.csproj index fdef718..be13797 100644 --- a/src/Avolutions.Baf.Domain.csproj +++ b/src/Avolutions.Baf.Domain.csproj @@ -6,7 +6,7 @@ enable Avolutions.Baf.Domain - 0.16.0 + 0.17.0 Avolutions BAF Domain Avolutions @@ -29,7 +29,7 @@ - +