sharee.bike-App/SharedBusinessLogic/Repository/Exception/BookingDeclinedException.cs

43 lines
1.5 KiB
C#
Raw Normal View History

2021-05-13 20:03:07 +02:00
using System.Text.RegularExpressions;
2024-04-09 12:53:23 +02:00
namespace ShareeBike.Repository.Exception
2021-05-13 20:03:07 +02:00
{
2022-09-06 16:08:19 +02:00
/// <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)";
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Prevents invalid use of exception. </summary>
private BookingDeclinedException() : base(typeof(BookingDeclinedException).Name)
{
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Prevents invalid use of exception. </summary>
public BookingDeclinedException(int maxBikesCount) : base(typeof(BookingDeclinedException).Name)
{
MaxBikesCount = maxBikesCount;
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
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;
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
exception = new BookingDeclinedException(maxBikesCount);
return true;
}
2021-05-13 20:03:07 +02:00
2022-09-06 16:08:19 +02:00
/// <summary> Holds the maximum count of bikes allowed to reserve/ book.</summary>
public int MaxBikesCount { get; private set; }
}
2021-05-13 20:03:07 +02:00
}