2021-05-13 20:03:07 +02:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using TINK.Repository.Exception;
|
2021-06-26 20:57:55 +02:00
|
|
|
|
using TINK.MultilingualResources;
|
2021-05-13 20:03:07 +02:00
|
|
|
|
|
2021-06-26 20:57:55 +02:00
|
|
|
|
namespace TINK.Repository.Response
|
2021-05-13 20:03:07 +02:00
|
|
|
|
{
|
|
|
|
|
public static class ResponseHelper
|
|
|
|
|
{
|
|
|
|
|
public const string RESPONSE_OK = "OK";
|
|
|
|
|
|
2022-04-10 17:38:34 +02:00
|
|
|
|
/// <summary> Holds the description of the action return bike. </summary>
|
|
|
|
|
public const string RESPONSE_AUTHCOOKIE_EXPRIED = "Failure 1001:";
|
|
|
|
|
|
2021-05-13 20:03:07 +02:00
|
|
|
|
/// <summary> Holds the description of the action logout. </summary>
|
|
|
|
|
public const string BIKES_LOGOUT_ACTIONTEXT = "Abmeldung fehlgeschlagen.";
|
|
|
|
|
|
|
|
|
|
/// <summary> Holds the description of the action get stations available. </summary>
|
|
|
|
|
public const string STATIONS_AVAILABLE_ACTIONTEXT = "Abfrage der verfügbaren Stationen fehlgeschlagen.";
|
|
|
|
|
|
|
|
|
|
/// <summary> Holds the description of the action get bikes available. </summary>
|
|
|
|
|
public const string BIKES_AVAILABLE_ACTIONTEXT = "Abfrage der verfügbaren Fahrräder fehlgeschlagen.";
|
|
|
|
|
|
|
|
|
|
/// <summary> Holds the description of the action get bikes occupied. </summary>
|
|
|
|
|
public const string BIKES_OCCUPIED_ACTIONTEXT = "Abfrage der reservierten/ gebuchten Fahrräder fehlgeschlagen.";
|
|
|
|
|
|
|
|
|
|
/// <summary> Holds the description of the action cancel reservation. </summary>
|
|
|
|
|
public const string BIKES_CANCELREQUEST_ACTIONTEXT = "Aufheben der Reservierung fehlgeschlagen.";
|
|
|
|
|
|
|
|
|
|
/// <summary> Holds the description of the action return bike. </summary>
|
|
|
|
|
public const string BIKES_RETURNBIKE_ACTIONTEXT = "Rückgabe des Rads fehlgeschlagen.";
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Checks if log in response is ok.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="response">Response to check whether it is valid.</param>
|
|
|
|
|
/// <param name="mail">Mail addess used to create details error message in case log in response is invalid.</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static AuthorizationResponse GetIsResponseOk(this AuthorizationResponse response, string mail)
|
|
|
|
|
{
|
|
|
|
|
if (response == null)
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidResponseException<AuthorizationResponse>("Anmeldung fehlgeschlagen.", null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (response.response_state.ToUpper() == InvalidAuthorizationResponseException.AUTH_FAILURE_STATUS_MESSAGE_UPPERCASE)
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidAuthorizationResponseException(mail, response);
|
|
|
|
|
}
|
|
|
|
|
else if (!response.response_state.Trim().ToUpper().StartsWith(RESPONSE_OK))
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidResponseException<AuthorizationResponse>($"Anmeldung {mail} fehlgeschlagen.\r\nServer Antwort: {response.response_text}", response);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Checks if log out response is ok.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="p_oResponse">Response to check whether it is valid.</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static AuthorizationoutResponse GetIsResponseOk(this AuthorizationoutResponse p_oResponse)
|
|
|
|
|
{
|
|
|
|
|
if (AuthcookieNotDefinedException.IsAuthcookieNotDefined(p_oResponse, BIKES_LOGOUT_ACTIONTEXT, out AuthcookieNotDefinedException exception))
|
|
|
|
|
{
|
|
|
|
|
throw exception;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GetIsResponseOk(p_oResponse, BIKES_LOGOUT_ACTIONTEXT);
|
|
|
|
|
|
|
|
|
|
if (p_oResponse.authcookie != "1")
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidResponseException<AuthorizationoutResponse>(
|
|
|
|
|
BIKES_LOGOUT_ACTIONTEXT,
|
|
|
|
|
p_oResponse);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return p_oResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>Gets if a call to reserve bike succeeded or not by checking a booking response.</summary>
|
|
|
|
|
/// <param name="bikeId">Id of bike which should be booked.</param>
|
|
|
|
|
/// <param name="sessionCookie">Sessiong cookie of logged in user.</param>
|
|
|
|
|
/// <param name="bookingResponse">Response to check.</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static BikeInfoReservedOrBooked GetIsReserveResponseOk(
|
|
|
|
|
this ReservationBookingResponse bookingResponse,
|
2021-06-26 20:57:55 +02:00
|
|
|
|
string bikeId)
|
2021-05-13 20:03:07 +02:00
|
|
|
|
{
|
|
|
|
|
GetIsResponseOk(bookingResponse, string.Format(AppResources.ExceptionTextReservationBikeFailedGeneral, bikeId));
|
|
|
|
|
|
|
|
|
|
if (BookingDeclinedException.IsBookingDeclined(bookingResponse.response_state, out BookingDeclinedException exception))
|
|
|
|
|
{
|
|
|
|
|
throw exception;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get bike which has to be booked.
|
|
|
|
|
var bikeInfoRequestedOccupied = bookingResponse?.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
|
|
|
|
if (bikeInfoRequestedOccupied == null)
|
|
|
|
|
{
|
|
|
|
|
throw new System.Exception(string.Format(
|
|
|
|
|
AppResources.ExceptionTextReservationBikeFailedUnavailalbe,
|
|
|
|
|
bikeId,
|
|
|
|
|
!string.IsNullOrWhiteSpace(bookingResponse?.response_text) ? $"\r\n{bookingResponse.response_text}" : string.Empty));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bikeInfoRequestedOccupied;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary> Gets if a booking call succeeded or not by checking a booking response. </summary>
|
|
|
|
|
/// <param name="bikeId">Id of bike which should be booked.</param>
|
|
|
|
|
/// <param name="bookingResponse">Response to check.</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static BikeInfoReservedOrBooked GetIsBookingResponseOk(
|
|
|
|
|
this ReservationBookingResponse bookingResponse,
|
2021-06-26 20:57:55 +02:00
|
|
|
|
string bikeId)
|
2021-05-13 20:03:07 +02:00
|
|
|
|
{
|
|
|
|
|
GetIsResponseOk(bookingResponse, string.Format(AppResources.ExceptionTextRentingBikeFailedGeneral, bikeId));
|
|
|
|
|
|
|
|
|
|
// Get bike which has to be booked.
|
|
|
|
|
var bikeInfoRequestedOccupied = bookingResponse?.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
|
|
|
|
if (bikeInfoRequestedOccupied == null)
|
|
|
|
|
{
|
|
|
|
|
throw new System.Exception(string.Format(
|
|
|
|
|
AppResources.ExceptionTextRentingBikeFailedUnavailalbe,
|
|
|
|
|
bikeId,
|
|
|
|
|
!string.IsNullOrWhiteSpace(bookingResponse?.response_text) ? $"\r\n{bookingResponse.response_text}" : string.Empty));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bikeInfoRequestedOccupied;
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-10 17:38:34 +02:00
|
|
|
|
/// <summary> Gets if request is ok.</summary>
|
|
|
|
|
/// <param name="response">Response to verify.</param>
|
|
|
|
|
/// <param name="textOfAction">Text describing request which is shown if validation fails.</param>
|
|
|
|
|
/// <returns>Verified response.</returns>
|
|
|
|
|
public static BikesReservedOccupiedResponse GetIsResponseOk(this BikesReservedOccupiedResponse response, string textOfAction)
|
|
|
|
|
{
|
|
|
|
|
if (response == null || response.response_state == null)
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidResponseException<BikesReservedOccupiedResponse>(textOfAction, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (AuthcookieNotDefinedException.IsAuthcookieNotDefined(response, textOfAction, out AuthcookieNotDefinedException exception))
|
|
|
|
|
{
|
|
|
|
|
throw exception;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (response.response_state.Trim().ToUpper().StartsWith(RESPONSE_AUTHCOOKIE_EXPRIED.ToUpper()))
|
|
|
|
|
{
|
|
|
|
|
throw new AuthcookieNotDefinedException(
|
|
|
|
|
$"{textOfAction}\r\n{AppResources.ExceptionTextSessionExpired}",
|
|
|
|
|
response);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GetIsResponseOk((ResponseBase)response, textOfAction);
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-13 20:03:07 +02:00
|
|
|
|
/// <summary> Gets if request is ok.</summary>
|
|
|
|
|
/// <param name="response">Response to verify.</param>
|
|
|
|
|
/// <param name="textOfAction">Text describing request which is shown if validation fails.</param>
|
|
|
|
|
/// <returns>Verified response.</returns>
|
|
|
|
|
public static T GetIsResponseOk<T>(this T response, string textOfAction) where T : ResponseBase
|
|
|
|
|
{
|
2021-06-26 20:57:55 +02:00
|
|
|
|
if (response == null || response.response_state == null)
|
2021-05-13 20:03:07 +02:00
|
|
|
|
{
|
|
|
|
|
throw new InvalidResponseException<T>(textOfAction, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (AuthcookieNotDefinedException.IsAuthcookieNotDefined(response, textOfAction, out AuthcookieNotDefinedException exception))
|
|
|
|
|
{
|
|
|
|
|
throw exception;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!response.response_state.Trim().ToUpper().StartsWith(RESPONSE_OK))
|
|
|
|
|
{
|
|
|
|
|
throw new InvalidResponseException<T>(
|
|
|
|
|
$"{textOfAction}\r\nServer Antwort: {response.response_text}",
|
|
|
|
|
response);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary> Gets if cancel or booking request is ok.</summary>
|
|
|
|
|
/// <param name="cancelBookingResponse">Response to verify.</param>
|
|
|
|
|
/// <param name="textOfAction">Text describing request which is shown if validation fails.</param>
|
|
|
|
|
/// <param name="bikeId">Id of bike.</param>
|
|
|
|
|
/// <returns>Verified response.</returns>
|
|
|
|
|
public static ReservationCancelReturnResponse GetIsCancelReservationResponseOk(
|
|
|
|
|
this ReservationCancelReturnResponse cancelBookingResponse,
|
2021-06-26 20:57:55 +02:00
|
|
|
|
string bikeId)
|
2021-05-13 20:03:07 +02:00
|
|
|
|
{
|
|
|
|
|
GetIsResponseOk<ResponseBase>(cancelBookingResponse, BIKES_CANCELREQUEST_ACTIONTEXT);
|
|
|
|
|
|
|
|
|
|
// Get bike which has to be booked.
|
|
|
|
|
var l_oBikeInfo = cancelBookingResponse?.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
|
|
|
|
if (l_oBikeInfo != null)
|
|
|
|
|
{
|
|
|
|
|
throw new ReturnBikeException(
|
|
|
|
|
cancelBookingResponse,
|
|
|
|
|
$"{BIKES_CANCELREQUEST_ACTIONTEXT} Aufruf wurde erfolgreich ausgeführt, aber Rad ist noch in Liste der reservierten Räder enthalten.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return cancelBookingResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary> Gets if return bike request is ok.</summary>
|
|
|
|
|
/// <param name="returnBikeResponse">Response to verify.</param>
|
|
|
|
|
/// <param name="textOfAction">Text describing request which is shown if validation fails.</param>
|
|
|
|
|
/// <param name="bikeId">Id of bike.</param>
|
|
|
|
|
/// <returns>Verified response.</returns>
|
2021-12-08 17:57:30 +01:00
|
|
|
|
public static DoReturnResponse GetIsReturnBikeResponseOk(
|
|
|
|
|
this DoReturnResponse returnBikeResponse,
|
2021-06-26 20:57:55 +02:00
|
|
|
|
string bikeId)
|
2021-05-13 20:03:07 +02:00
|
|
|
|
{
|
|
|
|
|
// Check if bike is at station.
|
|
|
|
|
if (NotAtStationException.IsNotAtStation(returnBikeResponse.response_state.ToUpper(), out NotAtStationException notAtStationException))
|
|
|
|
|
{
|
|
|
|
|
throw notAtStationException;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Check if GPS data was send to copri.
|
|
|
|
|
if (NoGPSDataException.IsNoGPSData(returnBikeResponse.response_state.ToUpper(), out NoGPSDataException noGPSDataException))
|
|
|
|
|
{
|
|
|
|
|
throw noGPSDataException;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GetIsResponseOk<ResponseBase>(returnBikeResponse, BIKES_RETURNBIKE_ACTIONTEXT);
|
|
|
|
|
|
|
|
|
|
// Get bike which has to be booked.
|
|
|
|
|
var l_oBikeInfo = returnBikeResponse?.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
|
|
|
|
if (l_oBikeInfo != null)
|
|
|
|
|
{
|
|
|
|
|
throw new ReturnBikeException(
|
|
|
|
|
returnBikeResponse,
|
|
|
|
|
$"{BIKES_RETURNBIKE_ACTIONTEXT} Aufruf wurde erfolgreich ausgeführt, aber Rad ist noch in Liste der gemieteten Räder enthalten.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return returnBikeResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the response for bikes occupied request with no bikes reserved.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="p_strSesstionCookie"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static BikesReservedOccupiedResponse GetBikesOccupiedNone(string p_strSesstionCookie = null)
|
|
|
|
|
{
|
2021-06-26 20:57:55 +02:00
|
|
|
|
var l_oJson = CopriCallsMonkeyStore.BIKESOCCUPIED.Replace(@"""authcookie"": """"", @"""authcookie"": """ + (p_strSesstionCookie ?? string.Empty) + @"""");
|
|
|
|
|
return CopriCallsStatic.DeserializeResponse(@"{ ""shareejson"" : " + l_oJson + "}", (version) => new BikesReservedOccupiedResponse());
|
2021-05-13 20:03:07 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|