Files

66 lines
2.8 KiB
PHP

<?php
namespace Modules\Taxi\App\DTO;
use Modules\Taxi\App\Http\Requests\TaxiOrderRequest;
/**
* Класс для формирования DTO с данными по заказу на такси
*/
class TaxiOrderDTO
{
public function __construct(
public readonly int | null $id,
public readonly string | null $emp_login,
public readonly string $emp_phone,
public readonly string $taxi_date,
public readonly string $taxi_time,
public readonly string $taxi_address_from,
public readonly string $taxi_address_to,
public readonly int $cancel_rqst = 0,
) {}
/**
* Метод формирования DTO с данными по заказу такси
*
* По сути, простой сеттер, позволяющий создать для обрабатываемого объекта данных экземпляр класса для более удобного взаимодействия с ним, более стандартизированного и более надежного (так как все параметры прописаны в одном месте)
* Использование self позволяет нам не зависеть от названия текущего класса, если мы захотим его переименовать
*
* @param TaxiOrderRequest $rqst запрос с валидными данными по заказу, пришедшими с фронта
* @param string $rqstMethod метод обрабатываемого запроса. Обновление или создание, например
* @return self
*/
public static function setTaxiOrderDTO(TaxiOrderRequest $rqst, string $rqstMethod): self
{
$validated = $rqst->validated();
switch ($rqstMethod) {
case 'PATCH':
return new self(
id: $validated['id'],
//При обновлении запроса логин пользователя должен оставаться неизменным
emp_login: $rqst->emp_login,
emp_phone: $validated['emp_phone'],
taxi_date: $validated['taxi_date'],
taxi_time: $validated['taxi_time'],
taxi_address_from: $validated['taxi_address_from'],
taxi_address_to: $validated['taxi_address_to'],
cancel_rqst: $validated['cancel_rqst'] ?? null,
);
break;
default:
return new self(
id: $validated['id'] ?? null,
emp_login: $validated['emp_login'],
emp_phone: $validated['emp_phone'],
taxi_date: $validated['taxi_date'],
taxi_time: $validated['taxi_time'],
taxi_address_from: $validated['taxi_address_from'],
taxi_address_to: $validated['taxi_address_to'],
cancel_rqst: $validated['cancel_rqst'] ?? null,
);
break;
}
}
}