diff --git a/Packages/Federation.Sdk.Contracts/Source/Filtering/GroupFilters.cs b/Packages/Federation.Sdk.Contracts/Source/Filtering/GroupFilters.cs new file mode 100644 index 0000000..655b682 --- /dev/null +++ b/Packages/Federation.Sdk.Contracts/Source/Filtering/GroupFilters.cs @@ -0,0 +1,77 @@ +namespace HttpsRichardy.Federation.Sdk.Contracts.Filtering; + +public sealed class GroupFilters +{ + internal string? Id { get; private set; } + internal string? RealmId { get; private set; } + internal string? Name { get; private set; } + + internal bool? IsDeleted { get; private set; } + + internal DateOnly? CreatedAfter { get; private set; } + internal DateOnly? CreatedBefore { get; private set; } + + public GroupFilters WithIdentifier(string identifier) + { + if (!string.IsNullOrWhiteSpace(identifier)) + { + Id = identifier.Trim(); + } + + return this; + } + + public GroupFilters WithRealmId(string realmId) + { + if (!string.IsNullOrWhiteSpace(realmId)) + { + RealmId = realmId.Trim(); + } + + return this; + } + + public GroupFilters WithName(string name) + { + if (!string.IsNullOrWhiteSpace(name)) + { + Name = name.Trim(); + } + + return this; + } + + public GroupFilters WithIsDeleted(bool? isDeleted) + { + IsDeleted = isDeleted; + return this; + } + + public GroupFilters WithCreatedAfter(DateOnly? createdAfter) + { + CreatedAfter = createdAfter; + return this; + } + + public GroupFilters WithCreatedBefore(DateOnly? createdBefore) + { + CreatedBefore = createdBefore; + return this; + } + + public static GroupsFetchParameters WithoutFilters => new(); + public static GroupFilters AsBuilder() => new(); + + public GroupsFetchParameters Build() + { + return new GroupsFetchParameters + { + Id = Id, + RealmId = RealmId, + Name = Name, + IsDeleted = IsDeleted, + CreatedAfter = CreatedAfter, + CreatedBefore = CreatedBefore + }; + } +} diff --git a/Packages/Federation.Sdk.Contracts/Source/Filtering/GroupPermissionsFilters.cs b/Packages/Federation.Sdk.Contracts/Source/Filtering/GroupPermissionsFilters.cs new file mode 100644 index 0000000..78ad123 --- /dev/null +++ b/Packages/Federation.Sdk.Contracts/Source/Filtering/GroupPermissionsFilters.cs @@ -0,0 +1,52 @@ +namespace HttpsRichardy.Federation.Sdk.Contracts.Filtering; + +public sealed class GroupPermissionsFilters +{ + internal string? PermissionName { get; private set; } + + internal int PageNumber { get; private set; } = 1; + internal int PageSize { get; private set; } = 60; + + public GroupPermissionsFilters WithPermissionName(string permissionName) + { + if (!string.IsNullOrWhiteSpace(permissionName)) + { + PermissionName = permissionName.Trim(); + } + + return this; + } + + public GroupPermissionsFilters WithPageNumber(int pageNumber) + { + if (pageNumber > 0) + { + PageNumber = pageNumber; + } + + return this; + } + + public GroupPermissionsFilters WithPageSize(int pageSize) + { + if (pageSize > 0) + { + PageSize = pageSize; + } + + return this; + } + + public static ListGroupPermissionsParameters WithoutFilters => new(); + public static GroupPermissionsFilters AsBuilder() => new(); + + public ListGroupPermissionsParameters Build() + { + return new ListGroupPermissionsParameters + { + PermissionName = PermissionName, + PageNumber = PageNumber, + PageSize = PageSize + }; + } +} diff --git a/Packages/Federation.Sdk.Contracts/Source/Filtering/PermissionFilters.cs b/Packages/Federation.Sdk.Contracts/Source/Filtering/PermissionFilters.cs new file mode 100644 index 0000000..d29f9f1 --- /dev/null +++ b/Packages/Federation.Sdk.Contracts/Source/Filtering/PermissionFilters.cs @@ -0,0 +1,60 @@ +namespace HttpsRichardy.Federation.Sdk.Contracts.Filtering; + +public sealed class PermissionFilters +{ + internal string? Name { get; private set; } + internal bool IncludeDeleted { get; private set; } = false; + + internal int PageNumber { get; private set; } = 1; + internal int PageSize { get; private set; } = 20; + + public PermissionFilters WithName(string name) + { + if (!string.IsNullOrWhiteSpace(name)) + { + Name = name.Trim(); + } + + return this; + } + + public PermissionFilters WithIncludeDeleted(bool includeDeleted) + { + IncludeDeleted = includeDeleted; + return this; + } + + public PermissionFilters WithPageNumber(int pageNumber) + { + if (pageNumber > 0) + { + PageNumber = pageNumber; + } + + return this; + } + + public PermissionFilters WithPageSize(int pageSize) + { + if (pageSize > 0) + { + PageSize = pageSize; + } + + return this; + } + + public static PermissionsFetchParameters WithoutFilters => new(); + public static PermissionFilters AsBuilder() => new(); + + public PermissionsFetchParameters Build() + { + return new PermissionsFetchParameters + { + Name = Name, + IncludeDeleted = IncludeDeleted, + PageNumber = PageNumber, + PageSize = PageSize + }; + } +} diff --git a/Packages/Federation.Sdk.Contracts/Source/Filtering/RealmFilters.cs b/Packages/Federation.Sdk.Contracts/Source/Filtering/RealmFilters.cs new file mode 100644 index 0000000..de9f05f --- /dev/null +++ b/Packages/Federation.Sdk.Contracts/Source/Filtering/RealmFilters.cs @@ -0,0 +1,73 @@ +namespace HttpsRichardy.Federation.Sdk.Contracts.Filtering; + +public sealed class RealmFilters +{ + internal string? Id { get; private set; } + internal string? Name { get; private set; } + + internal bool? IncludeDeleted { get; private set; } + + internal int PageNumber { get; private set; } = 1; + internal int PageSize { get; private set; } = 20; + + public RealmFilters WithIdentifier(string identifier) + { + if (!string.IsNullOrWhiteSpace(identifier)) + { + Id = identifier.Trim(); + } + + return this; + } + + public RealmFilters WithName(string name) + { + if (!string.IsNullOrWhiteSpace(name)) + { + Name = name.Trim(); + } + + return this; + } + + public RealmFilters WithIncludeDeleted(bool? includeDeleted) + { + IncludeDeleted = includeDeleted; + return this; + } + + public RealmFilters WithPageNumber(int pageNumber) + { + if (pageNumber > 0) + { + PageNumber = pageNumber; + } + + return this; + } + + public RealmFilters WithPageSize(int pageSize) + { + if (pageSize > 0) + { + PageSize = pageSize; + } + + return this; + } + + public static RealmFetchParameters WithoutFilters => new(); + public static RealmFilters AsBuilder() => new(); + + public RealmFetchParameters Build() + { + return new RealmFetchParameters + { + Id = Id, + Name = Name, + IncludeDeleted = IncludeDeleted, + PageNumber = PageNumber, + PageSize = PageSize + }; + } +} diff --git a/Packages/Federation.Sdk.Contracts/Source/Filtering/UserFilters.cs b/Packages/Federation.Sdk.Contracts/Source/Filtering/UserFilters.cs new file mode 100644 index 0000000..f94b3a1 --- /dev/null +++ b/Packages/Federation.Sdk.Contracts/Source/Filtering/UserFilters.cs @@ -0,0 +1,73 @@ +namespace HttpsRichardy.Federation.Sdk.Contracts.Filtering; + +public sealed class UserFilters +{ + internal string? Id { get; private set; } + internal string? Username { get; private set; } + + internal bool? IsDeleted { get; private set; } + + internal int PageNumber { get; private set; } = 1; + internal int PageSize { get; private set; } = 60; + + public UserFilters WithIdentifier(string identifier) + { + if (!string.IsNullOrWhiteSpace(identifier)) + { + Id = identifier.Trim(); + } + + return this; + } + + public UserFilters WithUsername(string username) + { + if (!string.IsNullOrWhiteSpace(username)) + { + Username = username.Trim(); + } + + return this; + } + + public UserFilters WithIsDeleted(bool? isDeleted) + { + IsDeleted = isDeleted; + return this; + } + + public UserFilters WithPageNumber(int pageNumber) + { + if (pageNumber > 0) + { + PageNumber = pageNumber; + } + + return this; + } + + public UserFilters WithPageSize(int pageSize) + { + if (pageSize > 0) + { + PageSize = pageSize; + } + + return this; + } + + public static UsersFetchParameters WithoutFilters => new(); + public static UserFilters AsBuilder() => new(); + + public UsersFetchParameters Build() + { + return new UsersFetchParameters + { + Id = Id, + Username = Username, + IsDeleted = IsDeleted, + PageNumber = PageNumber, + PageSize = PageSize + }; + } +} diff --git a/Packages/Federation.Sdk.Contracts/Source/Filtering/UserGroupsFilters.cs b/Packages/Federation.Sdk.Contracts/Source/Filtering/UserGroupsFilters.cs new file mode 100644 index 0000000..03d21e5 --- /dev/null +++ b/Packages/Federation.Sdk.Contracts/Source/Filtering/UserGroupsFilters.cs @@ -0,0 +1,39 @@ +namespace HttpsRichardy.Federation.Sdk.Contracts.Filtering; + +public sealed class UserGroupsFilters +{ + internal int PageNumber { get; private set; } = 1; + internal int PageSize { get; private set; } = 60; + + public UserGroupsFilters WithPageNumber(int pageNumber) + { + if (pageNumber > 0) + { + PageNumber = pageNumber; + } + + return this; + } + + public UserGroupsFilters WithPageSize(int pageSize) + { + if (pageSize > 0) + { + PageSize = pageSize; + } + + return this; + } + + public static ListUserAssignedGroupsParameters WithoutFilters => new(); + public static UserGroupsFilters AsBuilder() => new(); + + public ListUserAssignedGroupsParameters Build() + { + return new ListUserAssignedGroupsParameters + { + PageNumber = PageNumber, + PageSize = PageSize + }; + } +} diff --git a/Packages/Federation.Sdk/Source/Helpers/QueryParametersHelper.cs b/Packages/Federation.Sdk/Source/Helpers/QueryParametersHelper.cs index 2bdbd10..11b3e3c 100644 --- a/Packages/Federation.Sdk/Source/Helpers/QueryParametersHelper.cs +++ b/Packages/Federation.Sdk/Source/Helpers/QueryParametersHelper.cs @@ -13,7 +13,8 @@ public static string ToQueryString(TParameters instance) foreach (var property in properties) { var value = property.GetValue(instance); - if (value is null) continue; + if (value is null) + continue; string name = ToCamelCase(property.Name); string stringValue = value switch