Compare commits

...

8 Commits

Author SHA1 Message Date
b1075c8b82 Add .NET Framework 4.6.2 support and improve nullability
Updated `DigitalData.UserManager.Domain.csproj` to target .NET Framework 4.6.2 alongside .NET 7.0, 8.0, and 9.0. Corrected `PackageTags` from "user maanger" to "user manager" and added property groups for implicit usings and language versions.

Introduced nullable reference types in entity classes (`BaseEntity`, `ClientUser`, `Group`, `User`, etc.) for enhanced type safety. Updated properties in the `User` and `UserRep` classes to use the new nullable syntax, ensuring consistency across the codebase.

These changes improve compatibility with newer C# features and maintain support for multiple frameworks.
2025-06-26 12:27:24 +02:00
40deb9968f Update namespaces and package references
Refactor namespaces from `DigitalData.Core.DTO` to `DigitalData.Core.Abstraction.Application.DTO` in multiple controllers to adopt a new abstraction layer. Update `DigitalData.Core.API` package from version `2.2.0` to `2.2.1` and add `DigitalData.Core.Abstraction.Application` package with version `1.0.0`. Add `[Obsolete("Use MediatR")]` attribute to several controllers to encourage transitioning to MediatR for request handling.
2025-06-26 11:47:43 +02:00
182771afd2 Refactor AuthController to use MediatR
- Added using directive for DigitalData.Core.Abstraction.Application.DTO.
- Marked IUserService and GetUserWithClaims as obsolete.
- Transitioning towards MediatR for handling requests and responses.
2025-06-26 10:15:58 +02:00
668eef2a4d Update BaseReadDto namespace and mark as obsolete
Replaced the namespace import from `DigitalData.Core.DTO` to `DigitalData.Core.Abstraction.Application.DTO` in `BaseReadDto.cs`. Added an `Obsolete` attribute to indicate deprecation and recommend using `DigitalData.Core.Exceptions and .Middleware` instead. This change enhances code organization and clarity.
2025-06-26 10:00:01 +02:00
e9527ca61e Refactor namespaces and update DTO structures
Updated namespaces for DTOs and services to improve project organization. Marked several interfaces as obsolete in favor of MediatR for better request handling. Simplified `BaseUpdateDto` and other DTOs by removing `IUnique<int>` implementation. Changed return types of `CreateAsync` methods to return corresponding read DTOs. Removed reference to `DigitalData.Core.DTO` in the project file, reflecting a shift in architecture for maintainability.
2025-06-25 17:14:24 +02:00
8f2ec82d4f Mark IBaseService as obsolete for MediatR usage
Added an `Obsolete` attribute to the `IBaseService` interface, recommending the use of MediatR instead. This change serves as a warning to developers about potential deprecation, encouraging a transition to the suggested alternative.
2025-06-25 16:04:27 +02:00
cc708cae0c Refactor namespace and update project dependencies
Updated the import statement for `DigitalData.Core.Abstractions.Application` to `DigitalData.Core.Abstraction.Application` in `IBaseService.cs`. Removed the `PackageReference` for `DigitalData.Core.Abstractions` version `4.0.0` from the project file, indicating a shift in library usage.
2025-06-25 16:03:14 +02:00
b936677c16 Update packages and simplify entity definitions
- Updated package references to newer versions for `DigitalData.Auth.Client`, `DigitalData.Core.API`, `DigitalData.Core.Abstractions`, `DigitalData.Core.Application`, and `DigitalData.EmailProfilerDispatcher.Abstraction`.
- Changed `UserManager.Domain` package version from `3.0.2` to `3.1.0` and updated assembly and file versions.
- Removed `IUnique<int>` interface implementation from `BaseEntity`, `ClientUser`, `Module`, and `ModuleOfUser`.
- Added data annotations to the `User` class for various properties that were previously commented out.
- Updated `Microsoft.EntityFrameworkCore` package references in the `Infrastructure` project for `net7.0` and `net9.0`.
- Modified solution configuration to change a project's build configuration from Debug to Release.
2025-06-25 14:46:39 +02:00
47 changed files with 283 additions and 116 deletions

View File

@@ -2,10 +2,10 @@
using Microsoft.AspNetCore.Authorization;
using DigitalData.UserManager.Application.DTOs.Auth;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.Core.DTO;
using Microsoft.Extensions.Localization;
using DigitalData.UserManager.Application;
using System.Security.Claims;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.API.Controllers;
@@ -14,9 +14,11 @@ namespace DigitalData.UserManager.API.Controllers;
public class AuthController : ControllerBase
{
private readonly ILogger<UserController> _logger;
[Obsolete("Use MediatR")]
private readonly IUserService _userService;
private readonly IStringLocalizer<Resource> _localizer;
[Obsolete("Use MediatR")]
public AuthController(ILogger<UserController> logger, IUserService userService, IStringLocalizer<Resource> localizer)
{
_logger = logger;
@@ -34,6 +36,7 @@ public class AuthController : ControllerBase
[Authorize]
[HttpGet("user")]
[Obsolete("Use MediatR")]
public async Task<IActionResult> GetUserWithClaims()
{
try

View File

@@ -1,5 +1,5 @@
using DigitalData.Core.API;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.Core.API;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.Base;
using DigitalData.UserManager.Application.DTOs.User;
@@ -10,6 +10,7 @@ using System.Security.Claims;
namespace DigitalData.UserManager.API.Controllers;
[Authorize]
[Obsolete("Use MediatR")]
public class BaseAuthController<TCRUDService, TCreateDto, TReadDto, TUpdateDto, TBaseEntity> : CRUDControllerBaseWithErrorHandling<TCRUDService, TCreateDto, TReadDto, TUpdateDto, TBaseEntity, int>
where TCRUDService : IBaseService<TCreateDto, TReadDto, TBaseEntity>
where TCreateDto : BaseCreateDto

View File

@@ -1,5 +1,4 @@
using DigitalData.Core.Abstractions.Application;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
@@ -7,14 +6,16 @@ using System.Diagnostics.CodeAnalysis;
using System.Security.Claims;
using DigitalData.UserManager.Application;
using Microsoft.Extensions.Localization;
using DigitalData.Core.DTO;
using Microsoft.AspNetCore.Authorization;
using DigitalData.Core.Abstraction.Application;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.API.Controllers;
[Route("api/[controller]")]
[SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "<Pending>")]
[Authorize]
[Obsolete("Use MediatR")]
public class DirectoryController : ControllerBase
{
private readonly IUserService _userService;

View File

@@ -1,4 +1,4 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.Group;
using DigitalData.UserManager.Domain.Entities;
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
namespace DigitalData.UserManager.API.Controllers;
[Authorize]
[Obsolete("Use MediatR")]
public class GroupController : BaseAuthController<IGroupService, GroupCreateDto, GroupReadDto, GroupUpdateDto, Group>
{
public GroupController(ILogger<GroupController> logger, IGroupService service, IUserService userService) : base(logger, service, userService)

View File

@@ -1,4 +1,4 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.GroupOfUser;
using DigitalData.UserManager.Domain.Entities;
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
namespace DigitalData.UserManager.API.Controllers;
[Authorize]
[Obsolete("Use MediatR")]
public class GroupOfUserController : BaseAuthController<IGroupOfUserService, GroupOfUserCreateDto, GroupOfUserReadDto, GroupOfUserUpdateDto, GroupOfUser>
{
public GroupOfUserController(ILogger<GroupOfUserController> logger, IGroupOfUserService service, IUserService userService) : base(logger, service, userService)

View File

@@ -1,5 +1,5 @@
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.Core.API;
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.ModuleOfUser;
using DigitalData.UserManager.Domain.Entities;
@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Mvc;
namespace DigitalData.UserManager.API.Controllers;
[Authorize]
[Obsolete("Use MediatR")]
public class ModuleOfUserController : CRUDControllerBaseWithErrorHandling<IModuleOfUserService, ModuleOfUserCreateDto, ModuleOfUserReadDto, ModuleOfUserUpdateDto, ModuleOfUser, int>
{
public ModuleOfUserController(ILogger<ModuleOfUserController> logger, IModuleOfUserService service) : base(logger, service)

View File

@@ -1,4 +1,4 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.User;
using DigitalData.UserManager.Domain.Entities;
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
namespace DigitalData.UserManager.API.Controllers;
[Authorize]
[Obsolete("Use MediatR")]
public class UserController : BaseAuthController<IUserService, UserCreateDto, UserReadDto, UserUpdateDto, User>
{
public UserController(ILogger<UserController> logger, IUserService service) : base(logger, service, service)

View File

@@ -1,4 +1,4 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.UserRep;
using DigitalData.UserManager.Domain.Entities;
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
namespace DigitalData.UserManager.API.Controllers;
[Authorize]
[Obsolete("Use MediatR")]
public class UserRepController : BaseAuthController<IUserRepService, UserRepCreateDto, UserRepReadDto, UserRepUpdateDto, UserRep>
{
public UserRepController(ILogger<UserRepController> logger, IUserRepService service, IUserService userService) : base(logger, service, userService)

View File

@@ -21,8 +21,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="DigitalData.Auth.Client" Version="1.3.5" />
<PackageReference Include="DigitalData.Core.API" Version="2.1.1" />
<PackageReference Include="DigitalData.Auth.Client" Version="1.3.7" />
<PackageReference Include="DigitalData.Core.Abstraction.Application" Version="1.0.0" />
<PackageReference Include="DigitalData.Core.API" Version="2.2.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.14" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.20" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.4" />

View File

@@ -1,10 +1,11 @@
using DigitalData.UserManager.Domain.Entities;
using DigitalData.Core.Abstractions.Application;
using DigitalData.UserManager.Application.DTOs.User;
using DigitalData.UserManager.Application.DTOs.Base;
using DigitalData.Core.Abstraction.Application;
namespace DigitalData.UserManager.Application.Contracts
{
[Obsolete("Use MediatR")]
public interface IBaseService<TCreateDto, TReadDto, TBaseEntity> : ICRUDService<TCreateDto, TReadDto, TBaseEntity, int>
where TCreateDto : BaseCreateDto
where TReadDto : class
@@ -14,5 +15,5 @@ namespace DigitalData.UserManager.Application.Contracts
public Func<Task<UserReadDto?>> UserFactoryAsync { set; }
public Task<UserReadDto?> GetUserAsync();
}
}
}

View File

@@ -1,9 +1,10 @@
using DigitalData.UserManager.Application.DTOs.GroupOfUser;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Contracts
{
[Obsolete("Use MediatR")]
public interface IGroupOfUserService : IBaseService<GroupOfUserCreateDto, GroupOfUserReadDto, GroupOfUser>
{
Task<Result> DeleteAsyncByGroupUserId(int groupId, int userId);

View File

@@ -1,9 +1,10 @@
using DigitalData.UserManager.Application.DTOs.Group;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Contracts
{
[Obsolete("Use MediatR")]
public interface IGroupService : IBaseService<GroupCreateDto, GroupReadDto, Group>
{
Task<DataResult<int>> CreateAsync(DirectoryGroupDto dirGroup);

View File

@@ -1,10 +1,11 @@
using DigitalData.Core.Abstractions.Application;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.UserManager.Application.DTOs.ModuleOfUser;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts
{
[Obsolete("Use MediatR")]
public interface IModuleOfUserService : ICRUDService<ModuleOfUserCreateDto, ModuleOfUserReadDto, ModuleOfUser, int>
{
Task<Result> DeleteAsyncByModuleUserId(int moduleId, int userId);

View File

@@ -1,9 +1,10 @@
using DigitalData.Core.Abstractions.Application;
using DigitalData.Core.Abstraction.Application;
using DigitalData.UserManager.Application.DTOs.Module;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts
{
[Obsolete("Use MediatR")]
public interface IModuleService : IBasicCRUDService<ModuleDto, Module, int>
{
}

View File

@@ -1,9 +1,10 @@
using DigitalData.UserManager.Application.DTOs.UserRep;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Contracts
{
[Obsolete("Use MediatR")]
public interface IUserRepService : IBaseService<UserRepCreateDto, UserRepReadDto, UserRep>
{
Task<DataResult<IEnumerable<UserRepReadDto>>> ReadAllAsync(bool withUser = false, bool withRepGroup = false, bool withGroup = false, bool withRepUser = false, int? userId = null, int? groupId = null);

View File

@@ -1,9 +1,10 @@
using DigitalData.UserManager.Application.DTOs.User;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Contracts
{
[Obsolete("Use MediatR")]
public interface IUserService : IBaseService<UserCreateDto, UserReadDto, User>
{
Task<DataResult<IEnumerable<UserReadDto>>> ReadByModuleIdAsync(int moduleId);

View File

@@ -1,8 +1,9 @@
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts.Repositories;
[Obsolete("Use IRepository")]
public interface IClientUserRepository : ICRUDRepository<ClientUser, int>
{
Task<IEnumerable<ClientUser>> ReadAsync(bool readOnly = true, int? userId = null);

View File

@@ -1,8 +1,9 @@
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts.Repositories;
[Obsolete("Use IRepository")]
public interface IGroupOfUserRepository : ICRUDRepository<GroupOfUser, int>
{
IQueryable<GroupOfUser> ReadByGroupId(int groupId);

View File

@@ -1,8 +1,9 @@
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts.Repositories;
[Obsolete("Use IRepository")]
public interface IGroupRepository : ICRUDRepository<Group, int>
{
}

View File

@@ -1,8 +1,9 @@
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts.Repositories;
[Obsolete("Use IRepository")]
public interface IModuleOfUserRepository : ICRUDRepository<ModuleOfUser, int>
{
IQueryable<ModuleOfUser> ReadByModuleId(int moduleId);

View File

@@ -1,8 +1,9 @@
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts.Repositories;
[Obsolete("Use IRepository")]
public interface IModuleRepository : ICRUDRepository<Module, int>
{
}

View File

@@ -1,8 +1,9 @@
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts.Repositories;
[Obsolete("Use IRepository")]
public interface IUserRepRepository : ICRUDRepository<UserRep, int>
{
Task<IEnumerable<UserRep>> ReadAllAsync(

View File

@@ -1,8 +1,9 @@
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Contracts.Repositories;
[Obsolete("Use IRepository")]
public interface IUserRepository : ICRUDRepository<User, int>
{
Task<IEnumerable<User>> ReadByModuleIdAsync(int moduleId);

View File

@@ -1,7 +1,8 @@
using DigitalData.Core.DTO;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.DTOs.Base
{
// TODO: use getter - setter methods for a simple inheritance.
[Obsolete("Use DigitalData.Core.Exceptions and .Middleware")]
public record BaseReadDto(int Id, string? AddedWho, DateTime? AddedWhen, string? ChangedWho, DateTime? ChangedWhen) : BaseDTO<int>(Id);
}

View File

@@ -1,8 +1,6 @@
using DigitalData.Core.Abstractions;
namespace DigitalData.UserManager.Application.DTOs.Base
namespace DigitalData.UserManager.Application.DTOs.Base
{
public record BaseUpdateDto() : IUnique<int>
public record BaseUpdateDto
{
public string ChangedWho { get; set; } = "UNAUTHORIZED";

View File

@@ -1,10 +1,8 @@
using DigitalData.Core.Abstractions;
namespace DigitalData.UserManager.Application.DTOs.Module
namespace DigitalData.UserManager.Application.DTOs.Module
{
public record ModuleDto(
int Id,
string? Name,
string? ShortName
) : IUnique<int>;
);
}

View File

@@ -1,6 +1,4 @@
using DigitalData.Core.Abstractions;
namespace DigitalData.UserManager.Application.DTOs.ModuleOfUser
namespace DigitalData.UserManager.Application.DTOs.ModuleOfUser
{
public record ModuleOfUserUpdateDto(
int Id,
@@ -9,5 +7,5 @@ namespace DigitalData.UserManager.Application.DTOs.ModuleOfUser
bool? IsAdmin,
string? Comment,
string? ChangedWho
) : IUnique<int>;
);
}

View File

@@ -26,10 +26,9 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="DigitalData.Core.Abstractions" Version="3.4.1" />
<PackageReference Include="DigitalData.Core.Application" Version="3.2.1" />
<PackageReference Include="DigitalData.Core.DTO" Version="2.0.1" />
<PackageReference Include="DigitalData.EmailProfilerDispatcher.Abstraction" Version="3.0.0" />
<PackageReference Include="DigitalData.Core.Abstraction.Application" Version="1.0.0" />
<PackageReference Include="DigitalData.Core.Application" Version="3.3.4" />
<PackageReference Include="DigitalData.EmailProfilerDispatcher.Abstraction" Version="3.1.1" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">

View File

@@ -1,7 +1,7 @@
using AutoMapper;
using DigitalData.Core.Abstractions.Infrastructure;
using DigitalData.Core.Abstraction.Application.DTO;
using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.Core.Application;
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.Base;
using DigitalData.UserManager.Application.DTOs.User;
@@ -9,6 +9,7 @@ using DigitalData.UserManager.Domain.Entities;
namespace DigitalData.UserManager.Application.Services
{
[Obsolete("Use MediatR")]
public class BaseService<TCRUDRepository, TCreateDto, TReadDto, TBaseEntity> : CRUDService<TCRUDRepository, TCreateDto, TReadDto, TBaseEntity, int>, IBaseService<TCreateDto, TReadDto, TBaseEntity>
where TCRUDRepository : ICRUDRepository<TBaseEntity, int>
where TCreateDto : BaseCreateDto
@@ -25,7 +26,7 @@ namespace DigitalData.UserManager.Application.Services
public async Task<UserReadDto?> GetUserAsync() => _lazyUserAsync is null ? null : await _lazyUserAsync.Value;
public override async Task<DataResult<int>> CreateAsync(TCreateDto createDto)
public override async Task<DataResult<TReadDto>> CreateAsync(TCreateDto createDto)
{
var user = await GetUserAsync();
if(user is not null)

View File

@@ -1,12 +1,13 @@
using AutoMapper;
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.GroupOfUser;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Application.Contracts.Repositories;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Services
{
[Obsolete("Use MediatR")]
public class GroupOfUserService : BaseService<IGroupOfUserRepository, GroupOfUserCreateDto, GroupOfUserReadDto, GroupOfUser>, IGroupOfUserService
{
public GroupOfUserService(IGroupOfUserRepository repository, IMapper mapper) : base(repository, mapper)

View File

@@ -1,13 +1,14 @@
using AutoMapper;
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.Group;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Application.Contracts.Repositories;
using Microsoft.Extensions.Localization;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Services
{
[Obsolete("Use MediatR")]
public class GroupService : BaseService<IGroupRepository, GroupCreateDto, GroupReadDto, Group>, IGroupService
{
private readonly IStringLocalizer<Resource>? _localizer;

View File

@@ -1,13 +1,14 @@
using AutoMapper;
using DigitalData.Core.Application;
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.ModuleOfUser;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Application.Contracts.Repositories;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Services
{
[Obsolete("Use MediatR")]
public class ModuleOfUserService : CRUDService<IModuleOfUserRepository, ModuleOfUserCreateDto, ModuleOfUserReadDto, ModuleOfUser, int>, IModuleOfUserService
{
public ModuleOfUserService(IModuleOfUserRepository repository, IMapper mapper) : base(repository, mapper)

View File

@@ -7,6 +7,7 @@ using DigitalData.UserManager.Application.Contracts.Repositories;
namespace DigitalData.UserManager.Application.Services
{
[Obsolete("Use MediatR")]
public class ModuleService : BasicCRUDService<IModuleRepository, ModuleDto, Module, int>, IModuleService
{
public ModuleService(IModuleRepository repository, IMapper mapper) : base(repository, mapper)

View File

@@ -1,14 +1,15 @@
using AutoMapper;
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.UserRep;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Application.Contracts.Repositories;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Services
{
[Obsolete("Use MediatR")]
public class UserRepService : BaseService<IUserRepRepository, UserRepCreateDto, UserRepReadDto, UserRep>, IUserRepService
{
private readonly IStringLocalizer<Resource>? _localizer;
@@ -24,13 +25,13 @@ namespace DigitalData.UserManager.Application.Services
return Result.Success(urReadDTOs);
}
public override async Task<DataResult<int>> CreateAsync(UserRepCreateDto createDto)
public override async Task<DataResult<UserRepReadDto>> CreateAsync(UserRepCreateDto createDto)
// XOR control
=> (createDto.ValidFrom is null && createDto.ValidTo is not null) || (createDto.ValidFrom is not null && createDto.ValidTo is null)
? Result.Fail<int>().Notice(LogLevel.None, Flag.DataIntegrityIssue, _localizer?[Key.DateRangeNotXNOR].Value)
? Result.Fail<UserRepReadDto>().Notice(LogLevel.None, Flag.DataIntegrityIssue, _localizer?[Key.DateRangeNotXNOR].Value)
//date range control
: (createDto.ValidFrom > createDto.ValidTo)
? Result.Fail<int>().Notice(LogLevel.None, Flag.DataIntegrityIssue, _localizer?[Key.InvalidDateRange].Value)
? Result.Fail<UserRepReadDto>().Notice(LogLevel.None, Flag.DataIntegrityIssue, _localizer?[Key.InvalidDateRange].Value)
: await base.CreateAsync(createDto);
}
}

View File

@@ -1,13 +1,14 @@
using AutoMapper;
using DigitalData.Core.DTO;
using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.DTOs.User;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.UserManager.Application.Contracts.Repositories;
using Microsoft.Extensions.Localization;
using DigitalData.Core.Abstraction.Application.DTO;
namespace DigitalData.UserManager.Application.Services
{
[Obsolete("Use MediatR")]
public class UserService : BaseService<IUserRepository, UserCreateDto, UserReadDto, User>, IUserService
{
private readonly IStringLocalizer<Resource>? _localizer;

View File

@@ -25,6 +25,10 @@
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="DigitalData.Core.Abstraction.Application" Version="1.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DigitalData.UserManager.Application\DigitalData.UserManager.Application.csproj" />
<ProjectReference Include="..\DigitalData.UserManager.Domain\DigitalData.UserManager.Domain.csproj" />

View File

@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net7.0;net8.0;net9.0</TargetFrameworks>
<TargetFrameworks>net462;net7.0;net8.0;net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackageId>UserManager.Domain</PackageId>
<Version>3.0.2</Version>
<Version>3.1.0</Version>
<Authors>Digital Data GmbH</Authors>
<Company>Digital Data GmbH</Company>
<Product>UserManager.Domain</Product>
@@ -13,20 +13,43 @@
<Copyright>Copyright 2024</Copyright>
<PackageIcon>icon.png</PackageIcon>
<RepositoryUrl>http://git.dd:3000/AppStd/WebUserManager.git</RepositoryUrl>
<PackageTags>digital data domain user maanger</PackageTags>
<AssemblyVersion>3.0.2</AssemblyVersion>
<FileVersion>3.0.2</FileVersion>
<PackageTags>digital data domain user manager</PackageTags>
<AssemblyVersion>3.1.0</AssemblyVersion>
<FileVersion>3.1.0</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net462'">
<ImplicitUsings>disable</ImplicitUsings>
<LangVersion>7.3</LangVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' != 'net462'">
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net462'">
<PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
<PackageReference Include="System.Drawing.Common" Version="4.7.3" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageReference Include="System.Drawing.Common" Version="8.0.16" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageReference Include="System.Drawing.Common" Version="9.0.5" />
</ItemGroup>
<ItemGroup>
<None Include="..\Assets\icon.png">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="DigitalData.Core.Abstractions" Version="3.4.0" />
</ItemGroup>
</Project>

View File

@@ -1,11 +1,13 @@
using DigitalData.Core.Abstractions;
using System.ComponentModel;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK
using System;
#endif
namespace DigitalData.UserManager.Domain.Entities
{
public class BaseEntity : IUnique<int>
public class BaseEntity
{
[Column("GUID")]
[Key]
@@ -14,11 +16,21 @@ namespace DigitalData.UserManager.Domain.Entities
[StringLength(50)]
[Column("ADDED_WHO")]
public string? AddedWho { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
AddedWho
{ get; set; }
[StringLength(50)]
[Column("CHANGED_WHO")]
public string? ChangedWho { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
ChangedWho
{ get; set; }
//TODO: assign it to default value in create dto, not here!
[Column("ADDED_WHEN", TypeName = "datetime")]

View File

@@ -1,12 +1,14 @@
using DigitalData.Core.Abstractions;
using System.ComponentModel;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK
using System;
#endif
namespace DigitalData.UserManager.Domain.Entities
{
[Table("TBDD_CLIENT_USER", Schema = "dbo")]
public class ClientUser : IUnique<int>
public class ClientUser
{
[Column("GUID")]
[Key]
@@ -15,18 +17,28 @@ namespace DigitalData.UserManager.Domain.Entities
[Required]
[Column("USER_ID")]
public int UserId { get; init; }
public int UserId { get; set; }
[Required]
[Column("CLIENT_ID")]
public int ClientId { get; init; }
public int ClientId { get; set; }
[Column("COMMENT")]
public string? Comment { get; init; }
public string
#if NET6_0_OR_GREATER
?
#endif
Comment
{ get; set; }
[StringLength(50)]
[Column("ADDED_WHO")]
public string? AddedWho { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
AddedWho
{ get; set; }
[Column("ADDED_WHEN", TypeName = "datetime")]
[DefaultValue("GETDATE()")]

View File

@@ -8,7 +8,11 @@ namespace DigitalData.UserManager.Domain.Entities
public class Group : BaseEntity
{
[StringLength(50)]
public string? Name { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Name { get; set; }
[Required]
[DefaultValue(false)]
@@ -24,12 +28,17 @@ namespace DigitalData.UserManager.Domain.Entities
public bool Active { get; set; }
[StringLength(200)]
public string? Comment { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Comment
{ get; set; }
// TODO: this column should be assigned by triggers. despite this it is not null and this is problem for creation. talk with others
[Required]
[Column("ECM_FK_ID")]
[DefaultValue(-1)]
public int EcmFkId { get; init; } = -1;
public int EcmFkId { get; set; } = -1;
}
}

View File

@@ -15,12 +15,24 @@ namespace DigitalData.UserManager.Domain.Entities
public int GroupId { get; set; }
[StringLength(200)]
public string? Comment { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Comment { get; set; }
[ForeignKey("UserId")]
public virtual User? User { get; set; }
public virtual User
#if NET6_0_OR_GREATER
?
#endif
User { get; set; }
[ForeignKey("GroupId")]
public virtual Group? Group { get; set; }
public virtual Group
#if NET6_0_OR_GREATER
?
#endif
Group { get; set; }
}
}
}

View File

@@ -1,11 +1,10 @@
using DigitalData.Core.Abstractions;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace DigitalData.UserManager.Domain.Entities
{
[Table("TBDD_MODULES", Schema = "dbo")]
public class Module : IUnique<int>
public class Module
{
[Column("GUID")]
[Key]
@@ -13,11 +12,19 @@ namespace DigitalData.UserManager.Domain.Entities
public int Id { get; set; }
[StringLength(50)]
public string? Name { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Name { get; set; }
[StringLength(20)]
[Column("SHORT_NAME")]
public string? ShortName { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
ShortName { get; set; }
#region IGNORED COLUMNS
//[Required]

View File

@@ -1,11 +1,10 @@
using DigitalData.Core.Abstractions;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace DigitalData.UserManager.Domain.Entities
{
[Table("TBDD_USER_MODULES", Schema = "dbo")]
public class ModuleOfUser : IUnique<int>
public class ModuleOfUser
{
[Column("GUID")]
[Key]
@@ -22,21 +21,41 @@ namespace DigitalData.UserManager.Domain.Entities
[Column("COMMENT")]
[StringLength(200)]
public string? Comment { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Comment { get; set; }
[Column("ADDED_WHO")]
[StringLength(50)]
public string? AddedWho { get; set; } = "DEFAULT";
public string
#if NET6_0_OR_GREATER
?
#endif
AddedWho { get; set; } = "DEFAULT";
[Column("CHANGED_WHO")]
[StringLength(50)]
public string? ChangedWho { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
ChangedWho { get; set; }
[ForeignKey("UserId")]
public virtual User? User { get; set; }
public virtual User
#if NET6_0_OR_GREATER
?
#endif
User { get; set; }
[ForeignKey("ModuleId")]
public virtual Module? Module { get; set; }
public virtual Module
#if NET6_0_OR_GREATER
?
#endif
Module { get; set; }
#region IGNORED COLUMNS
//public bool IsAdmin { get; set; }
@@ -54,5 +73,4 @@ namespace DigitalData.UserManager.Domain.Entities
//public DateTime? ChangedWhen { get; set; }
#endregion
}
}

View File

@@ -9,11 +9,19 @@ namespace DigitalData.UserManager.Domain.Entities
{
[Column("PRENAME")]
[StringLength(50)]
public string? Prename { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Prename { get; set; }
[Column("NAME")]
[StringLength(50)]
public string? Name { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Name { get; set; }
[Required]
[Column("USERNAME")]
@@ -22,21 +30,38 @@ namespace DigitalData.UserManager.Domain.Entities
[Column("SHORTNAME")]
[StringLength(30)]
public string? Shortname { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Shortname
{ get; set; }
[Column("EMAIL")]
[StringLength(100)]
public string? Email { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Email { get; set; }
[Required]
[Column("LANGUAGE")]
[StringLength(5)]
[DefaultValue("de-DE")]
public string Language { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Language { get; set; }
[Column("COMMENT")]
[StringLength(500)]
public string? Comment { get; set; }
public string
#if NET6_0_OR_GREATER
?
#endif
Comment { get; set; }
[Column("DELETED")]
public bool Deleted { get; set; }

View File

@@ -1,5 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK
using System;
#endif
namespace DigitalData.UserManager.Domain.Entities
{
@@ -25,15 +27,31 @@ namespace DigitalData.UserManager.Domain.Entities
public DateTime? ValidTo { get; set; }
[ForeignKey("UserId")]
public virtual User? User { get; set; }
public virtual User
#if NET6_0_OR_GREATER
?
#endif
User { get; set; }
[ForeignKey("RepGroupId")]
public virtual Group? RepGroup { get; set; }
public virtual Group
#if NET6_0_OR_GREATER
?
#endif
RepGroup { get; set; }
[ForeignKey("GroupId")]
public virtual Group? Group { get; set; }
public virtual Group
#if NET6_0_OR_GREATER
?
#endif
Group { get; set; }
[ForeignKey("RepUserId")]
public virtual User? RepUser { get; set; }
public virtual User
#if NET6_0_OR_GREATER
?
#endif
RepUser { get; set; }
}
}

View File

@@ -26,7 +26,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="DigitalData.Core.Infrastructure" Version="2.0.1" />
<PackageReference Include="DigitalData.Core.Abstraction.Application" Version="1.0.0" />
<PackageReference Include="DigitalData.Core.Infrastructure" Version="2.1.1" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
@@ -40,7 +41,7 @@
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.4" />
</ItemGroup>

View File

@@ -42,8 +42,8 @@ Global
{07CCD651-647C-49F7-9715-30CEBC13710D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07CCD651-647C-49F7-9715-30CEBC13710D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07CCD651-647C-49F7-9715-30CEBC13710D}.Release|Any CPU.Build.0 = Release|Any CPU
{7E5FD115-EE6D-48F2-ACF1-E951EC071073}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E5FD115-EE6D-48F2-ACF1-E951EC071073}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E5FD115-EE6D-48F2-ACF1-E951EC071073}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{7E5FD115-EE6D-48F2-ACF1-E951EC071073}.Debug|Any CPU.Build.0 = Release|Any CPU
{7E5FD115-EE6D-48F2-ACF1-E951EC071073}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E5FD115-EE6D-48F2-ACF1-E951EC071073}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection