mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-11-15 14:46:39 +01:00
165 lines
7.1 KiB
C#
165 lines
7.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Net;
|
|
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
|
using TINK.Model.Connector;
|
|
using TINK.Model.Device;
|
|
using TINK.Repository.Exception;
|
|
|
|
namespace TINK.Repository.Request
|
|
{
|
|
/// <summary> Creates requests if no user is logged in.</summary>
|
|
public class RequestBuilder : IRequestBuilder
|
|
{
|
|
/// <summary> Constructs a object for building requests. </summary>
|
|
/// <param name="merchantId">Holds the id denoting the merchant.</param>
|
|
/// <param name="uiIsoLangugageName">Two letter ISO language name.</param>
|
|
/// <param name="smartDevice">Holds info about smart device.</param>
|
|
public RequestBuilder(
|
|
string merchantId,
|
|
string uiIsoLangugageName,
|
|
ISmartDevice smartDevice = null)
|
|
{
|
|
MerchantId = !string.IsNullOrEmpty(merchantId)
|
|
? merchantId
|
|
: throw new ArgumentException("Merchant id must not be null.", nameof(merchantId));
|
|
|
|
UiIsoLanguageNameParameter = RequestBuilderHelper.GetLanguageParameter(WebUtility.UrlEncode(uiIsoLangugageName));
|
|
|
|
AuthCookieParameter = $"&authcookie={WebUtility.UrlEncode(MerchantId)}";
|
|
|
|
SmartDevice = smartDevice;
|
|
}
|
|
|
|
/// <summary>Holds the id denoting the merchant.</summary>
|
|
public string MerchantId { get; }
|
|
|
|
/// <summary> Holds the session cookie if a user is logged in. </summary>
|
|
public string SessionCookie => string.Empty;
|
|
|
|
/// <summary> Holds the current ui two letter ISO language name. </summary>
|
|
private string UiIsoLanguageNameParameter { get; }
|
|
|
|
/// <summary> Auth cookie parameter. </summary>
|
|
private string AuthCookieParameter { get; }
|
|
|
|
/// <summary>Holds info about smart device.</summary>
|
|
private ISmartDevice SmartDevice { get; }
|
|
|
|
/// <summary> Gets request to log user in. </summary>
|
|
/// <param name="mailAddress">Mailaddress of user to log in.</param>
|
|
/// <param name="password">Password to log in.</param>
|
|
/// <param name="deviceId">Id specifying user and hardware.</param>
|
|
/// <remarks>Response which holds auth cookie <see cref="ResponseBase.authcookie"/></remarks>
|
|
public string DoAuthorization(
|
|
string mailAddress,
|
|
string password,
|
|
string deviceId)
|
|
=> "request=authorization" +
|
|
$"&merchant_id={MerchantId}" +
|
|
$"&user_id={WebUtility.UrlEncode(mailAddress)}" +
|
|
$"&user_pw={WebUtility.UrlEncode(password)}" +
|
|
$"&hw_id={WebUtility.UrlEncode(deviceId)}" +
|
|
UiIsoLanguageNameParameter;
|
|
|
|
/// <summary> Logs user out. </summary>
|
|
public string DoAuthout()
|
|
=> throw new CallNotRequiredException();
|
|
|
|
/// <summary>Gets bikes available.</summary>
|
|
/// <param name="stationId"> Id of station which is used for filtering bikes. Null if no filtering should be applied.</param>
|
|
/// <param name="bikeId"> Id of bike to get.</param>
|
|
/// <returns>Request to query list of bikes available.</returns>
|
|
public string GetBikesAvailable(string stationId = null, string bikeId = null)
|
|
=> "request=bikes_available&system=all" +
|
|
stationId.GetStationId() +
|
|
bikeId.GetBikeId() +
|
|
AuthCookieParameter +
|
|
UiIsoLanguageNameParameter;
|
|
|
|
/// <summary> Get list of stations from file. </summary>
|
|
/// <returns>Request to query list of station.</returns>
|
|
public string GetStations()
|
|
=> "request=stations_available" +
|
|
AuthCookieParameter +
|
|
SmartDevice.GetSmartDeviceParameters() +
|
|
UiIsoLanguageNameParameter;
|
|
|
|
/// <summary> Gets a list of bikes reserved/ booked by active user from Copri.</summary>
|
|
/// <returns>Request to query list of bikes occupied.</returns>
|
|
public string GetBikesOccupied()
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Gets booking request response. </summary>
|
|
/// <param name="bikeId">Id of the bike to book.</param>
|
|
/// <returns>Response on booking request.</returns>
|
|
public string DoReserve(string bikeId)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Gets cancel booking request response. </summary>
|
|
/// <param name="p_iBikeId">Id of the bike to book.</param>
|
|
/// <returns>Response on cancel booking request.</returns>
|
|
public string DoCancelReservation(string p_iBikeId)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Request to calculate authentication keys. </summary>
|
|
/// <param name="bikeId">Id of the bike to get keys for.</param>
|
|
/// <returns>Response on request.</returns>
|
|
public string CalculateAuthParameters(string bikeId)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Gets the request for notifying about start of returning sequence. </summary>
|
|
/// <remarks> Operator specific call.</remarks>
|
|
/// <param name="bikeId">Id of the bike to return.</param>
|
|
/// <returns>Request to notify about start of returning sequence.</returns>
|
|
public string StartReturningBike(string bikeId)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary>
|
|
/// Not supported if user is not logged in. Lock state is only updated after open/ close which is only possible if user is logged in.
|
|
/// </summary>
|
|
/// <exception cref="NotSupportedException"></exception>
|
|
public string UpdateLockingState(string bikeId, lock_state state, LocationDto geolocation, double batteryPercentage, IVersionInfo versionInfo)
|
|
=> throw new NotSupportedException();
|
|
|
|
public string DoBook(string bikeId, Guid guid, double batteryPercentage, LockingAction? nextAction = null)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Gets the request to book and start opening the bike (synonym: booking == renting == mieten). </summary>
|
|
/// <param name="bikeId">Id of the bike to book.</param>
|
|
/// <returns>Request to booking bike.</returns>
|
|
public string BookAvailableAndStartOpening(string bikeId)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Gets the request to book and start opening the bike (synonym: booking == renting == mieten). </summary>
|
|
/// <param name="bikeId">Id of the bike to book.</param>
|
|
/// <returns>Request to booking bike.</returns>
|
|
public string BookReservedAndStartOpening(string bikeId)
|
|
=> throw new NotSupportedException();
|
|
|
|
public string DoReturn(string bikeId, LocationDto geolocation)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Returns a bike and starts closing. </summary>
|
|
/// <param name="bikeId">Id of the bike to return.</param>
|
|
/// <param name="smartDevice">Provides info about hard and software.</param>
|
|
/// <returns>Response to send to copri.</returns>
|
|
public string ReturnAndStartClosing(string bikeId)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary> Gets submit feedback request. </summary>
|
|
/// <param name="bikeId">Id of the bike to which the feedback is related to.</param>
|
|
/// <param name="message">General purpose message or error description.</param>
|
|
/// <param name="isBikeBroken">True if bike is broken.</param>
|
|
/// <returns>Submit feedback request.</returns>
|
|
public string DoSubmitFeedback(string bikeId, int? currentChargeBars, string message = null, bool isBikeBroken = false)
|
|
=> throw new NotSupportedException();
|
|
|
|
/// <summary>
|
|
/// Gets request for submitting mini survey to copri server.
|
|
/// </summary>
|
|
/// <param name="answers">Collection of answers.</param>
|
|
public string DoSubmitMiniSurvey(IDictionary<string, string> answers) =>
|
|
throw new NotSupportedException();
|
|
}
|
|
}
|