From e457adaf94aa02fda4fe8f65b71105088b933b5d Mon Sep 17 00:00:00 2001 From: Yuriy Durov Date: Mon, 11 Sep 2023 17:30:32 +0400 Subject: [PATCH] Make Key object nullable in GetIdEndpoint --- ...CommunicatorRestEntityBuilderExtensions.cs | 20 +++++++++++++++++-- .../Models/CommunicatorRestEntityContext.cs | 8 ++++---- .../Models/CommunicatorRestEntityOptions.cs | 8 ++++---- .../Interfaces/ICommunicationContext.cs | 4 ++-- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/BitzArt.Communicator.REST/Extensions/ICommunicatorRestEntityBuilderExtensions.cs b/src/BitzArt.Communicator.REST/Extensions/ICommunicatorRestEntityBuilderExtensions.cs index 5401ba1..f2d7a1e 100644 --- a/src/BitzArt.Communicator.REST/Extensions/ICommunicatorRestEntityBuilderExtensions.cs +++ b/src/BitzArt.Communicator.REST/Extensions/ICommunicatorRestEntityBuilderExtensions.cs @@ -18,6 +18,22 @@ public static ICommunicatorRestEntityBuilder WithEndpoint WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, string endpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key) => endpoint; + + return builder; + } + + public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, string endpoint) + where TEntity : class + { + builder.EntityOptions.GetIdEndpointAction = (key) => endpoint; + + return builder; + } + public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) where TEntity : class { @@ -34,7 +50,7 @@ public static ICommunicatorRestEntityBuilder WithIdEndpoint WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) + public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) where TEntity : class { builder.EntityOptions.GetIdEndpointAction = getEndpoint; @@ -42,7 +58,7 @@ public static ICommunicatorRestEntityBuilder WithIdEndpoint(th return builder; } - public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) + public static ICommunicatorRestEntityBuilder WithIdEndpoint(this ICommunicatorRestEntityBuilder builder, Func getEndpoint) where TEntity : class { builder.EntityOptions.GetIdEndpointAction = getEndpoint; diff --git a/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityContext.cs b/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityContext.cs index c897aba..e9f7081 100644 --- a/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityContext.cs +++ b/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityContext.cs @@ -99,13 +99,13 @@ public virtual async Task> GetPageAsync(PageRequest pageRequ return result; } - public virtual async Task GetAsync(object id) + public virtual async Task GetAsync(object? id) { if (EntityOptions.GetIdEndpointAction is null) throw new KeyNotFoundException(); var idEndpoint = EntityOptions.GetIdEndpointAction(id); var route = GetFullPath(idEndpoint); - _logger.LogInformation("Get {type}[{id}]: {route}", typeof(TEntity).Name, id.ToString(), route); + _logger.LogInformation("Get {type}[{id}]: {route}", typeof(TEntity).Name, id is not null ? id.ToString() : "_", route); var message = new HttpRequestMessage(HttpMethod.Get, route); var result = await HandleRequestAsync(message); @@ -132,9 +132,9 @@ public CommunicatorRestEntityContext(HttpClient httpClient, CommunicatorRestServ EntityOptions = entityOptions; } - public override Task GetAsync(object id) => GetAsync((TKey)id); + public override Task GetAsync(object? id) => GetAsync((TKey?)id); - public async Task GetAsync(TKey id) + public async Task GetAsync(TKey? id) { string idEndpoint; diff --git a/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityOptions.cs b/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityOptions.cs index c94146f..1696d78 100644 --- a/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityOptions.cs +++ b/src/BitzArt.Communicator.REST/Models/CommunicatorRestEntityOptions.cs @@ -4,8 +4,8 @@ public class CommunicatorRestEntityOptions where TEntity : class { public string? Endpoint { get; set; } - protected Func? _getIdEndpointAction; - public Func? GetIdEndpointAction + protected Func? _getIdEndpointAction; + public Func? GetIdEndpointAction { get => _getIdEndpointAction; set => _getIdEndpointAction = value; @@ -20,7 +20,7 @@ public CommunicatorRestEntityOptions() public class CommunicatorRestEntityOptions : CommunicatorRestEntityOptions where TEntity : class { - public new Func? GetIdEndpointAction + public new Func? GetIdEndpointAction { get { @@ -34,7 +34,7 @@ public class CommunicatorRestEntityOptions : CommunicatorRestEnti _getIdEndpointAction = null; return; } - _getIdEndpointAction = (key) => value!((TKey)key); + _getIdEndpointAction = (key) => value!((TKey?)key); } } diff --git a/src/BitzArt.Communicator/Interfaces/ICommunicationContext.cs b/src/BitzArt.Communicator/Interfaces/ICommunicationContext.cs index 80bb5f1..3bf8f8b 100644 --- a/src/BitzArt.Communicator/Interfaces/ICommunicationContext.cs +++ b/src/BitzArt.Communicator/Interfaces/ICommunicationContext.cs @@ -14,11 +14,11 @@ public interface ICommunicationContext public Task> GetAllAsync(); public Task> GetPageAsync(int offset, int limit); public Task> GetPageAsync(PageRequest pageRequest); - public Task GetAsync(object id); + public Task GetAsync(object? id); } public interface ICommunicationContext : ICommunicationContext where TEntity : class { - public Task GetAsync(TKey id); + public Task GetAsync(TKey? id); } \ No newline at end of file