fix: refuse implausible accommodation booking prices
This commit is contained in:
1 parent
773cd4f847
commit
56adf72d12
16 files changed
+628
-15
No files matched your search
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Exception;
|
||||
|
||||
use App\Entity\Groups\AccommodationBooking;
|
||||
|
||||
/**
|
||||
* Thrown when a computed accommodation booking total is too large to be a real price.
|
||||
*
|
||||
* The total is a product of pax count, nights and catalog prices, so a single mistyped figure
|
||||
* anywhere in that chain can produce a number nobody could owe. Storing it is pointless — it
|
||||
* would go out on an offer — and a signed INT column answers it with SQLSTATE 22003, which says
|
||||
* nothing about where the mistake is. Failing here instead names the price and the inputs it
|
||||
* came from.
|
||||
*/
|
||||
class ImplausibleBookingPriceException extends \RuntimeException
|
||||
{
|
||||
/**
|
||||
* What the backoffice is told. The total itself is in the log; the actionable part is the
|
||||
* house's price rows, which is where the stray digit is.
|
||||
*/
|
||||
public const string FORM_ERROR_MESSAGE = 'Der berechnete Gesamtpreis ist unplausibel hoch. Bitte die Preise und Leistungen des Gruppenhauses prüfen.';
|
||||
|
||||
public function __construct(int $totalPrice, int $paxCount, int $nights, ?\Throwable $previous = null)
|
||||
{
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Refusing to store an implausible booking total of %d (ceiling %d, in minor units) for %d people over %d nights — check the catalog prices for this house.',
|
||||
$totalPrice,
|
||||
AccommodationBooking::MAX_TOTAL_PRICE,
|
||||
$paxCount,
|
||||
$nights,
|
||||
),
|
||||
0,
|
||||
$previous,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user