mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-12-23 15:46:29 +01:00
42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
using System.Text.RegularExpressions;
|
|
|
|
namespace ShareeBike.Repository.Exception
|
|
{
|
|
/// <summary> Handles booking request which fail due to too many bikes requested/ booked.</summary>
|
|
public class BookingDeclinedException : InvalidResponseException
|
|
{
|
|
/// <summary> Holds error description if user/ password combination is not valid. </summary>
|
|
public const string BOOKING_FAILURE_STATUS_MESSAGE_UPPERCASE = "(OK: BOOKING_REQUEST DECLINED\\. MAX COUNT OF )([0-9]+)( OCCUPIED BIKES HAS BEEN REACHED)";
|
|
|
|
/// <summary> Prevents invalid use of exception. </summary>
|
|
private BookingDeclinedException() : base(typeof(BookingDeclinedException).Name)
|
|
{
|
|
}
|
|
|
|
/// <summary> Prevents invalid use of exception. </summary>
|
|
public BookingDeclinedException(int maxBikesCount) : base(typeof(BookingDeclinedException).Name)
|
|
{
|
|
MaxBikesCount = maxBikesCount;
|
|
}
|
|
|
|
public static bool IsBookingDeclined(string responseState, out BookingDeclinedException exception)
|
|
{
|
|
// Check if there are too many bikes requested/ booked.
|
|
var match = Regex.Match(
|
|
responseState.ToUpper(),
|
|
BOOKING_FAILURE_STATUS_MESSAGE_UPPERCASE);
|
|
if (match.Groups.Count != 4
|
|
|| !int.TryParse(match.Groups[2].ToString(), out int maxBikesCount))
|
|
{
|
|
exception = null;
|
|
return false;
|
|
}
|
|
|
|
exception = new BookingDeclinedException(maxBikesCount);
|
|
return true;
|
|
}
|
|
|
|
/// <summary> Holds the maximum count of bikes allowed to reserve/ book.</summary>
|
|
public int MaxBikesCount { get; private set; }
|
|
}
|
|
}
|