File "OrganizationController.php"
Full Path: /var/www/html/back/app/Http/Controllers/Api/V1/OrganizationController.php
File size: 4 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\Organizations\OrganizationService;
use App\Domain\Organizations\Requests\CreateNewOrganizationRequest;
use App\Domain\Organizations\Requests\UpdateOrganizationRequest;
use App\Http\Controllers\Api\ApiController;
use App\Requests\SearchRequest;
use App\Responses\ResponseDto;
use Illuminate\Http\Request;
use Knuckles\Scribe\Attributes\Group;
/**
* Контроллер для управления счетами
*/
class OrganizationController extends ApiController
{
protected OrganizationService $organizationService;
public function __construct(OrganizationService $organizationService)
{
$this->organizationService = $organizationService;
}
/**
* Получение списка
*
* @queryParam search string Поисковый запрос для фильтрации. Пример: "Laravel"
*/
#[Group('organizations')]
#[OpenApiResponse(ResponseDto::class)]
public function index(int $modelID, SearchRequest $request): ResponseDto
{
$accounts = $this->organizationService->getAll($modelID, $request);
return new ResponseDto(
data: $accounts,
status: true
);
}
/**
* Получение по ID
*
* @param int $modelID
* @param int $id
* @return ResponseDto
*/
#[Group('organizations')]
#[OpenApiResponse(ResponseDto::class)]
public function show(int $modelID, int $id): ResponseDto
{
$account = $this->organizationService->getById($id);
return new ResponseDto(
data: $account,
status: true
);
}
/**
* Создание
*
* @param int $modelID
* @param CreateNewOrganizationRequest $request
* @return ResponseDto
*/
#[Group('organizations')]
#[OpenApiResponse(ResponseDto::class)]
public function store(int $modelID, CreateNewOrganizationRequest $request): ResponseDto
{
$account = $this->organizationService->addNew($modelID, $request);
return new ResponseDto(
data: $account,
status: true
);
}
/**
* Обновление
*
* @param int $modelID
* @param int $id
* @return ResponseDto
*/
#[Group('organizations')]
#[OpenApiResponse(ResponseDto::class)]
public function update(int $modelID, int $id, Request $request): ResponseDto
{
$account = $this->organizationService->update($id,$request);
return new ResponseDto(
data: $account,
status: true
);
}
/**
* Удаление
*
* @param int $modelID
* @param int $id
* @return ResponseDto
*/
#[Group('organizations')]
public function destroy(int $modelID, int $id, Request $request): ResponseDto
{
if(!$request->has('transfer_id') || !(int) $request->get('transfer_id')) {
return $this->error('Не передана организация, для переноса платежей');
}
$transferId = (int) $request->get('transfer_id');
if($id == $transferId) {
return $this->error('Нельзя перенести данные в удаляемую организацию');
}
$transferOrg = $this->organizationService->getById($transferId);
if(!$transferOrg) {
return $this->error('Организация для переноса не найдена');
}
if(!$this->organizationService->transferPayments($id, $transferId)) {
return $this->error('Не удалось перенести платежи');
}
if(!$this->organizationService->transferAccounts($id, $transferId)) {
return $this->error('Не удалось перенести счета');
}
$this->organizationService->delete($id);
return new ResponseDto(
status: true
);
}
}