Skip to content

Commit 4943296

Browse files
committed
ICacheableResponse replace bool with enum
1 parent e93f4f1 commit 4943296

5 files changed

Lines changed: 33 additions & 32 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,11 @@ IsOffline is true when the last request had an `HttpRequestException`.
102102
If a response object implements ICacheableResponse, the FromCache property will be set to true if the result was retrieved from cache.
103103

104104
```c#
105+
using Drogecode.Blazor.ExpireStorage;
105106
public class YourObjectResponse : ICacheableResponse
106107
{
107108
...
108-
public bool FromCache { get; set; }
109+
public HandledBy HandledBy { get; set; }
109110
...
110111
}
111112
```

Src/Drogecode.Blazor.ExpireStorage/Drogecode.Blazor.ExpireStorage.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<RootNamespace>Drogecode.Blazor.ExpireStorage</RootNamespace>
8-
<Version>0.2.2</Version>
8+
<Version>0.2.3</Version>
99
<Title>Drogecode.Blazor.ExpireStorage</Title>
1010
<Authors>Taco Droogers</Authors>
1111
<PackageProjectUrl>https://github.com/Drogecode/Drogecode.Blazor.ExpireStorage</PackageProjectUrl>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Drogecode.Blazor.ExpireStorage;
2+
3+
public enum HandledBy
4+
{
5+
Function = 0,
6+
Cache = 1,
7+
Default = 2
8+
}

Src/Drogecode.Blazor.ExpireStorage/Interfaces/ICacheableResponse.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
public interface ICacheableResponse
44
{
5-
public bool FromCache { get; set; }
6-
}
5+
public HandledBy HandledBy { get; set; }
6+
}

Src/Drogecode.Blazor.ExpireStorage/Services/ExpireStorageService.cs

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ public ExpireStorageService(
6060
cacheKey += $"__{Postfix}";
6161
}
6262

63-
if (clt.IsCancellationRequested) return defaultResponse;
63+
if (clt.IsCancellationRequested)
64+
{
65+
return BuildResponse(defaultResponse, HandledBy.Default);
66+
}
6467
if (request.CachedAndReplace && !(IsOffline && request.AlwaysCacheWhenOffline))
6568
{
6669
var requestCopy = request;
@@ -70,29 +73,13 @@ public ExpireStorageService(
7073
if ((request.CachedAndReplace || request.OneCallPerSession || (IsOffline && request.AlwaysCacheWhenOffline)) && !request.IgnoreCache)
7174
{
7275
var sessionResult = await _sessionStorageExpireService.GetItemAsync<TRes>(cacheKey, clt);
73-
if (sessionResult is not null)
74-
{
75-
if (sessionResult is ICacheableResponse response)
76-
{
77-
response.FromCache = true;
78-
}
79-
80-
return sessionResult;
81-
}
76+
return BuildResponse(sessionResult, HandledBy.Cache);
8277
}
8378

8479
if ((request.CachedAndReplace || request.OneCallPerCache || (IsOffline && request.AlwaysCacheWhenOffline)) && !request.IgnoreCache)
8580
{
8681
var cacheResult = await _localStorageExpireService.GetItemAsync<TRes?>(cacheKey, clt);
87-
if (cacheResult is not null)
88-
{
89-
if (cacheResult is ICacheableResponse response)
90-
{
91-
response.FromCache = true;
92-
}
93-
94-
return cacheResult;
95-
}
82+
return BuildResponse(cacheResult, HandledBy.Cache);
9683
}
9784

9885
if (!request.CachedAndReplace)
@@ -115,19 +102,14 @@ public ExpireStorageService(
115102

116103
if (request.IgnoreCache)
117104
{
118-
return defaultResponse;
105+
return BuildResponse(defaultResponse, HandledBy.Default);
119106
}
120107

121108
try
122109
{
123110
var cacheResult = await _localStorageExpireService.GetItemAsync<TRes?>(cacheKey, clt);
124111
cacheResult ??= Activator.CreateInstance<TRes>();
125-
if (cacheResult is ICacheableResponse response)
126-
{
127-
response.FromCache = true;
128-
}
129-
130-
return cacheResult;
112+
return BuildResponse(cacheResult, HandledBy.Cache);
131113
}
132114
catch (HttpRequestException)
133115
{
@@ -156,16 +138,26 @@ public ExpireStorageService(
156138
ConsoleHelper.WriteLine(ex);
157139
}
158140

159-
return defaultResponse;
141+
return BuildResponse(defaultResponse, HandledBy.Default);
160142
}
161143

162-
private async Task<TRes> RunSaveAndReturn<TRes>(string cacheKey, Func<Task<TRes>> function, CachedRequest request, CancellationToken clt)
144+
private async Task<TRes?> RunSaveAndReturn<TRes>(string cacheKey, Func<Task<TRes>> function, CachedRequest request, CancellationToken clt)
163145
{
164146
var result = await function();
165147
await _localStorageExpireService.SetItemAsync(cacheKey, result, request.ExpireLocalStorage, clt);
166148
if (request.OneCallPerSession)
167149
await _sessionStorageExpireService.SetItemAsync(cacheKey, result, request.ExpireSession, clt);
168150
IsOffline = false;
151+
return BuildResponse(result, HandledBy.Function);
152+
}
153+
154+
private static TRes? BuildResponse<TRes>(TRes? result, HandledBy handledBy)
155+
{
156+
if (result is null) return result;
157+
if (result is ICacheableResponse response)
158+
{
159+
response.HandledBy = handledBy;
160+
}
169161
return result;
170162
}
171163
}

0 commit comments

Comments
 (0)