File "DictionaryController.php"
Full Path: /var/www/html/back/app/Http/Controllers/Api/V1/DictionaryController.php
File size: 2.64 KB
MIME-type: text/x-php
Charset: utf-8
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api\V1;
use App\Attributes\OpenApiResponse;
use App\Domain\Payment\Enums\PaymentStatusEnum;
use App\Domain\Payment\Enums\PaymentTypeEnum;
use App\Http\Controllers\Api\ApiController;
use App\Models\Payment;
use App\Models\User;
use App\Responses\ResponseDto;
use Illuminate\Http\Request;
use Knuckles\Scribe\Attributes\Group;
class DictionaryController extends ApiController
{
/**
* Список статусов платежей
*/
#[Group('dict')]
#[OpenApiResponse(ResponseDto::class)]
public function paymentStatusList(): ResponseDto
{
$result = [];
foreach (PaymentStatusEnum::cases() as $paymentStatusEnum) {
$result[$paymentStatusEnum->value] = [
'name' => $paymentStatusEnum->title(),
'value' => $paymentStatusEnum->value
];
}
return new ResponseDto(
data: $result
);
}
/**
* Список возможных статусов для определенного типа платежа в определенном статусе
*
* @queryParam payment_type
* @queryParam payment_status
*/
#[Group('dict')]
#[OpenApiResponse(ResponseDto::class)]
public function paymentStatusFrom(Request $request): ResponseDto
{
$payment = new Payment([
'payment_type' => $request->get('payment_type'),
'status' => $request->get('payment_status'),
]);
return new ResponseDto(
data: $payment->availableStatuses
);
}
/**
* Список типов платежей
*/
#[Group('dict')]
#[OpenApiResponse(ResponseDto::class)]
public function paymentTypesList(): ResponseDto
{
return new ResponseDto(
data: PaymentTypeEnum::getList()
);
}
/**
* Список пользователей
*
* @queryParam search
*/
#[Group('dict')]
#[OpenApiResponse(ResponseDto::class)]
public function usersList(int $modelID, Request $request): ResponseDto
{
$query = User::query();
if ($request->has('search')) {
$searchTerm = mb_convert_case($request->get('search'), MB_CASE_LOWER);
$query->where(function ($query) use ($searchTerm): void {
$query->whereRaw('LOWER(first_name) LIKE ?', ['%' . $searchTerm . '%'])
->orWhereRaw('LOWER(last_name) LIKE ?', ['%' . $searchTerm . '%']);
});
}
return new ResponseDto(
data: $query->select('id', 'first_name', 'last_name')->get()
);
}
}