mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2025-06-21 21:46:27 +02:00
3.0.267 merged
This commit is contained in:
parent
b6fb6394db
commit
67999ef4ae
171 changed files with 6473 additions and 1093 deletions
|
@ -2,6 +2,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using TINK.Model.Connector;
|
||||
using TINK.Model.Device;
|
||||
using TINK.Repository;
|
||||
using TINK.Repository.Request;
|
||||
|
@ -29,22 +30,21 @@ namespace TINK.Model.Services.CopriApi
|
|||
|
||||
/// <summary> Constructs copri provider object to connet to https using a cache objet. </summary>
|
||||
/// <param name="copriHost"></param>
|
||||
/// <param name="merchantId"></param>
|
||||
/// <param name="userAgent">Holds the name and version of the TINKApp.</param>
|
||||
/// <param name="appContextInfo">Provides app related info (app name and version, merchantid) to pass to COPRI.</param>
|
||||
/// <param name="sessionCookie">Cookie of user if a user is logged in, false otherwise.</param>
|
||||
/// <param name="expiresAfter">Timespan which holds value after which cache expires.</param>
|
||||
/// <param name="isExpired">Delegate which returns if cache conted is out of date or not.</param>
|
||||
public CopriProviderHttps(
|
||||
Uri copriHost,
|
||||
string merchantId,
|
||||
string userAgent,
|
||||
AppContextInfo appContextInfo,
|
||||
string sessionCookie = null,
|
||||
TimeSpan? expiresAfter = null,
|
||||
ICopriCache cacheServer = null,
|
||||
ICopriServer httpsServer = null)
|
||||
{
|
||||
CacheServer = cacheServer ?? new CopriCallsMonkeyStore(merchantId, sessionCookie, expiresAfter);
|
||||
HttpsServer = httpsServer ?? new CopriCallsHttps(copriHost, merchantId, userAgent, sessionCookie);
|
||||
HttpsServer = httpsServer ?? new CopriCallsHttps(copriHost, appContextInfo, sessionCookie);
|
||||
}
|
||||
|
||||
/// <summary>Gets bikes available.</summary>
|
||||
|
@ -59,22 +59,26 @@ namespace TINK.Model.Services.CopriApi
|
|||
{
|
||||
// No need to query because previous answer is not yet outdated.
|
||||
Log.ForContext<CopriProviderHttps>().Debug($"Returning bikes available from cache.");
|
||||
return new Result<BikesAvailableResponse>(typeof(CopriCallsMonkeyStore), await CacheServer.GetBikesAvailableAsync());
|
||||
var bikesAvailableResponse = await CacheServer.GetBikesAvailableAsync();
|
||||
return new Result<BikesAvailableResponse>(typeof(CopriCallsMonkeyStore), bikesAvailableResponse, bikesAvailableResponse.GetGeneralData());
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Log.ForContext<CopriProviderHttps>().Debug($"Querrying bikes available from copri.");
|
||||
var bikesAvailableResponse = await HttpsServer.GetBikesAvailableAsync();
|
||||
return new Result<BikesAvailableResponse>(
|
||||
typeof(CopriCallsHttps),
|
||||
(await HttpsServer.GetBikesAvailableAsync()).GetIsResponseOk("Abfrage der verfügbaren Räder fehlgeschlagen."));
|
||||
bikesAvailableResponse.GetIsResponseOk("Abfrage der verfügbaren Räder fehlgeschlagen."),
|
||||
bikesAvailableResponse.GetGeneralData());
|
||||
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
// Return response from cache.
|
||||
Log.ForContext<CopriProviderHttps>().Debug("An error occurred querrying bikes available. {Exception}.", exception);
|
||||
return new Result<BikesAvailableResponse>(typeof(CopriCallsMonkeyStore), await CacheServer.GetBikesAvailableAsync(), exception);
|
||||
var bikesAvailableResponse = await CacheServer.GetBikesAvailableAsync();
|
||||
return new Result<BikesAvailableResponse>(typeof(CopriCallsMonkeyStore), bikesAvailableResponse, bikesAvailableResponse.GetGeneralData(), exception);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -88,23 +92,27 @@ namespace TINK.Model.Services.CopriApi
|
|||
|| fromCache)
|
||||
{
|
||||
// No need to query because previous answer is not yet outdated.
|
||||
var bikesOccupiedResponse = await CacheServer.GetBikesOccupiedAsync();
|
||||
Log.ForContext<CopriProviderHttps>().Debug($"Returning bikes occupied from cache.");
|
||||
return new Result<BikesReservedOccupiedResponse>(typeof(CopriCallsMonkeyStore), await CacheServer.GetBikesOccupiedAsync());
|
||||
return new Result<BikesReservedOccupiedResponse>(typeof(CopriCallsMonkeyStore), bikesOccupiedResponse, bikesOccupiedResponse.GetGeneralData());
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Log.ForContext<CopriProviderHttps>().Debug($"Querrying bikes occupied from copri.");
|
||||
var bikesOccupiedResponse = await HttpsServer.GetBikesOccupiedAsync();
|
||||
return new Result<BikesReservedOccupiedResponse>(
|
||||
typeof(CopriCallsHttps),
|
||||
(await HttpsServer.GetBikesOccupiedAsync()).GetIsResponseOk("Abfrage der reservierten/ gebuchten Räder fehlgeschlagen."));
|
||||
bikesOccupiedResponse.GetIsResponseOk("Abfrage der reservierten/ gebuchten Räder fehlgeschlagen."),
|
||||
bikesOccupiedResponse.GetGeneralData());
|
||||
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
// Return response from cache.
|
||||
Log.ForContext<CopriProviderHttps>().Debug("An error occurred querrying bikes occupied. {Exception}.", exception);
|
||||
return new Result<BikesReservedOccupiedResponse>(typeof(CopriCallsMonkeyStore), await CacheServer.GetBikesOccupiedAsync(), exception);
|
||||
var bikesOccupiedResponse = await CacheServer.GetBikesOccupiedAsync();
|
||||
return new Result<BikesReservedOccupiedResponse>(typeof(CopriCallsMonkeyStore), bikesOccupiedResponse, bikesOccupiedResponse.GetGeneralData(), exception);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -118,7 +126,8 @@ namespace TINK.Model.Services.CopriApi
|
|||
{
|
||||
// No need to query because previous answer is not yet outdated.
|
||||
Log.ForContext<CopriProviderHttps>().Debug($"Returning stations from cache.");
|
||||
return new Result<StationsAvailableResponse>(typeof(CopriCallsMonkeyStore), await CacheServer.GetStationsAsync());
|
||||
var stationsResponse = await CacheServer.GetStationsAsync();
|
||||
return new Result<StationsAvailableResponse>(typeof(CopriCallsMonkeyStore), stationsResponse, stationsResponse.GetGeneralData());
|
||||
}
|
||||
|
||||
try
|
||||
|
@ -129,13 +138,15 @@ namespace TINK.Model.Services.CopriApi
|
|||
|
||||
return new Result<StationsAvailableResponse>(
|
||||
typeof(CopriCallsHttps),
|
||||
stations.GetIsResponseOk("Abfrage der Stationen fehlsgeschlagen."));
|
||||
stations.GetIsResponseOk("Abfrage der Stationen fehlsgeschlagen."),
|
||||
stations.GetGeneralData());
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
// Return response from cache.
|
||||
Log.ForContext<CopriProviderHttps>().Debug("An error occurred querrying stations. {Exception}.", exception);
|
||||
return new Result<StationsAvailableResponse>(typeof(CopriCallsMonkeyStore), await CacheServer.GetStationsAsync(), exception);
|
||||
var stationsResponse = await CacheServer.GetStationsAsync();
|
||||
return new Result<StationsAvailableResponse>(typeof(CopriCallsMonkeyStore), stationsResponse, stationsResponse.GetGeneralData(), exception);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -68,14 +68,6 @@ namespace TINK.Model.Services.CopriApi
|
|||
public Task<ResponseBase> DoSubmitMiniSurvey(IDictionary<string, string> answers)
|
||||
=> throw new NotSupportedException();
|
||||
|
||||
public Task<SubmitFeedbackResponse> DoSubmitFeedback(string bikeId, string messge, bool bIsBikeBroke, Uri operatorUri)
|
||||
=> throw new NotImplementedException();
|
||||
|
||||
/// <summary> Submits mini survey to copri server. </summary>
|
||||
/// <param name="answers">Collection of answers.</param>
|
||||
public Task<ResponseBase> DoSubmitMiniSurvey(IDictionary<string, string> answers)
|
||||
=> throw new NotSupportedException();
|
||||
|
||||
|
||||
public async Task<AuthorizationResponse> DoAuthorizationAsync(string p_strMailAddress, string p_strPassword, string p_strDeviceId)
|
||||
{
|
||||
|
|
22
TINKLib/Services/CopriApi/GeneralData.cs
Normal file
22
TINKLib/Services/CopriApi/GeneralData.cs
Normal file
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
|
||||
namespace TINK.Services.CopriApi
|
||||
{
|
||||
/// <summary> Holds general purpose data returned from COPRI. </summary>
|
||||
public class GeneralData
|
||||
{
|
||||
|
||||
public GeneralData(string merachantMessage = null, Version apiVersion = null)
|
||||
{
|
||||
MerchantMessage = merachantMessage ?? string.Empty;
|
||||
ApiVersion = apiVersion ?? new Version(0, 0);
|
||||
|
||||
}
|
||||
|
||||
/// <summary> Message to be shown to user.</summary>
|
||||
public string MerchantMessage { get; private set; }
|
||||
|
||||
/// <summary> Version of COPRI api. 0.0 if version is not set</summary>
|
||||
public Version ApiVersion { get; private set; }
|
||||
}
|
||||
}
|
|
@ -1,23 +1,38 @@
|
|||
using System;
|
||||
using TINK.Services.CopriApi;
|
||||
|
||||
namespace TINK.Model.Services.CopriApi
|
||||
{
|
||||
public class Result<T> where T : class
|
||||
{
|
||||
public Result(Type source, T response, System.Exception exception = null)
|
||||
/// <summary>
|
||||
/// Constructs a result object.
|
||||
/// </summary>
|
||||
/// <param name="source">Type of source (data provider).</param>
|
||||
/// <param name="response">Requested data (bikes, station).</param>
|
||||
/// <param name="generalData">General data (common to all respones).</param>
|
||||
public Result(
|
||||
Type source,
|
||||
T response,
|
||||
GeneralData generalData,
|
||||
Exception exception = null)
|
||||
{
|
||||
Source = source ?? throw new ArgumentException(nameof(source));
|
||||
Response = response ?? throw new ArgumentException(nameof(response));
|
||||
GeneralData = generalData ?? new GeneralData();
|
||||
Exception = exception;
|
||||
}
|
||||
|
||||
/// <summary> Holds the copri respsonse</summary>
|
||||
/// <summary> Holds the requested data (bikes, stations and bikes).</summary>
|
||||
public T Response { get; }
|
||||
|
||||
/// <summary> Specifies the souce of the copri response.</summary>
|
||||
/// <summary> Holds the general purpose data (common to all responses).</summary>
|
||||
public GeneralData GeneralData { get; }
|
||||
|
||||
/// <summary> Specifies the source (type of provider) of the copri response.</summary>
|
||||
public Type Source { get; }
|
||||
|
||||
/// <summary> Holds the exception if a communication error occurred.</summary>
|
||||
public System.Exception Exception { get; private set; }
|
||||
public Exception Exception { get; private set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ namespace TINK.Model.Services.CopriApi
|
|||
StationsAll = stations;
|
||||
Bikes = bikes;
|
||||
}
|
||||
|
||||
public StationDictionary StationsAll { get; }
|
||||
|
||||
public BikeCollection Bikes { get; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue