Skip to content

Commit 01447ae

Browse files
Merge pull request #253 from AdrianJSClark/239-support-season-list-and-season-schedule-endpoints
Support Season List and Season Schedule Endpoints
2 parents 0f0703f + 7f742cb commit 01447ae

File tree

10 files changed

+673
-15
lines changed

10 files changed

+673
-15
lines changed

src/Aydsko.iRacingData/ApiClient.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public interface IApiClient
1616
{
1717
Task<DataResponse<(THeader, TChunkData[])>> CreateResponseFromChunksAsync<THeader, TChunkData>(Uri uri, bool isViaInfoLink, JsonTypeInfo<THeader> jsonTypeInfo, Func<THeader, IChunkInfo> getChunkDownloadDetail, JsonTypeInfo<TChunkData[]> chunkArrayTypeInfo, CancellationToken cancellationToken = default);
1818
Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<TIntermediate, TData>(Uri intermediateUri, JsonTypeInfo<TIntermediate> intermediateJsonTypeInfo, Func<TIntermediate, (Uri DataLink, DateTimeOffset? Expires)> getDataLinkAndExpiry, JsonTypeInfo<TData> jsonTypeInfo, CancellationToken cancellationToken);
19+
Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<TIntermediate, TDataWrapper, TData>(Uri intermediateUri, JsonTypeInfo<TIntermediate> intermediateJsonTypeInfo, Func<TIntermediate, (Uri DataLink, DateTimeOffset? Expires)> getDataLinkAndExpiry, JsonTypeInfo<TDataWrapper> jsonTypeInfo, Func<TDataWrapper, TData> unwrapData, CancellationToken cancellationToken);
20+
21+
//Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<TIntermediate, TData>(Uri intermediateUri, JsonTypeInfo<TIntermediate> intermediateJsonTypeInfo, Func<TIntermediate, (Uri DataLink, DateTimeOffset? Expires)> getDataLinkAndExpiry, JsonTypeInfo<TData> jsonTypeInfo, CancellationToken cancellationToken);
1922
Task<DataResponse<TData>> GetDataResponseAsync<TData>(Uri uri, JsonTypeInfo<TData> jsonTypeInfo, CancellationToken cancellationToken) where TData : class;
2023
Task<HttpResponseMessage> GetUnauthenticatedRawResponseAsync(Uri uri, CancellationToken cancellationToken = default);
2124
Task<TData> GetUnauthenticatedResponseAsync<TData>(Uri uri, JsonTypeInfo<TData> jsonTypeInfo, CancellationToken cancellationToken) where TData : class;
@@ -206,11 +209,26 @@ public async Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<
206209
JsonTypeInfo<TData> jsonTypeInfo,
207210
CancellationToken cancellationToken)
208211
{
212+
return await CreateResponseViaIntermediateResultAsync(intermediateUri, intermediateJsonTypeInfo, getDataLinkAndExpiry, jsonTypeInfo, data => data, cancellationToken).ConfigureAwait(false);
213+
}
214+
215+
public async Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<TIntermediate, TDataWrapper, TData>(Uri intermediateUri,
216+
JsonTypeInfo<TIntermediate> intermediateJsonTypeInfo,
217+
Func<TIntermediate, (Uri DataLink, DateTimeOffset? Expires)> getDataLinkAndExpiry,
218+
JsonTypeInfo<TDataWrapper> jsonTypeInfo,
219+
Func<TDataWrapper, TData> unwrapData,
220+
CancellationToken cancellationToken)
221+
{
209222
#pragma warning disable CA1510 // The alternative here is not available in .NET Standard 2.0
210223
if (getDataLinkAndExpiry is null)
211224
{
212225
throw new ArgumentNullException(nameof(getDataLinkAndExpiry));
213226
}
227+
228+
if (unwrapData is null)
229+
{
230+
throw new ArgumentNullException(nameof(unwrapData));
231+
}
214232
#pragma warning restore CA1510
215233

216234
var attempts = 0;
@@ -237,9 +255,10 @@ public async Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<
237255

238256
_ = response.EnsureSuccessStatusCode();
239257

240-
var data = await response.Content.ReadFromJsonAsync(jsonTypeInfo, cancellationToken)
241-
.ConfigureAwait(false)
242-
?? throw new iRacingDataClientException("Data not found.");
258+
var wrappedData = await response.Content.ReadFromJsonAsync(jsonTypeInfo, cancellationToken)
259+
.ConfigureAwait(false)
260+
?? throw new iRacingDataClientException("Data not found.");
261+
var data = unwrapData(wrappedData);
243262

244263
_ = Activity.Current?.AddEvent(new ActivityEvent("Data Retrieved"));
245264

src/Aydsko.iRacingData/CachingApiClient.cs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,33 @@ internal sealed class CachingApiClient(IAuthenticatingHttpClient httpClient,
4949
private record CreateResponseFromChunksKey(Uri Uri, bool IsViaInfoLink);
5050

5151
public async Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<TIntermediate, TData>(Uri intermediateUri,
52-
JsonTypeInfo<TIntermediate> intermediateJsonTypeInfo,
53-
Func<TIntermediate, (Uri DataLink, DateTimeOffset? Expires)> getDataLinkAndExpiry,
54-
JsonTypeInfo<TData> jsonTypeInfo,
55-
CancellationToken cancellationToken)
52+
JsonTypeInfo<TIntermediate> intermediateJsonTypeInfo,
53+
Func<TIntermediate, (Uri DataLink, DateTimeOffset? Expires)> getDataLinkAndExpiry,
54+
JsonTypeInfo<TData> jsonTypeInfo,
55+
CancellationToken cancellationToken)
5656
{
57+
return await CreateResponseViaIntermediateResultAsync(intermediateUri, intermediateJsonTypeInfo, getDataLinkAndExpiry, jsonTypeInfo, data => data, cancellationToken).ConfigureAwait(false);
58+
}
59+
60+
public async Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<TIntermediate, TDataWrapper, TData>(Uri intermediateUri,
61+
JsonTypeInfo<TIntermediate> intermediateJsonTypeInfo,
62+
Func<TIntermediate, (Uri DataLink, DateTimeOffset? Expires)> getDataLinkAndExpiry,
63+
JsonTypeInfo<TDataWrapper> jsonTypeInfo,
64+
Func<TDataWrapper, TData> unwrapData,
65+
CancellationToken cancellationToken)
66+
{
67+
#pragma warning disable CA1510 // The alternative here is not available in .NET Standard 2.0
68+
if (getDataLinkAndExpiry is null)
69+
{
70+
throw new ArgumentNullException(nameof(getDataLinkAndExpiry));
71+
}
72+
73+
if (unwrapData is null)
74+
{
75+
throw new ArgumentNullException(nameof(unwrapData));
76+
}
77+
#pragma warning restore CA1510
78+
5779
var isHit = true;
5880

5981
var result = await memoryCache.GetOrCreateAsync(intermediateUri, async ce =>
@@ -64,6 +86,7 @@ public async Task<DataResponse<TData>> CreateResponseViaIntermediateResultAsync<
6486
intermediateJsonTypeInfo,
6587
getDataLinkAndExpiry,
6688
jsonTypeInfo,
89+
unwrapData,
6790
cancellationToken)
6891
.ConfigureAwait(false);
6992

src/Aydsko.iRacingData/CompatibilitySuppressions.xml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,20 @@
364364
<Right>lib/net8.0/Aydsko.iRacingData.dll</Right>
365365
<IsBaselineSuppression>true</IsBaselineSuppression>
366366
</Suppression>
367+
<Suppression>
368+
<DiagnosticId>CP0002</DiagnosticId>
369+
<Target>M:Aydsko.iRacingData.Series.SeasonSeries.get_CrossLicense</Target>
370+
<Left>lib/net8.0/Aydsko.iRacingData.dll</Left>
371+
<Right>lib/net8.0/Aydsko.iRacingData.dll</Right>
372+
<IsBaselineSuppression>true</IsBaselineSuppression>
373+
</Suppression>
374+
<Suppression>
375+
<DiagnosticId>CP0002</DiagnosticId>
376+
<Target>M:Aydsko.iRacingData.Series.SeasonSeries.set_CrossLicense(System.Boolean)</Target>
377+
<Left>lib/net8.0/Aydsko.iRacingData.dll</Left>
378+
<Right>lib/net8.0/Aydsko.iRacingData.dll</Right>
379+
<IsBaselineSuppression>true</IsBaselineSuppression>
380+
</Suppression>
367381
<Suppression>
368382
<DiagnosticId>CP0002</DiagnosticId>
369383
<Target>M:Aydsko.iRacingData.ServicesExtensions.AddIRacingDataApi(Microsoft.Extensions.DependencyInjection.IServiceCollection)</Target>
@@ -560,6 +574,12 @@
560574
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
561575
<Right>lib/net8.0/Aydsko.iRacingData.dll</Right>
562576
</Suppression>
577+
<Suppression>
578+
<DiagnosticId>CP0002</DiagnosticId>
579+
<Target>M:Aydsko.iRacingData.Series.SeasonScheduleItem.get_StartDate</Target>
580+
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
581+
<Right>lib/net8.0/Aydsko.iRacingData.dll</Right>
582+
</Suppression>
563583
<Suppression>
564584
<DiagnosticId>CP0002</DiagnosticId>
565585
<Target>M:Aydsko.iRacingData.Stats.WorldRecordEntry.get_PracticeDate</Target>
@@ -923,6 +943,20 @@
923943
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
924944
<IsBaselineSuppression>true</IsBaselineSuppression>
925945
</Suppression>
946+
<Suppression>
947+
<DiagnosticId>CP0002</DiagnosticId>
948+
<Target>M:Aydsko.iRacingData.Series.SeasonSeries.get_CrossLicense</Target>
949+
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
950+
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
951+
<IsBaselineSuppression>true</IsBaselineSuppression>
952+
</Suppression>
953+
<Suppression>
954+
<DiagnosticId>CP0002</DiagnosticId>
955+
<Target>M:Aydsko.iRacingData.Series.SeasonSeries.set_CrossLicense(System.Boolean)</Target>
956+
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
957+
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
958+
<IsBaselineSuppression>true</IsBaselineSuppression>
959+
</Suppression>
926960
<Suppression>
927961
<DiagnosticId>CP0002</DiagnosticId>
928962
<Target>M:Aydsko.iRacingData.ServicesExtensions.AddIRacingDataApi(Microsoft.Extensions.DependencyInjection.IServiceCollection)</Target>
@@ -1098,13 +1132,41 @@
10981132
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
10991133
<IsBaselineSuppression>true</IsBaselineSuppression>
11001134
</Suppression>
1135+
<Suppression>
1136+
<DiagnosticId>CP0006</DiagnosticId>
1137+
<Target>M:Aydsko.iRacingData.IDataClient.GetSeasonListAsync(System.Boolean,System.Threading.CancellationToken)</Target>
1138+
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
1139+
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
1140+
<IsBaselineSuppression>true</IsBaselineSuppression>
1141+
</Suppression>
1142+
<Suppression>
1143+
<DiagnosticId>CP0006</DiagnosticId>
1144+
<Target>M:Aydsko.iRacingData.IDataClient.GetSeasonListAsync(System.Int32,System.Int32,System.Boolean,System.Threading.CancellationToken)</Target>
1145+
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
1146+
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
1147+
<IsBaselineSuppression>true</IsBaselineSuppression>
1148+
</Suppression>
11011149
<Suppression>
11021150
<DiagnosticId>CP0006</DiagnosticId>
11031151
<Target>M:Aydsko.iRacingData.IDataClient.GetSeasonQualifyResultsAsync(System.Int32,System.Int32,System.Nullable{System.Int32},System.Nullable{System.Int32},System.Threading.CancellationToken)</Target>
11041152
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
11051153
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
11061154
<IsBaselineSuppression>true</IsBaselineSuppression>
11071155
</Suppression>
1156+
<Suppression>
1157+
<DiagnosticId>CP0006</DiagnosticId>
1158+
<Target>M:Aydsko.iRacingData.IDataClient.GetSeasonsAsync(System.Int32,System.Int32,System.Boolean,System.Threading.CancellationToken)</Target>
1159+
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
1160+
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
1161+
<IsBaselineSuppression>true</IsBaselineSuppression>
1162+
</Suppression>
1163+
<Suppression>
1164+
<DiagnosticId>CP0006</DiagnosticId>
1165+
<Target>M:Aydsko.iRacingData.IDataClient.GetSeasonScheduleAsync(System.Int32,System.Threading.CancellationToken)</Target>
1166+
<Left>lib/netstandard2.0/Aydsko.iRacingData.dll</Left>
1167+
<Right>lib/netstandard2.0/Aydsko.iRacingData.dll</Right>
1168+
<IsBaselineSuppression>true</IsBaselineSuppression>
1169+
</Suppression>
11081170
<Suppression>
11091171
<DiagnosticId>CP0006</DiagnosticId>
11101172
<Target>M:Aydsko.iRacingData.IDataClient.GetSeasonSuperSessionStandingsAsync(System.Int32,System.Int32,System.Nullable{System.Int32},System.Nullable{System.Int32},System.Threading.CancellationToken)</Target>

src/Aydsko.iRacingData/Converters/DateTimeConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// © 2023-2025 Adrian Clark
1+
// © Adrian Clark - Aydsko.iRacingData
22
// This file is licensed to you under the MIT license.
33

44
using System.Globalization;

0 commit comments

Comments
 (0)