Compare commits

..

3 Commits

Author SHA1 Message Date
Developer 02
a34d19e1bd Merge branch 'master' of http://git.dd:3000/AppStd/DigitalData.ActiveDirectory 2025-08-05 16:10:42 +02:00
Developer 02
f73730ba65 refactor(DirectorySearchQuery): Root-Datensatz definieren.
- SearchRoot-Eigenschaft hinzufügen
 - Zuordnungsprofil zwischen DirectorySearchQuery.Root und DirectoryEntry hinzufügen
 - Logik hinzufügen, um den Standardwert SearcdhRoot zu verwenden, wenn DirectorySearchQuery.Root null ist
2025-08-05 15:41:01 +02:00
Developer 02
d0de978c7d fix(DirectorySearchQuery): Umbenennen von „properties-property“ in „Property“ 2025-08-05 14:28:09 +02:00
2 changed files with 14 additions and 11 deletions

View File

@@ -6,9 +6,13 @@ using System.DirectoryServices;
namespace DigitalData.ActiveDirectory;
public record DirectorySearchQuery(string? Filter = null, SearchScope Scope = SearchScope.Subtree, int SizeLimit = 5000, params string[] properties)
public record DirectorySearchQuery(string? Filter = null, SearchScope Scope = SearchScope.Subtree, int SizeLimit = 5000, params string[] Property)
: IRequest<IEnumerable<ResultPropertyCollection>>
{
public record Root(string Path, string? Username = null, string? Password = null);
public Root? SearchRoot { get; set; }
public Action<DirectorySearcher>? AfterInit { get; set; }
}
@@ -25,13 +29,6 @@ public class DirectorySearchQueryHandler : IRequestHandler<DirectorySearchQuery,
_mapper = mapper;
}
public DirectoryEntry DirectoryEntry => new ()
{
Path = _options.Value.Path,
Username = _options.Value.Username,
Password = _options.Value.Password
};
//TODO: add resolver to handle SearchRoot and AfterInit mapping
public Task<IEnumerable<ResultPropertyCollection>> Handle(DirectorySearchQuery request, CancellationToken cancellationToken = default)
{
@@ -39,14 +36,19 @@ public class DirectorySearchQueryHandler : IRequestHandler<DirectorySearchQuery,
{
using var searcher = _mapper.Map<DirectorySearcher>(request);
searcher.SearchRoot = DirectoryEntry;
searcher.SearchRoot ??= new()
{
Path = _options.Value.Path,
Username = _options.Value.Username,
Password = _options.Value.Password
};
request.AfterInit?.Invoke(searcher);
if (request.properties.Length > 0)
if (request.Property.Length > 0)
searcher.PropertiesToLoad.Clear();
searcher.PropertiesToLoad.AddRange(request.properties.Where(p => p is not null).ToArray());
searcher.PropertiesToLoad.AddRange(request.Property.Where(p => p is not null).ToArray());
var res = searcher.FindAll().Cast<SearchResult>().Select(r => r.Properties);
return res.Any() ? res : throw new NotFoundException();
});

View File

@@ -9,5 +9,6 @@ public class MappingProfile : Profile
public MappingProfile()
{
CreateMap<DirectorySearchQuery, DirectorySearcher>();
CreateMap<DirectorySearchQuery.Root, DirectoryEntry>();
}
}