Compare commits

..

No commits in common. "a0696c5e22723635ef928ef55b16ef9b3fb1bba9" and "cc2177e6d1fed16170617a84e398f7b6b903e784" have entirely different histories.

37 changed files with 61 additions and 124 deletions

View File

@ -1,37 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net7.0;net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="7.0.16" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
<PackageReference Include="System.DirectoryServices.AccountManagement" Version="7.0.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.5.1" />
<PackageReference Include="System.Security.Cryptography.Cng" Version="5.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageReference Include="AutoMapper" Version="14.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageReference Include="AutoMapper" Version="14.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.5" />
</ItemGroup>
</Project>

View File

@ -1,6 +1,6 @@
using AutoMapper;
using DigitalData.Core.Application.Abstraction;
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Application.Interfaces;
using DigitalData.Core.Application.Interfaces.Repository;
namespace DigitalData.Core.Application
{

View File

@ -1,8 +1,8 @@
using AutoMapper;
using Microsoft.Extensions.Logging;
using DigitalData.Core.Application.Abstraction.DTO;
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Application.Abstraction;
using DigitalData.Core.Application.Interfaces.Repository;
using DigitalData.Core.Application.Interfaces;
using DigitalData.Core.Application.DTO;
namespace DigitalData.Core.Application
{
@ -33,12 +33,11 @@ namespace DigitalData.Core.Application
/// </summary>
/// <param name="createDto">The DTO to create an entity from.</param>
/// <returns>A service result indicating success or failure, including the entity DTO.</returns>
public virtual async Task<DataResult<TReadDto>> CreateAsync(TCreateDto createDto)
public virtual async Task<DataResult<TId>> CreateAsync(TCreateDto createDto)
{
var entity = _mapper.Map<TEntity>(createDto);
var createdEntity = await _repository.CreateAsync(entity);
var dto = _mapper.Map<TReadDto>(createdEntity);
return createdEntity is null ? Result.Fail<TReadDto>() : Result.Success(dto);
return createdEntity is null ? Result.Fail<TId>() : Result.Success(createdEntity.GetIdOrDefault<TId>());
}
/// <summary>
@ -48,7 +47,7 @@ namespace DigitalData.Core.Application
/// <returns>A service message indicating success or failure.</returns>
public virtual async Task<Result> UpdateAsync<TUpdateDto>(TUpdateDto updateDto)
{
var currentEntitiy = await _repository.ReadByIdAsync(updateDto.GetId<TId>());
var currentEntitiy = await _repository.ReadByIdAsync(updateDto.GetIdOrDefault<TId>());
if (currentEntitiy is null)
return Result.Fail().Notice(LogLevel.Warning, Flag.NotFound, $"{updateDto.GetIdOrDefault<TId>()} is not found in update process of {GetType()} entity.");

View File

@ -1,4 +1,4 @@
using DigitalData.Core.Application.Abstraction;
using DigitalData.Core.Application.Interfaces;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

View File

@ -1,4 +1,4 @@
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Represents a base Data Transfer Object (DTO) with an identifier.

View File

@ -1,4 +1,4 @@
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Represents settings related to user cookie consent dialogs. Designed to be serialized into JSON format for use with JavaScript frontend libraries,

View File

@ -2,7 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using System.Configuration;
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Provides extension methods for dependency injection.

View File

@ -1,7 +1,7 @@
using Microsoft.Extensions.Logging;
using System.Text;
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Provides extension methods for data transfer objects (DTOs).

View File

@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Represents a result of an operation that includes data, inheriting from <see cref="Result"/>.

View File

@ -1,4 +1,4 @@
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Defines flags that indicate specific types of status or conditions in a service operation.

View File

@ -1,6 +1,6 @@
using Microsoft.Extensions.Logging;
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Represents a notice for logging purposes, containing a flag, log level, and associated messages.

View File

@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
namespace DigitalData.Core.Application.Abstraction.DTO
namespace DigitalData.Core.Application.DTO
{
/// <summary>
/// Represents the result of an operation, containing information about its success or failure,

View File

@ -14,9 +14,9 @@
<PackageIcon>core_icon.png</PackageIcon>
<RepositoryUrl>http://git.dd:3000/AppStd/WebCoreModules.git</RepositoryUrl>
<PackageTags>digital data core application clean architecture</PackageTags>
<Version>3.3.1</Version>
<AssemblyVersion>3.3.1</AssemblyVersion>
<FileVersion>3.3.1</FileVersion>
<Version>3.3.0</Version>
<AssemblyVersion>3.3.0</AssemblyVersion>
<FileVersion>3.3.0</FileVersion>
</PropertyGroup>
<ItemGroup>
@ -54,8 +54,4 @@
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.5" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DigitalData.Core.Application.Abstraction\DigitalData.Core.Application.Abstraction.csproj" />
</ItemGroup>
</Project>

View File

@ -3,8 +3,8 @@ using System.DirectoryServices;
using Microsoft.Extensions.Caching.Memory;
using System.DirectoryServices.AccountManagement;
using Microsoft.Extensions.Options;
using DigitalData.Core.Application.Abstraction.DTO;
using DigitalData.Core.Application.Abstraction;
using DigitalData.Core.Application.Interfaces;
using DigitalData.Core.Application.DTO;
namespace DigitalData.Core.Application
{

View File

@ -1,4 +1,4 @@
namespace DigitalData.Core.Application.Abstraction;
namespace DigitalData.Core.Application;
/// <summary>
/// Provides extension methods for retrieving the value of an 'Id' property from objects.
@ -28,7 +28,7 @@ public static class EntityExtensions
/// <exception cref="InvalidOperationException">
/// Thrown if the object does not have a readable 'Id' property of type <typeparamref name="TId"/>.
/// </exception>
public static TId GetId<TId>(this object? obj)
public static TId? GetId<TId>(this object? obj)
=> obj.GetIdOrDefault<TId>()
?? throw new InvalidOperationException($"The object of type '{obj?.GetType().FullName ?? "null"}' does not have a readable 'Id' property of type '{typeof(TId).FullName}'.");

View File

@ -1,4 +1,4 @@
namespace DigitalData.Core.Application.Abstraction
namespace DigitalData.Core.Application.Interfaces
{
/// <summary>
/// Implements a simplified CRUD service interface that uses a single Data Transfer Object (DTO) type for all CRUD operations,

View File

@ -1,6 +1,6 @@
using DigitalData.Core.Application.Abstraction.DTO;
using DigitalData.Core.Application.DTO;
namespace DigitalData.Core.Application.Abstraction
namespace DigitalData.Core.Application.Interfaces
{
[Obsolete("Use MediatR")]
public interface ICRUDService<TCreateDto, TReadDto, TEntity, TId> : IReadService<TReadDto, TEntity, TId>
@ -12,7 +12,8 @@ namespace DigitalData.Core.Application.Abstraction
/// </summary>
/// <param name="createDto">The data transfer object containing the information for the new entity.</param>
/// <returns>A task representing the asynchronous operation, with a <see cref="DataResult{TId}"/> containing the identifier of the created entity or an error message.</returns>
Task<DataResult<TReadDto>> CreateAsync(TCreateDto createDto);
Task<DataResult<TId>> CreateAsync(TCreateDto createDto);
/// <summary>
/// Updates an existing entity based on the provided updateDTO and returns the result wrapped in an IServiceMessage,

View File

@ -1,7 +1,7 @@
using DigitalData.Core.Application.Abstraction.DTO;
using DigitalData.Core.Application.DTO;
using System.DirectoryServices;
namespace DigitalData.Core.Application.Abstraction
namespace DigitalData.Core.Application.Interfaces
{
public interface IDirectorySearchService
{

View File

@ -2,7 +2,7 @@
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography;
namespace DigitalData.Core.Application.Abstraction
namespace DigitalData.Core.Application.Interfaces
{
/// <summary>
/// Defines the operations for JWT service handling claims of type <typeparamref name="TClaimValue"/>.

View File

@ -1,6 +1,6 @@
using DigitalData.Core.Application.Abstraction.DTO;
using DigitalData.Core.Application.DTO;
namespace DigitalData.Core.Application.Abstraction
namespace DigitalData.Core.Application.Interfaces
{
[Obsolete("Use MediatR")]
public interface IReadService<TReadDto, TEntity, TId>

View File

@ -1,6 +1,6 @@
using System.Linq.Expressions;
namespace DigitalData.Core.Application.Abstraction.Repository;
namespace DigitalData.Core.Application.Interfaces.Repository;
public static class Extensions
{

View File

@ -1,4 +1,4 @@
namespace DigitalData.Core.Application.Abstraction.Repository
namespace DigitalData.Core.Application.Interfaces.Repository
{
/// <summary>
/// Defines the contract for CRUD operations on a repository for entities of type TEntity.

View File

@ -1,4 +1,4 @@
namespace DigitalData.Core.Application.Abstraction.Repository
namespace DigitalData.Core.Application.Interfaces.Repository
{
/// <summary>
/// Defines methods for mapping between entities and Data Transfer Objects (DTOs).

View File

@ -1,6 +1,6 @@
using System.Linq.Expressions;
namespace DigitalData.Core.Application.Abstraction.Repository;
namespace DigitalData.Core.Application.Interfaces.Repository;
/// <summary>
/// Provides methods for executing common queries on a given entity type.

View File

@ -1,6 +1,6 @@
using System.Linq.Expressions;
namespace DigitalData.Core.Application.Abstraction.Repository;
namespace DigitalData.Core.Application.Interfaces.Repository;
public interface IRepository<TEntity>
{

View File

@ -1,6 +1,6 @@
using System.Linq.Expressions;
namespace DigitalData.Core.Application.Abstraction.Repository;
namespace DigitalData.Core.Application.Interfaces.Repository;
public static class RepositoryExtensions
{

View File

@ -1,4 +1,4 @@
using DigitalData.Core.Application.Abstraction;
using DigitalData.Core.Application.Interfaces;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography;

View File

@ -1,7 +1,7 @@
using AutoMapper;
using DigitalData.Core.Application.Abstraction;
using DigitalData.Core.Application.Abstraction.DTO;
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Application.DTO;
using DigitalData.Core.Application.Interfaces;
using DigitalData.Core.Application.Interfaces.Repository;
namespace DigitalData.Core.Application;

View File

@ -6,6 +6,7 @@
<Nullable>enable</Nullable>
<Description>This package provides HTTP client extension methods for the DigitalData.Core library, offering simplified and asynchronous methods for fetching and handling HTTP responses. It includes utility methods for sending GET requests, reading response content as text or JSON, and deserializing JSON into dynamic or strongly-typed objects using Newtonsoft.Json. These extensions facilitate efficient and easy-to-read HTTP interactions in client applications.</Description>
<PackageId>DigitalData.Core.Client</PackageId>
<Version>2.0.3</Version>
<Authors>Digital Data GmbH</Authors>
<Company>Digital Data GmbH</Company>
<Product>Digital Data GmbH</Product>
@ -14,9 +15,8 @@
<PackageIcon>core_icon.png</PackageIcon>
<RepositoryUrl>http://git.dd:3000/AppStd/WebCoreModules.git</RepositoryUrl>
<PackageTags>digital data core http client json serilization</PackageTags>
<Version>2.1.0</Version>
<AssemblyVersion>2.1.0</AssemblyVersion>
<FileVersion>2.1.0</FileVersion>
<AssemblyVersion>2.0.3</AssemblyVersion>
<FileVersion>2.0.3</FileVersion>
</PropertyGroup>
<ItemGroup>
@ -26,27 +26,13 @@
</None>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Options" Version="9.0.5" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.5" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DigitalData.Core.Abstractions\DigitalData.Core.Abstractions.csproj" />
</ItemGroup>

View File

@ -1,5 +1,6 @@
using DigitalData.Core.Application.Abstraction;
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Abstractions;
using DigitalData.Core.Application;
using DigitalData.Core.Application.Interfaces.Repository;
using Microsoft.EntityFrameworkCore;
namespace DigitalData.Core.Infrastructure

View File

@ -1,4 +1,4 @@
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Application.Interfaces.Repository;
using Microsoft.EntityFrameworkCore;
using System.Linq.Expressions;

View File

@ -1,4 +1,4 @@
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Application.Interfaces.Repository;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;

View File

@ -36,11 +36,12 @@
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DigitalData.Core.Application.Abstraction\DigitalData.Core.Application.Abstraction.csproj" />
<ProjectReference Include="..\DigitalData.Core.Abstractions\DigitalData.Core.Abstractions.csproj" />
<ProjectReference Include="..\DigitalData.Core.Application\DigitalData.Core.Application.csproj" />
</ItemGroup>
<ItemGroup>

View File

@ -1,4 +1,4 @@
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Application.Interfaces.Repository;
using Microsoft.Extensions.DependencyInjection;
namespace DigitalData.Core.Infrastructure;

View File

@ -1,4 +1,4 @@
using DigitalData.Core.Application.Abstraction.Repository;
using DigitalData.Core.Application.Interfaces.Repository;
using Microsoft.EntityFrameworkCore;
using System.Linq.Expressions;

View File

@ -42,7 +42,7 @@
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="9.0.4" />
</ItemGroup>

View File

@ -51,10 +51,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "assets", "assets", "{0A27EA
Assets\core_legacy_icon.png = Assets\core_legacy_icon.png
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitalData.Core.Application.Abstraction", "DigitalData.Core.Application.Abstraction\DigitalData.Core.Application.Abstraction.csproj", "{420C35A7-0EDE-4E2E-8500-484B57B0367A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Application", "Application", "{E18417C2-D9F5-437A-9ED5-473DD6260066}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -124,17 +120,13 @@ Global
{2336AE61-A21D-437E-A11B-367D008A64B2}.Debug|Any CPU.Build.0 = Release|Any CPU
{2336AE61-A21D-437E-A11B-367D008A64B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2336AE61-A21D-437E-A11B-367D008A64B2}.Release|Any CPU.Build.0 = Release|Any CPU
{420C35A7-0EDE-4E2E-8500-484B57B0367A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{420C35A7-0EDE-4E2E-8500-484B57B0367A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{420C35A7-0EDE-4E2E-8500-484B57B0367A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{420C35A7-0EDE-4E2E-8500-484B57B0367A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A765EBEA-3D1E-4F36-869B-6D72F87FF3F6} = {41795B74-A757-4E93-B907-83BFF04EEE5C}
{DB404CD9-CBB8-4771-AB1B-FD4FDE2C28CC} = {E18417C2-D9F5-437A-9ED5-473DD6260066}
{DB404CD9-CBB8-4771-AB1B-FD4FDE2C28CC} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{C57B2480-F632-4691-9C4C-8CC01237203C} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{B54DEF90-C30C-44EA-9875-76F1B330CBB7} = {EDF84A84-1E01-484E-B073-383F7139C891}
{0B051A5F-BD38-47D1-BAFF-D44BA30D3FB7} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
@ -152,8 +144,6 @@ Global
{BAEF6CC9-4FE2-4E3F-9D32-911C9E8CCFB4} = {8C3AF25D-81D9-4651-90CA-BF0BD2A03EA7}
{2336AE61-A21D-437E-A11B-367D008A64B2} = {8C3AF25D-81D9-4651-90CA-BF0BD2A03EA7}
{8C3AF25D-81D9-4651-90CA-BF0BD2A03EA7} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{420C35A7-0EDE-4E2E-8500-484B57B0367A} = {E18417C2-D9F5-437A-9ED5-473DD6260066}
{E18417C2-D9F5-437A-9ED5-473DD6260066} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8E2C3187-F848-493A-9E79-56D20DDCAC94}